문제 서버에 접속하면 위와 같이 소스코드를 볼 수 있는 링크가 하나 있다. 코드는 아래와 같다.
<?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
if(preg_match("/admin/",$_GET['id'])) { echo"no!"; exit(); } // /admin/과 같이 // 안에 들어간 문자열이 있으면 true를 반환한다.
$_GET['id'] = urldecode($_GET['id']); // id를 디코드한다.
if($_GET['id'] == "admin"){
solve(26);
}
?>
<br><br>
<a href=?view_source=1>view-source</a>
</body>
</html>
문제의 핵심은 디코딩을 한다는 것이다. 브라우저에서 get 방식으로 변수 데이터 값을 입력받으면 자체적으로 url인코딩을 합니다. 그리고 php는 전달받은 데이터를 자동으로 디코딩하기 때문에 admin을 두번 인코딩하여 입력값으로 넣어주면 /admin/ 필터링 함수에서 디코딩이 한번 남은 상태이므로 admin 문자열 필터를 우회할 수 있다.
admin => %61%64%6d%69%6e
%61%64%6d%69%6e => %2561%2564%256d%2569%256e
'웹 해킹 > Webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] old-54 (0) | 2021.09.06 |
---|---|
[Webhacking.kr] old-38 (0) | 2021.09.05 |
[Webhacking.kr] old-24 (0) | 2021.09.05 |
[Webhacking.kr] old-17 (0) | 2021.09.05 |
[Webhacking.kr] old-14 (0) | 2021.09.05 |
댓글