반응형

 

<?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

+ Recent posts