반응형
<?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>
admin은 url인코딩해도 admin이지만,
url인코딩에서 인코딩 값으로 + / 같은 문자들을 표현할 수 있듯이
a~z, A~Z의 표현값도 존재한다. 그러므로
a d m i n 문자 각각 고유의 인코딩 값도 존재한다.
(참고로 정리하자면, 아스키 코드의 16진수값이 URL encoding값과 같다)
www.ibm.com/support/knowledgecenter/ko/ssw_aix_71/network/conversion_table.html
URL encoding에서 문자들을 어떻게 표현하는지는 아래 사이트에 정리되어 있다.
www.w3schools.com/tags/ref_urlencode.ASP
위의 사이트에서 16진수값과 아래 사이트에서 인코딩된 값이 %만 붙인 것 뺴고는 동일하다는 것을 알 수 있을 것이다.
여기서 a d m i n에 해당하는 인코딩 값들을 나열해보면
%61%64%6d%69%6e 이다.
이걸 그냥 id로 넘기게 되면 php에서 처리하기 전에 다시 서버측에서 디코딩되므로 admin 으로 전달되어 제자리 걸음이 된다.
어차피 소스 내에서 decoding 작업을 한번 더 해주니 %61%64%6d%69%6e 이걸 한번 더 인코딩해서 id값으로 넘겨주면 된다.
따라서 id=%2561%2564%256d%2569%256e를 해주면 됌.
반응형
'[웹해킹] > [Webhacking.kr]' 카테고리의 다른 글
[Webhacking.kr] 28번 (0) | 2020.10.07 |
---|---|
[Webhacking.kr] 27번 (0) | 2020.10.07 |
[Webhacking.kr] 25번 (0) | 2020.10.05 |
[Webhacking.kr] 24번 (0) | 2020.10.05 |
[Webhacking.kr] 23번 (0) | 2020.10.03 |