
1. 문제 정보
- 문제 번호 : old -10
- 문제 점수 : 25점
2. 문제 분석

문제를 들어가면 0이 보이고 코스가 보인다. 0을 누르면 y0u가 나오고 앞으로 한칸 간다.
goal까지 들어가야하는 문제 같다.
소스코드를 보면 한번 누를때마다 1씩 올라가고 1600번에서 if문이 실행된다.
<html>
<head>
<title>Challenge 10</title>
</head>
<body>
<hr style=height:100;background:brown;>
<table border=0 width=1800 style=background:gray>
<tr><td>
<a id=hackme style="position:relative;left:0;top:0" onclick="this.style.left=parseInt(this.style.left,10)+1+'px';if(this.style.left=='1600px')this.href='?go='+this.style.left" onmouseover=this.innerHTML='yOu' onmouseout=this.innerHTML='O'>O</a><br>
<font style="position:relative;left:1600;top:0" color=gold>|<br>|<br>|<br>|<br>Goal</font>
</td></tr>
</table>
<hr style=height:100;background:brown;>
no hack
3. 풀이
this.href='?go='+this.style.left를 보고 ) ?go=1600px를 해봤는데 no hack이 나온다.

자바스크립트 콘솔에서 hackme.style.left = "1590px"를 하고 10번 클릭하니까 성공했다.

주소에서 바로 안되는 이유는 주소창에 직접 입력했을 때 no hack이 뜨는 이유는 서버가 요청의 출처(Referer)를 검사하기 때문일 가능성이 매우 높다. 링크를 클릭하면 referer헤더를 넣지만 주소창에 입력할 경우에는 넣지않는다.
4. 요약
- 주소창에 URL을 직접 입력하면 브라우저가 출발지 정보(Referer)를 서버에 보내지 않아서 비정상 접근으로 차단된다.
- 반면 콘솔로 위치를 조작했더라도 링크를 직접 클릭하면 출발지 정보가 정상적으로 전송되어 서버 인증을 통과했다.
- 즉 서버는 단순히 1600이라는 값만 보는 것이 아니라, 요청이 실제 게임 페이지에서 발생했는지 확인하는 검증 로직을 가지고 있다.
'워게임 > webhacking.kr' 카테고리의 다른 글
| [webhacking.kr] old-59 문제 (0) | 2026.02.02 |
|---|---|
| [webhacking.kr] old-61 문제 (0) | 2026.02.02 |
| [webhacking.kr] old-12 문제 (0) | 2026.01.30 |
| [webhacking.kr] old-51 문제 (0) | 2026.01.30 |
| [webhacking.kr] old-43 문제 (0) | 2026.01.30 |