WebHacking.kr 사이트에 접속하면 회원 가입 버튼은 찾아볼 수 없고, 로그인 화면만 출력된다.


다른 워 게임과 달리 회원 가입부터 워 게임 시작이다. 어떻게 해야 회원 가입을 하고, 로그인을 할 수 있을까


사이트 접속


메인 페이지의 소스를 보면 39 ~ 44행에 주석이 되어 있다. Register 버튼을 클릭하면 회원 가입 페이지로 이동하는 소스이지만, 주석이 되어 있으므로 Register 버튼이 출력되지 않는다.


<!--

Register

===========================================

<input type=button value='Register' onclick=location.href='join/includ2_join__frm__0001.php?mode=47a09d22fe1ebd5249feb62010b437ad' style=width:50pt;height:20pt;border:0;background:black;color:lightgreen></td></tr>

===========================================

-->

회원 가입 페이지로 이동하려면 주석을 제거해야 된다. 프록시 도구, 브라우저 개발자 도구를 이용해 주석을 제거해도 되지만, onclick 이벤트에 해당하는 URL에 직접 접속해도 결과는 동일하다.


○ www.webhacking.kr/join/includ2_join__frm__0001.php?mode=47a09d2~


회원 가입


회원 가입 페이지로 이동되면 아이디, 패스워드, 이메일 정보만 입력하면 회원 가입이 되지 않고, decode me를 풀어야 회원 가입이 된다.


decode me를 보면 특정 문자열이 Base64 인코딩되어 있다. Base64 인코딩 된 문자열을 3번 디코딩하면 현재 시스템의 공인 아이피가 출력된다.

 

Base64 인코딩/디코딩


회원 가입 환영 메시지


회원 가입했을 때 입력한 계정으로 로그인을 하면 중간 위치에 그림이 출력된다.


로그인 후 화면


Enter를 클릭하면 포럼, 문제, 랭킹 등 매뉴를 볼 수 있다. 상단의 Challenges를 클릭하면 총 66개의 문제가 있다. 하지만, 62번 문제부터 출제되지 않아 61번 문제까지 풀 수 있다.


문제 목록

1번 문제를 클릭하면 level 1과 index.phps가 출력된다. level이 1인 것과 index.phps는 무슨 뜻일까


메인 페이지

index.phps를 클릭하면 소스 코드를 볼 수 있는 페이지로 이동된다. 소스 코드를 보면 초기의 user_lv 쿠키값은 1로 설정된다.


user_lv 쿠키값이 문자열이거나 6보다 크거나 같으면 1로 설정된다. 하지만, 5보다 크면 @solve()가 호출된다. 즉, @solve()가 호출되게 쿠키값을 조작해야한다.


<?

if(!$_COOKIE[user_lv])
{
SetCookie("user_lv","1");
echo("<meta http-equiv=refresh content=0>");
}

?>

<html>
<head>
<title>Challenge 1</title>
</head>

<body bgcolor=black>
<center>
<br><br><br><br><br>
<font color=white>

---------------------<br>

<?

$password="????";

if(eregi("[^0-9,.]",$_COOKIE[user_lv])) $_COOKIE[user_lv]=1;

if($_COOKIE[user_lv]>=6) $_COOKIE[user_lv]=1;

if($_COOKIE[user_lv]>5) @solve();

echo("<br>level : $_COOKIE[user_lv]"); 

?>

<br>

<pre>
<a onclick=location.href='index.phps'>----- index.phps -----</a>
</body>

</html>

구분 내용
2행 - $_COOKIE는 쿠키 값을 가져오는 환경 변수
- user_lv 쿠키값이 없으면 if()문을 실행
4행 - SetCookie() 함수는 쿠키값을 설정하는 함수
- user_lv 쿠키값이 없으면 1로 설정
21행 - eregi() 함수는 정규표현식을 사용하여 문자열을 비교하는 함수로 대소문자를 비교하지 않음
- user_lv 쿠키값이 숫자 이외의 값이면 1로 설정
23행 - user_lv 쿠키값이 6보다 크거나 같으면 1로 설정
25행 - user_lv 쿠키값이 5보다 크면 @solve() 함수를 호출
27행 - 웹 브라우저에 user_lv 쿠키값을 출력

index.phps 전의 페이지(http://webhacking.kr/challenge/web/web-01/)로 이동하여 user_lv 쿠키값을 6으로 조작한다.


EditThisCookie


쿠키값 조작


하단의 녹색 V 표시를 클릭하고 새로 고침(F5)하면 level이 1로 표시된다.


쿠키값 6으로 조작


user_lv 쿠키값을 5로 조작하면 level이 5로 표시된다.


쿠키값 5로 조작


user_lv 쿠키값을 5보다 크거나 6보다 작은 숫자(5.5)로 조작하면 Congratulation! 메시지가 출력된다.


쿠키값 5.5로 조작


확인 버튼을 클릭하면 1번 문제를 통과했고, 포인트 200점을 얻었다는 메시지가 출력된다.


1번 문제 통과


1번 문제를 통과 했으므로 prob1 메시지가 표시되고, 하단의 포인트가 200점, 랭킹이 9,259로 표시된다.


문제 풀이 현황


▶ WebHacking.kr 2번 문제 풀이

▶ WebHacking.kr 3번 문제 풀이

▶ WebHacking.kr 4번 문제 풀이

▶ WebHacking.kr 5번 문제 풀이

▶ WebHacking.kr 6번 문제 풀이

  • 카카오톡-공유
  • 네이버-블로그-공유
  • 네이버-밴드-공유
  • 페이스북-공유
  • 트위터-공유
  • 카카오스토리-공유