- 문제경로
- 문제풀이
[문제경로]
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:
'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 |