level-3
题目简介
题面很简单,提示我们了,需要使用ROP去触发一个多阶段的win函数
漏洞点分析
拖进IDA,看到溢出点发生在challenge函数,如图
然后checksec看看开启了哪些保护
可以发现只开启了NX,不能自己写shellcode
接下来尝试寻找后门函数,注意到IDA逆向结果显示有5个win函数,基本可以猜测就是输出flag的后门函数,分别点进去分析源码,如下5张图所示




可以观察到每个函数只输出一部分flag,并且会检查参数是否等于stage编号
由此,结合题面提示,漏洞点就清晰了:利用溢出,构造ROP链,按顺序调用这5个win函数即可
漏洞点利用
首先,依然是确定偏移量,在IDA里可以直接读出来offset=0x40+0x8=0x48
接下来寻找可用的指令碎片(一般是找ret,以及如果是64位程序,还要找传参用的pop rdi; ret序列),通过ROPgadget工具:
1 | |
之后在gadgets.txt中搜索到ret指令和pop rdi指令:
可以看到我们想要的指令分别在0x402373和0x40101a
最后,分别找到5个win函数的地址,可以使用objdump工具,或者在IDA里看
由于没有开启PIE,上述找到的地址均可直接使用(即写死在脚本里)
有了以上信息,可以编写出如下利用脚本:
1 | |
level-3
http://0x4a-210.github.io/2025/07/20/pwn.college/Program-Securtity/ROP/level-3/