BUUCTF-HarekazeCTF2019-babyrop2
题目简介
BUUCTF原题,链接在这:BUUCTF原题:[HarekazeCTF2019]baby_rop2
漏洞点分析
首先还是拖进IDA里分析:
可以看到溢出点发生在main函数,并且从左侧的函数表来看没有明显的后门函数
接下来用checksec查看一下保护:
可以看到只开启了NX保护,再联系到题目给了libc.so.6的附件,可以分析出这道题需要ret2libc
漏洞点利用
首先通过IDA看出偏移量offset=0x20+0x8=0x28
接下来考虑如何泄露libc基地址
注意观察程序中没有调用puts函数,但有一个printf函数,所以只能通过printf来输出libc的基地址
接下来希望能找到程序本身存在的格式化字符串,在IDA中使用shift+F12,可以看到在程序的只读数据段(.rodata)存在%s格式字符串,如图:
然后鼠标双击这个字符串,可以找到格式化字符串的实际地址,如图:
printf函数有两个参数,因此要寻找pop rdi、pop rsi和ret指令碎片:
如上图所示,最终找到可用的pop rdi、pop rsi和ret指令的碎片分别在0x400733、0x400731和0x4004d1的位置
注意,这个程序里面没有完美的pop rsi ; ret序列,只能用0x400731处的pop rsi ; pop r15 ; ret序列凑活一下,到时候多填充个数给r15即可
最后,用于泄露地址的目标函数还是选择__libc_start_main
综上,最终的利用脚本如下:
1 | |
BUUCTF-HarekazeCTF2019-babyrop2
http://0x4a-210.github.io/2025/07/27/pwn刷题记录/ROP/ret2libc/BUUCTF-HarekazeCTF2019-babyrop2/