• 문제경로
  • 문제풀이

 

 

 

[문제경로]

https://webhacking.kr/challenge/web-11/

 

Challenge 26

 

webhacking.kr

 

 

 

[문제풀이]

문제에 접속하면 view-source라는 하이퍼링크가 있어서

source code를 확인했다.

 

 

<?php
  include "../../config.php";
  if($_GET['view_source']) view_source();
?><html>
<head>
<title>Challenge 26</title>
<style type="text/css">
body { background:black; color:white; font-size:10pt; }    
a { color:lightgreen; }
</style>
</head>
<body>
<?php
// 만약 id에 "admin"이라는 문자열이 포함되어 있다면 "no!"를 출력하고 스크립트를 종료한다.
  if(preg_match("/admin/",$_GET['id'])) { echo"no!"; exit(); }
// 그렇지 않으면, id를 URL 디코딩한다.
  $_GET['id'] = urldecode($_GET['id']);
// 만약 id가 "admin"과 정확히 일치한다면 solve(26) 함수를 호출한다.
  if($_GET['id'] == "admin"){
    solve(26);
  }
?>
<br><br>
<a href=?view_source=1>view-source</a>
</body>
</html>

사용자로부터 'id'라는 GET 매개변수를 받아와

id에 'admin'이라는 문자열이 포함되어 있으면

"no"를 출력하고 종료된다.

그렇지 않은 경우에는 'id'를 url 디코딩하고

"admin" 문자열과 비교하여 일치하면

solve(26) 함수를 호출하며

문제가 풀리는 구조이다.

 

즉 "admin"이라는 문자열을 url 인코딩해서 'id' 값으로 집어넣으면

url 디코딩 되며 "admin"과 일치하여 문제가 해결될 것이다. 

 

 

url 인코딩 표를 참조해서

"admin"이라는 문자열을 다음과 같이 인코딩했다.

"%61%64%6d%69%6e"

 

 

url 인코딩한 값을 id에 넣어 전송했지만

"no!"라고 화면에 표시된다.

 

 

"%61%64%6d%69%6e" 이 문자열이

처음부터 "admin"으로 인식되는 것이니

다음과 같이 한 번 더 인코딩을 해서 id 값에 집어넣었다.

"%25%36%31%25%36%34%25%36%64%25%36%39%25%36%65"

문제가 해결되었다.

 

 

 

 

Reference:

https://www.eso.org/~ndelmott/url_encode.html

'Wargame & CTF > Webhacking.kr' 카테고리의 다른 글

[Webhacking.kr] old-10  (0) 2024.04.13
[Webhacking.kr] old-06  (0) 2024.04.10
[Webhacking.kr] old-16  (0) 2023.09.22
[Webhacking.kr] old-15  (0) 2023.09.17
[Webhacking.kr] old-17  (0) 2023.09.17

+ Recent posts