티스토리 뷰

최종 수정: 2015-10-27

hackability@TenDollar


안녕하세요. Hackability 입니다.


이번에 포스팅 할 내용은 2015 TrendMicro CTF의 Proramming 100 문제인 click on the different color 라는 문제입니다.


본 문제는 웹 에서 자주 사용 되었던 게임인 다른 색 맞추기 게임 입니다. (아래 링크에서 한번 플레이 해보시기 바랍니다)


문제는 이 문제를 자동적으로 빠르게 풀어야 하기 때문에 프로그래밍으로 풉니다.

일단 아이디어는 다음과 같습니다.

1. 문제에 접속합니다.
2. 문제가 플래쉬가 아니라 png로 떨어지기 때문에 해당 png를 다운 받습니다.
3. 프로그래밍을 통해 하얀색을 제외한 다른 컬러중 가장 색 값이 적은 컬러의 위치를 찾습니다.
4. 문제에 전송합니다.

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
60
61
62
63
64
65
66
67
68
69
70
71
import requests
from PIL import Image
 
params = {}
 
for idx in range(0100):
    r = requests.get(init_url, params=params)
 
    res = r.content
    print res
 
    res = res.split("<img src=\"")[1]
    res = res.split(".png")[0+ ".png"
 
    png_url = url + res
    sha1 = res.split("/")[2].split(".png")[0]
    print sha1[1:]
    print png_url
 
    # Write png
    r = requests.get(png_url)
    fd = open("test.png""wb")
    fd.write(r.content)
    fd.close()
 
    im = Image.open('test.png')
    pix = im.load()
 
 
    (width, height) = im.size
 
    test = {}
    pos  = {}
 
    for x in range(0, width):
        for y in range(0, height):
            (r, g, b) = pix[x,y]
            key = hex(r * (255**2+ g * (255*1+ b * 1)[2:]
 
            if key == 'fe01ff':
                continue
 
            try:
                test[key] += 1
            except KeyError as e:
                test[key] = 1
                pos[key] = (x, y)
 
    print test
    print pos
 
    _min = 99999999999999
    str_min = ''
 
    for x in test:
        if _min > test[x]:
            _min = test[x]
            str_min = x
    print str_min
 
    init_url = url + "/" + sha1
    params = {
        'x': pos[str_min][0],
        'y': pos[str_min][1]
    }
 
    print init_url
 
cs

계속 돌려놓으면 페이지에 플레그가 나타납니다.

댓글