pwnable.kr coin1 문제를 풀어보자. 이번 문제는 그냥 프로그래밍 문제여서 처음으로 혼자의 힘으로 풀 수 있었다..ㅋ.ㅋ



참고) nc(netcat)은 TCP나 UDP 프로토콜을 사용하는 네트워크 연결에서 데이터를 읽고 쓰는 간단한 유틸리티 프로그램이다. 일반적으로는 UNIX의 cat과 비슷한 사용법을 가지고 있지만 cat이 파일에 쓰거나 읽듯이 nc는 network connection에 읽거나 쓴다. 이것은 스크립트와 병용하여 network에 대한 debugging, testing tool로서 매우 편리하지만 반면 해킹에도 이용범위가 넓다. (출처: http://htst.tistory.com/61) 




접속하면 바로 이런 화면이 뜬다. N개의 동전 중 1개의 위조동전이 있는데 진짜 동전은 무게가 10, 위조 동전은 무게가 9라고 한다. 

무게를 알고 싶은 동전의 인덱스번호를 입력하면 그 무게를 가르쳐주고, 입력할 수 있는 동전의 개수에는 제한이 없다. 

C번의 시도 안에 위조동전을 찾아내면 성공. 

60초 안에 100개의 위조동전을 찾아내야 한다. 잠시 손으로 할까 라는 생각을 했지만.. 역시 아니다. 


이번에도 pwntools를 이용해서 코드를 짜봤다.


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
from pwn import * 
import re
import time
 
def compare(start, temp):
    comm = ""
    end = (start + temp) // 2
    global gcomm
    for i in range(start, end):
        comm += "{} ".format(i)
    if len(comm.split(" ")) == 2:
        while True:
            p.sendline(comm)
            tmp = p.recvline()
            if "10\n" in tmp:
                while True:
                    p.sendline(gcomm)
                    tmp = p.recvline()
                    if "Correct" in tmp:
                        return
                        break
            else:
                if "Correct" in tmp:
                    return
                    break
    p.sendline(comm)
    tmp = p.recvline()
    if "Correct" in tmp:
        return
    if tmp.endswith("9\n"):
        gcomm=comm.split(" ")[-2]
        compare(start, end+1)
    else:
        compare(end, temp)
 
np = re.compile("N=(\d+)")
cp = re.compile("C=(\d+)")
gcomm=""
 
= remote("pwnable.kr",  9007)
tmp = p.recvline()
 
while tmp:
    print(tmp)
    if tmp.startswith("N="):
        n = int(np.search(tmp).group(1))
        c = int(cp.search(tmp).group(1))
        compare(0, n)
    tmp = p.recvline()
 

cs


이진탐색트리로 구현해보았다..

개떡같은 코드이지만,,, 어쨌든 돌아가면 그만... 


풀었다..~


'WriteUp > pwnable.kr' 카테고리의 다른 글

pwnable passcode writeup  (0) 2019.01.01
pwnable input writeup  (0) 2018.12.30
pwnable.kr fd writeup  (0) 2018.12.29

+ Recent posts