BUUCTF-ciscn_2019_s_9
题目简介
BUUCTF上的一道ret2shellcode题目,链接在这:BUUCTF原题:ciscn_2019_s_9
漏洞点分析
首先还是拖到IDA,看到main调用了pwn函数:
进入pwn函数分析,如上图,因为距离返回地址偏移=0x24=36,而允许输入50个字符,因此存在溢出点
再看一下函数表,没找到明显的后门函数,因此考虑ret2shellcode或者ROP
之后checksec查看进一步确定方向:
可以看到保护全关,于是想到直接写shellcode即可
漏洞点利用
劫持到shellcode,最关键的步骤是确定偏移和返回地址,偏移量在上面的讨论中已经确定,所以接下来只要确定返回地址即可
但是,由于开启了ASLR,不能直接把返回地址写死为栈上的某个地址,要想办法泄露地址或者让它自动跳转到shellcode
这里有一个小的做题经验:在IDA里如果看到hint函数,大概率程序中会有jmp esp这样的汇编指令,于是去反汇编的结果中搜索一下:
顺利找到了跳转到esp的指令,因此可以无需泄露栈地址,通过esp控制执行流即可
最终的利用脚本如下:
1 | |
最后,还有一个值得注意的地方:
由于只能输入50个字节,在覆盖到返回地址后只剩下14个字节,肯定不够写shellcode,因此只能把shellcode放在缓冲区起始位置,因此在返回地址后面还需要一小段的引导代码(即脚本中的boost)
其实质上就是让esp指向shellcode,并再次jmp到esp
BUUCTF-ciscn_2019_s_9
http://0x4a-210.github.io/2025/07/27/pwn刷题记录/Shellcode/BUUCTF-ciscn-2019-s-9/