[webhacking.kr] 1번 (200pt)

Nov 3, 2018 00:00 · 478 words · 1 minute read web

시작하기

Imgur

index.phps라고 쓰여져있다. 먼저 현재 주소인 http://webhacking.kr/challenge/web/web-01/ 뒤에 index.phps를 붙여보자.

Imgur

위와 같이 현재 페이지의 PHP 소스를 확인할 수 있다. 이제 이 소스를 분석해보자.

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

PHP 코드가 쓰여진 두 부분 중 첫 번째를 살펴보자.

만약 user_lv라는 이름의 Cookie가 없다면, user_lv Cookie 생성 및 1 값을 할당한다. 동시에 html meta tag를 통해 refresh하는 것을 알 수 있다.

//...
<?
$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]");
?>
//...

두 번째 부분에서는 password를 알 수 없는 문자라고 정의해 둔 후, eregi() 함수의 정규표현식, [^0-9,.]를 통해 Cookie로 설정된 user_lv의 값을 체크하고 있다. 정규표현식에서는 0에서 9까지의 숫자(0-9)와 일치(,.)하지 않을 경우(^)를 확인하고 있다. 계속해서 살펴보면, Cookie로 설정된 값이 정규표현식에 해당되거나 6이상인 경우 Cookie 값을 1로 설정한다. 마지막으로 user_lv가 5 초과인 경우 solve()함수를 오류없이 실행(@)하도록 짜여져 있다.

결국 이 문제는 주어진 Cookie의 값을 변조하면 풀리는 문제이다. 5 초과 6 미만의 값을 넣고 index.php로 돌아오면 다음과 같은 화면을 볼 수 있다.

Imgur Imgur Imgur