ROP实例分析(三)--------------------------实例分析

本文详细分析了一个ROP(Return-Oriented Programming)攻击实例,包括IDA分析程序逻辑,构造ROP链以获取system函数地址,并最终实现执行`system("/bin/sh")`。通过泄露内存、利用DynELF模块找到system地址,以及精心设计的payload,文章阐述了整个攻击过程和技术细节。
摘要由CSDN通过智能技术生成

实例分析

源程序

链接:https://pan.baidu.com/s/1ovTSgXf5sGBsNMEUiIQ5JA 密码:zt4k



一、IDA分析

分析过程

首先关注mian函数可以看到程序流程

设置定时器

打印输出Welcometo RCTF\n

清空_bss_start数据流

读取用户输入到buff(1024字节)中去

调用echo函数,参数为buff


然后看子函数echo流程如下

将用户输入的buff逐字节地拷贝到s2(16字节)中,如果遇到\x00截断


于是我们找到了漏洞所在处


我们要做的工作就是覆盖返回地址并且构造rop链。


程序逻辑

整个程序逻辑是这样的,main函数中,用户可以输入1024个字节,并通过echo函数将输入复制到自身栈空间,但该栈空间很小,这使得栈溢出成为可能。由于复制过程中,以“\x00”作为字符串终止符,故如果我们的payload中存在这个字符,则不会复制成功;但实际情况是,因为要用到上面提到的通用gadget来为write函数传参,我们会在payload里面指定gadget的地址,而64位的地址中肯定含0x00,故肯定会在payload中包含“\x00”字符。

但是由于echo函数的栈空间很小,与main函数栈中的输入字符串之间只间隔32字节(64位下:16字节s2+8字节rbp+8字节ret_addr)。下面是调用echo函数但是还没有进

gdb-peda是一个用于GNU Debugger (gdb) 的增强工具,它提供了额外的功能,使得调试更加方便和高效。peda是Python Exploit Development Assistance for GDB的缩写,它为漏洞利用的开发提供了许多便捷的功能。以下是使用gdb-peda的一些基本步骤: 1. 首先需要安装gdb-peda。你可以从其GitHub仓库下载并安装。通常,这可以通过以下命令来完成: ``` git clone https://github.com/longld/peda.git ~/peda echo "source ~/peda/peda.py" >> ~/.gdbinit ``` 2. 在使用gdb启动你的程序前,确保已经导入了peda。这一步在启动gdb时,会自动加载.peda.py文件。 3. 启动gdb并附加到你的程序。如果程序已经在运行,可以使用`attach`命令附加到进程。如果要启动一个新的程序,可以使用`run`命令。 4. 使用peda提供的命令来进行调试。例如: - `pattern_create` 和 `pattern_offset`:用于生成和分析字符串模式,帮助定位漏洞。 - `searchmem`:在内存中搜索指定的字节序列。 - `vmmap`:显示程序的内存布局。 - `ROPgadget`:用于ROP攻击中的gadget查找。 - `shellcode`:为特定架构生成或测试shellcode。 5. 使用标准的gdb命令结合peda增强的功能,如断点、单步执行、查看和修改寄存器和内存等,来逐步调试程序。 6. 当完成调试后,可以使用`quit`命令退出gdb-peda。 使用gdb-peda时,请注意,你可能需要根据你的具体需求和所使用的gdb版本调整命令和配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值