这是我第一次见到srop的用法的题目,于是在此记录方便以后的复习
拿到程序例行检查
将程序放入ida中
可以看到栈的大小是0x10,却可以显示出0x30的内容,所以我们可以通过这个溢出泄露出/bin/sh在栈的偏移值
关于srop的解析,我在这里贴一个ctfwiki的解析
SROP - CTF Wiki (ctf-wiki.org)
所以当我们使用sigreturn,需要让不同的寄存器对应不同的值,然后将返回地址覆盖为sigfrme的地址就能获取到系统的shell
首先我们需要获取/bin/sh在栈中的偏移
通过计算可以计算出偏移为296
于是我们让sigfrme的各个寄存器的条件满足各个的条件,然后在ret覆盖为sigfrme的地址
sigfrme = sigreturnFrame()是pwntools的功能
完整exp如下
成功获得flag
结束!!