본문 바로가기
웹 해킹/Webhacking.kr

[Webhacking.kr] old-26

by L3m0n S0ju 2021. 9. 5.

 

 

 

문제 서버에 접속하면 위와 같이 소스코드를 볼 수 있는 링크가 하나 있다. 코드는 아래와 같다.

 

 

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

댓글