반응형
<?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(); }
$_GET['id'] = urldecode($_GET['id']);
if($_GET['id'] == "admin"){
solve(26);
}
?>
<br><br>
<a href=?view_source=1>view-source</a>
</body>
</html>
if(preg_match("/admin/",$_GET['id'])) { echo"no!"; exit(); }
$_GET['id'] = urldecode($_GET['id']);
if($_GET['id'] == "admin"
{
solve(26);
}
위의 코드에서 preg_match() 함수는 해당 문자열에서 전달받은 정규 표현식과 일치하는 패턴을 검색한다.
문법은 아래와 같다.
preg_match($pattern, $subject [,$matches]);
첫 번째 인수로 전달받은 정규 표현식에 해당하는 패턴을
두 번째 인수로 전달받은 문자열에서 검색하는데 이렇게 검색된 결과는 배열로 반환되며,
세 번째 인수로 반환값이 저장될 배열을 직접 전달할 수도 있다.
즉 위의 코드는 GET 방식으로 id 파라미터의 값이 "/admin/" 이면, "no!"를 출력하고 종료하는데
id 파라미터의 값이 "/admin/"이 아니었을 때 id에 담긴 값을 url 디코딩하여 디코딩 한 값이 "admin"이면 풀린다.
풀이
url 인코딩이 된 값을 넣으면 되는데, 이 문제에서는 소스에서 urldecode() 함수를 통해 url 디코딩을 한다.
원래 넘어가는 데이터에 url 디코딩을 한번 거치는데 urldecode() 함수를 통해 한 번 더 거치므로 두 번 url 인코딩 한 값을 적으면 된다.
url 인코딩은 ASCII 코드 표를 참고하여 값 앞에 %를 붙여주면 된다.
그리고 다시 한 번 더 인코딩을 하면 %는 ASCII 코드표에서 보면 16진수 값이 25이므로 %2561(a)으로 값을 넣으면 된다.
a = %61 = %2561
d = %64 = %2564
m = %6d = %256d
i = %69 = %2569
n = %6e = %256e
?id=%2561%2564%256d%2569%256e
반응형
'전쟁 > Webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] old-16 (0) | 2022.07.13 |
---|---|
[Webhacking.kr] old-15 (0) | 2022.07.13 |
[webhacking.kr] old-4 (0) | 2022.07.11 |
[webhacking.kr] old-19 (0) | 2022.05.06 |
[webhacking.kr] old-6 (0) | 2022.05.06 |