반응형
https://webhacking.kr/challenge/web-11/
Challenge 26
webhacking.kr
[문제]
소스코드를 보여주는 하이퍼링크가 있다.
[풀이]
<?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>
소스 코드를 보면 preg_match로 url에 admin이 있다면 필터링해서 no!가 나오게 되어있다.
urldecode로 디코딩해준 값을 id에 저장한다.
id값이 admin이면 문제가 풀린다.
위 표를 보면 urlencode 할 수 있다. 대부분 url인코딩 사이트는 영문은 인코딩을 하지 않는 모양이다.
하나하나 직접 인코딩하면 %61%64%6d%69%6e 가 나온다.
id값에 입력한다.
id값에 인코딩값을 넣었는데 no!가 뜬다. url주소를 확인해보자.
id가 인코딩한 값이 아닌 admin으로 바뀌어있다. 아마 자동으로 한 번 url디코딩을 크롬에서 시키는 것 같다.(?)
url 인코딩을 한 번 더 해준다.
%를 인코딩하면 %25가 나온다. 나머지는 표에서 확인해서 인코딩 시켜준다.
%25%36%31%25%36%34%25%36%64%25%36%39%25%36%65 값을 id에 넣어준다.
(# 숫자는 url인코딩 하지 않아도 되기에 '%2561%2564%256d%2569%256e' 값을 id에 넣어도 문제가 풀림.)
문제가 풀린다.
반응형