
위 사진은 ?만 보이지만 처음 문제를 클릭해서 웹페이지에 접속했을 땐,
? 부분의 문자가 빠른 속도로 바뀌다가 마지막에 ?가 되어 멈추었습니다.
앞에부분만 살짝 봤을 땐 F L A G {..... 형식이었어서 보여준 문자들을 이어맞춘게 정답이란 걸 알 수 있었죠.
힌트를 얻기위해 코드를 바로 보겠습니다.

정확히 해석하지는 못했지만... 이래저래 검색을 해보니
run() 함수는 구버전, 신버전 브라우저에 모두 작동하도록 하는 역할을 하는 것 같고, answer 함수가 아까 화면에서 본 것 처럼 한 글자씩 출력해준 이 문제의 핵심 부분인 것 같습니다.
자세히 살펴보겠습니다.
get방식으로 서버에 요청을 보내고 응답 받은 텍스트를 aview 라는 HTML요소안에 출력을 합니다.
aview는 위에 body부분에서 글자를 출력해 주고있네요.
서버가 응답을 해주는 한 20ms의 간격으로 숫자를 하나씩 늘려나가면서 요청을 받은 후, 응답이 빈 문자열이면 ?를 출력하며 멈춥니다.
엄청 빠르게 문자들을 출력해준다는건데... 요청과 응답 한 번 마다 한 문자씩 출력한다는 뜻이니
버프스위트로 응답을 잡아주면 되지않을까요?
바로 해보겠습니다.

역시나 서버에서 한 글자씩 주는 응답을 잡아주네요.
바로 메모장을 키고 받는 응답들을 하나하나 이어보니...
FLAG{a7981201c48d0ece288afd01ca43c55b} 라는 값이되네요.
webhacking.kr의 메인 페이지에서 auth를 눌러서 플래그를 입력해주면

문제 해결입니다!
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
뭐 응답 하나하나를 받아서 해결했지만... 출제자가 원한건 이게 아니였겠죠?
다시 코드를 보면서 풀어보았습니다.

잴 중요한 부분이라 유심히 보다보니...
각 요청당 20ms로 설정된 부분을 1000이나 더 높은 숫자로 바꿔줌으로써 딜레이를 주고, 그걸 이어서 받아적는 식도 가능하겠네요.
또한
aview.innerHTML=x.responseText;
이 코드를 통해 aview에 한 글자 씩만 출력이되다보니 조금 수정을 해주면..
aview.innerHTML += x.responseText;
이렇게 글자를 이어서 출력하게도 할 수 있더라고요.
대신 바로 아래에 응답이없으면 ?를 출력하게 하는
if(x.responseText=="") aview.innerHTML="?";
이 부분을 지워줘야 플래그를 오래 볼 수 있었습니다.
이런식으로 코드를 수정해서 다시 새로고침을 하면

위처럼 플래그를 한 눈에 볼 수 있네요!
아마 이게 정석적인? 해결 방식이지않나 싶습니다.
'보안 > 워게임 (웹 해킹)' 카테고리의 다른 글
| Challenge - old-23 write up (0) | 2025.04.12 |
|---|---|
| Challenge - old-27 write up (0) | 2025.04.09 |
| Challenge - old-38 write up (0) | 2025.04.05 |
| Challenge - old-39 write up (0) | 2025.04.04 |
| Challenge - old-10 write up (0) | 2025.03.31 |