[HarekazeCTF2019]baby_rop2
使用checksec查看:

只开启了栈不可执行。
先放进IDA中分析:

v3 = read(0, buf, 0x100uLL);:变量buf可读入0x100大小的数据,距离rbp0x20,存在栈溢出。
题目思路
- 在静态代码审计的时候只发现了一个栈溢出漏洞。
- 程序中没有
system()函数,也没有/bin/bash字符串。 - 考虑用ret2libc的方式去做。
步骤解析
64位程序传参的时候是先会使用寄存器的,所以我门先要找到可用的
rdi和rsi地址。

rsi采用第二个,r15在本次pwn中使用不到,直接置为0即可。接着只需要套用ret2libc的公式就能getshell了。
注意有个坑:需要使用
read@got,printf@got不知道为啥使用不了。在getshell之后还有个小坑:flag不在当前目录,在
/home/babyrop2/flag下。

完整exp
from pwn import *
#start
r = remote("node4.buuoj.cn",266
[HarekazeCTF2019] Baby_Rop2:64位ROP利用与ret2libc技巧

本文介绍了在[HarekazeCTF2019]的baby_rop2挑战中,通过静态代码审计发现的栈溢出漏洞,并详细讲述了如何利用rop技术,避开system()和/bin/bash,通过ret2libc技术获取shell的过程,包括寄存器利用、got表地址计算及最终的攻击步骤和exploit代码。
最低0.47元/天 解锁文章
1800






