본문 바로가기
about Security/웹보안과 해킹

[웹해킹문제풀이] # webhacking.kr 워게임 26번

by saniii 2020. 10. 2.

<워게임 26>

 

 

 

소스 코드를 보여준다고 하니 view source 를 눌러보자

 

 

if(preg_match(“/admin/”, $_GET[‘id’])) {echo”no!”; exit(); }

>> 가장 먼저 preg_match 라는 명령어로 admin이라는 단어를 걸러내고 있음을 알 수 있음

하지만..가장 마지막 명령을 보면 If($_GET[‘id’]==“admin”) { solve(26);}

이므로 이 문제를 푸는 핵심 단어가 admin임을 알 수 있다.

 

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

>> GET형식으로 받은 id값을 urldecode()를 통해 변호하여 다시 대입해놓는다.

 

 

이제 단순히 admin이라는 단어를 url 인코딩하면 될 것 같지만

그럼에도 문제는 해결되지 않는다.

왜냐! 웹서버와 브라우저 사이에서 데이터를 교환할 때

브라우저는 폼에서 입력받은 데이터를 자동으로 인코딩한 값을 보내고

php는 자동으로 디코딩 하기 때문이다.

 

즉 내가 admin을 한번 인코딩하면 php는 자동으로 한 번 디코딩하여

브라우저로 보내므로 admin이라는 단어가 브라우저로 보내지고

이 단어는 가장 첫 명령어인 preg_match에 의해 걸러진다.

 

 


 

 

워게임 26번을 풀려면?

Admin을 두번 인코딩하여 폼에 입력한다.!

그럼 자동으로 브라우저에 한번디코딩한 값을 보내고

이는 id값에 대입되겠지? 그럼 명령( $_GET[‘id’] = urldecode($_GET[‘id’]) ; )에 따라

다시한번 디코딩하고 결국 admin을 얻게 된다.

마지막으로 If($_GET[‘id’]==“admin”) { solve(26);} 를 충족하므로

 

 

문제 26번 해결!!

 

 

 

 

 

댓글