webhacking.kr 26번

목차

26번 문제 : URL Encoder/Decoder


<?

if(eregi("admin",$_GET[id])) { echo("<p>no!"); exit(); }

$_GET[id]=urldecode($_GET[id]);

if(
$_GET[id]=="admin")
{
@
solve();
}

?>


<br><br>
<a href=index.phps>index.phps</a>

 

문제를 들어가고  index.phps 를 클릭하면 위와 같은 소스가 나온다.


get방식으로 데이터 id가 admin이면 문제를 해결하는 소스!!


옛날에 풀었을 때 admin 을 인코딩 해서 안되길래 관리자분께 물어봤던 기억이 난다.


위에 소스를 보면 $_GET[id]=urldecode($_GET[id]); 에서 소스 자체에서 한번 디코드를 한다.

php에는 url 인코드 디코드 기능이 있나보다.


admin을 한번 인코딩 하면

%61%64%6d%69%6e 다음과 같이 된다. 

인코딩을 한 번만 하는 것은 웹 브라우져에서 %61%64%6d%69%6e = admin 이랑 똑같이 인식이 된다.

그래서 %61%64%6d%69%6e를 데이터로 보내면 


위의 소스 if(eregi("admin",$_GET[id])) { echo("<p>no!"); exit(); }  에 의해 정답이 아니게 된다.

그럼 다시 생각해보자


%61%64%6d%69%6e 를 한 번더 인코딩하면 

%2561%2564%256d%2569%256e 이런 값이 나온다. 즉 % -> %25 로 인코딩이 되었다.


%2561%2564%256d%2569%256e 이 코드는 처음 웹브라우져로 데이터를 보내면

if(eregi) 문에 의해 필터가 되지 않는다.


$_GET[id]=urldecode($_GET[id]);


%61%64%6d%69%6e =  urldecode (%2561%2564%256d%2569%256e);


가 되므로 admin 이 인식된다!


http://webhacking.kr/challenge/web/web-11/index.php?id=%2561%2564%256d%2569%256e


  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유