一题需要动调的ret2text
仅供个人学习参考
题目附件:https://raw.githubusercontent.com/C17zz/Pages/main/Img/stack
基本流程
checksec一下
nx打开,没有pie,没有canary
转ida
init()初始化作用,剩下一个vuln函数
可以看到用for循环加read函数往s数组写入,但是for循环的次数由用户控制,这就存在缓冲区溢出漏洞,并且存在backdoor函数,是一个ret2text模型
我们先试着打看看
会发现打不通
打不通有两种情况,一种是没有执行到backdoor,一种是执行到了但是因为栈对齐的问题导致system函数没有正常执行。
动态调试
这个时候就要进入动态调试环节,我们先把断点下在vuln结束的ret处
然后发现填入的数据并没有覆盖到rbp+8处,说明read函数有问题
于是我们再将断点下在call read处
然后continue,直到在偏移(相对于数组起始地址)0x1c处,我们看到在此时read的汇编是这样
read写入的地址存储在rsi,rsi由rax赋值给它,rax=rax+rdx,即[rbp - 4]+[rbp - 0x20],而此时我们发现[rbp - 4]的地址正是偏移(相对于数组起始地址)0x1c处,所以0x1c处填入的数据会改变read写入的地址,于是我们的payload需要做出改变,在0x1c处填入’\x27’,从而让read写入的地址跳转到[rbp + 8],再补上backdoor的地址就可以了
exp
1 | from pwn import* |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.