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函数但是还没有进

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值