CTF/웹해킹

[Space Heroes CTF] Mysterious Broadcast - 웹해킹 / Requests / Binary

SecurityMan 2022. 4. 9. 21:00

 

이번 대회에서 가장 어려운 문제로 분류되었던 웹해킹 문제

 

문제 설명을 읽어보면 8개의 휴머노이드가 있었는데 지금은 7개 밖에 없다고 한다.

 

이 부분이 엄청난 힌트가 된다.

 

이 휴머노이드들이 뭔가를 broadcast 하는거 같은데 이걸 해석해달라고 한다.

 

반응형

 

역시나 문제 소스는 주어지지 않고 문제페이지 주소만 제공된다.

 

 

문제 페이지에 접속한 화면이다.

 

맨 처음 접속하면 아무것도 없고 그냥 ~ 하나만 보인다.

 

어떤 그림도 버튼도 입력창도 아무것도 없다.

 

그냥 저 문자 하나만 나온다.

 

 

새로고침을 눌러보면 ~ 가 있던부분이 이제 1로 바뀌었다.

 

 

또한번 새로고침을 누르면 이번엔 0으로 바뀐다.

 

계속 새로고침을 눌러봤는데

 

이게 규칙성 있게 변하는게 아니라 어떨때는 0 어떨때는 1

 

마치 무작위적으로 나오는듯 보였다.

 

여기서 갑자기 든 생각이 문제 설명에서 휴머노이드들이 브로드캐스트 한다고 했으니

 

0 1 0 1 이렇게 나오는 값들이 이진 코드가 아닐까? 였다.

 

그래서 파이썬을 이용해 출력되는 값들을 모아보기로 했다.

 

import requests
import time

url = 'http://173.230.134.127/seq/99e1ae5a-1e1a-4809-930c-5870ebf7ff16'
string = ''

while True:
    r = requests.get(url)
    string += r.text
    print(string)
    
    time.sleep(1)

 

requests 모듈을 이용했다.

 

문제페이지의 URL을 지정해주고, 출력값을 담을 string 변수도 만들어줬다.

 

while 문을 통해 계속 반복되도록 했고,

 

요청을 하고난 뒤 응답 패킷을 strings 변수에 += 을 이용해 계속 추가해줬다.

 

한번 요청을 보내고 나면 time.sleep(1) 을 이용해서 잠깐씩 텀을 두도록 했다.

 

 

코드를 실행시키면 이렇게 나온다.

 

문제 페이지 접속 -> 출력된 문자열 수집 -> 새로고침 -> 출력된 문자열 수집의 반복이라고 생각하면 된다.

 

 

조금 시간이 지나면 이렇게 010101로 된 데이터가 수집되게 된다.

 

블록잡힌 부분을 보면 ~로 시작해서 맨 뒤에 ~가 다시 나오는걸 볼 수 있는데

 

~는 시작을 의미하는 기호가 아닐까라고 생각했다.

 

 

첫번째 ~ 뒤부터 두번째 ~ 앞까지있는 0101데이터들을 복사해서 CyberChef에 넣어보았다.

(https://gchq.github.io/CyberChef/)

 

From Binary 로 디코딩을 시도했을때 Output을 보면 에러가 나는것을 볼 수 있다.

 

아까 맨 처음 문제 설명을 생각해보자.

 

8개의 휴머노이드가 있었는데 이젠 7개 밖에 없다고 했다.

 

바이너리 코드는 01010101 처럼 8개 숫자로 이루어져있다. 

 

지금 수집한 바이너리 코드는 한개의 숫자가 모자란채로 수집되었다고 추측해볼 수 있다.

 

 

읽기 쉽도록 수집한 이진코드를 7자리씩 끊어서 띄어쓰기를 했고,

 

부족한 1개의 숫자를 보충하기 위해서 각 마디마다 맨 앞에 0을 하나 추가했다.

 

예를들어 11000110110010 같은 경우

 

1100011 0110010 로 7자리씩 쪼개고

 

01100011 00110010 이런식으로 맨 앞에 0을 하나더 추가한 것이다.

 

그렇게 하면 아까랑 다르게 Output에 알수없는 문자열이 출력되는것을 확인할 수 있다.

 

저렇게 문자열 맨 뒤에 == 이 오게되면 base64로 인코딩된 것이다.

 

 

출력값을 base64로 디코딩 해주면 플래그를 획득할 수 있다.

반응형