이번 대회에서 가장 어려운 문제로 분류되었던 웹해킹 문제
문제 설명을 읽어보면 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로 디코딩 해주면 플래그를 획득할 수 있다.
'CTF > 웹해킹' 카테고리의 다른 글
[HackPack CTF] Insp3ct0r - 웹해킹 / 주석 (50) | 2022.04.12 |
---|---|
[HackIM CTF] Texnology - 웹해킹 / LaTeX (36) | 2022.04.10 |
[Space Heroes CTF] Flag in Space - 웹해킹 / Requests / BeautifulSoup (28) | 2022.04.09 |
[Space Heroes CTF] Space Buds - 웹해킹 / 쿠키변조 (32) | 2022.04.08 |
[Space Heroes CTF] R2D2 - 웹해킹 / robots.txt (48) | 2022.04.07 |