프로젝트/Webhacking.kr

[Webhacking.kr] Challenge(old) 26번 문제

Uggjjini 2021. 7. 8. 13:19

문제 페이지는 해당 페이지와 같다.

 

 

view-source 링크가 존재한다.

 

링크를 통해 페이지 소스코드를 확인한다.

 

 

하단의 php 부분을 중심으로 해석한다.

 

<?php
  if(preg_match("/admin/",$_GET['id'])) { echo"no!"; exit(); }
  $_GET['id'] = urldecode($_GET['id']);
  if($_GET['id'] == "admin"){
    solve(26);
  }
?>

 

GET 방식으로 id 를 받아와 preg_match() 함수를 통해 admin 과 일치하는지 확인한다. 

 

일치하는 경우 조건문이 실행되어 "no!" 라는 문구와 함께 종료된다.

 

admin 과 일치하지 않은 경우 GET 방식으로 받아온 id 값을 url 디코딩을 한다.

 

url 디코딩을 한 값이 admin인 경우 해당 문제가 풀린다는 것을 알 수 있다.

 

 

먼저 amdin 을 url 인코딩 표를 통해 인코딩을 진행한다.

 

 

admin %61%64%6d%69%6e

 

url 인코딩을 한 결과를 URL에 id 파라미터 값으로 보낸다.

 

 

해당 URL로 전송하면 id 파라미터 값으로 입력한 url 인코딩한 값이 저절로 admin 으로 변환되고 페이지에는 no! 라는 문구가 출력된다.

 

 

 

웹 서버와 브라우저 간의 통신에, 브라우저는 form에서 입력받은 데이터를 자동으로 인코딩하여 그 값을 php 서버로 전송하고 php는 전달 받은 인코딩 된 값을 자동을 디코딩한다.

 

그래서 GET 방식으로 보낸 url은 php서버에서 자동으로 디코딩 되어 preg_match() 함수에 의해 필터링 되어 no 문구가 출력된다.

 

그래서 admin을 두번 인코딩하여 URL의 id 파라미터 값에 넣어 전송한다.

 

해당 사이트를 통해 admin을 url 인코딩한 값을 한번더 인코딩시킨다.

 

https://www.convertstring.com/ko/EncodeDecode/UrlEncode

 

URL 인코딩 - 온라인 URL 인코더

 

www.convertstring.com

 

 

admin을 두번 url 인코딩한 값을 URL 의 id 파라미터 값에 넣어 전송하면 해당 문제가 풀리는 것을 확인할 수 있다.