tmxklab

2020 DownUnderCTF - [misc] homepage 본문

CTF 문제

2020 DownUnderCTF - [misc] homepage

tmxk4221 2020. 9. 21. 16:48

1. 문제 확인

이전 홈페이지 로고가 무지개색이 아니었냐고 하면서 어떻게 작동되는지 궁금해한다.

나도 궁금하다. 그리고 홈페이지 링크와 hint가 주어진다.

 


2. 문제 접근

 

먼저 힌트를 보면 8비트 단위로 끊어진 바이너리를 확인할 수 있다.

 

 

얼마 안되는 거 같아서 아스키코드표를 참고하면서 열심히 옮겨 적었다...

힌트 내용이 바이너리를 고려했냐고 한다.

 

 

이제 홈페이지의 로고가 어떻게 되어있는지 보자

마우스를 가져다 대면 색깔이 변경된다. 하다 보니 재밌어서ㅋㅋㅋ 다 바꿨다.

 

최종적으로 변경된 모습은

 

그런데 이거를 가지고 무엇을 할까 하다가

 

html파일을 확인해보니 각 점들의 좌표?는 cx, cy로 색깔은 rgb로 설정된다.

 

 

처음에는 바이너리와 관련되어 있는 문제인 것 같아서 rgb(0,82, 72)인 점을 0으로 rgb(195, 252, 241)인 점을 1로 매칭시키고 위에 힌트처럼 8비트 단위로 나누고 문자로 변경하는 식으로 접근했지만 플래그 값이 나오질 않았다.

 

 

그 다음 생각한 방법은 html을 보면 위에서부터 dot의 cx, cy가 뒤죽박죽인 것을 알 수 있다.

그래서 cx, cy를 오름차순으로 정렬해주고 rgb(0, ...)인 것은 0으로 rgb(195, ...)인 것은 1로 세팅하였다.

 

 

이것 역시 8bit로 끊어 보니 뭔가 문자로 변경가능할 것 같았다.

 

 

파싱 코드...

from bs4 import BeautifulSoup
import time

html = open("DownUnderCTF.html", encoding="UTF8")

bs = BeautifulSoup(html, 'html.parser')
tag1 = bs.find_all('circle')

p_list = []
c_list = []
new_list = []

# 1. parsing...
for tag in tag1:
    p_list.append(tag)

for i in range(len(p_list)):
    c_list = []
    c_list.append(int(p_list[i]['cx']))
    c_list.append(int(p_list[i]['cy']))
    c_list.append(int(p_list[i]['style'][10:11]))
    new_list.append(c_list)

# 2. sort
sort_list = sorted(new_list)

count = 1
output_list = []

# 3. 8 bit
for data in sort_list:
    if data[2] == 0:
        output_list.append("0")
    else:
        output_list.append("1")
    if count == 8:
        output_list.append("\n")
        count = 0
    count += 1

print(''.join(output_list))

DownUnderCTF.html
0.04MB

 

 

 

Comments