26번을 풀어보도록 하죠.
뭐 없습니다.
코드도 간단합니다.
<?php
if(preg_match("/admin/",$_GET['id'])) { echo"no!"; exit(); }
$_GET['id'] = urldecode($_GET['id']);
if($_GET['id'] == "admin"){
solve(26);
}
?>
id 값에서 admin이 존재한다면 no! 를 출력하고 php를 끝낸다고 합니다.
근데 admin이 id에 들어가야 문제가 풀리네요.
그래서 먼저 admin을 16진수로 변환해서 입력해봤습니다.
%61%64%6d%69%6e
https://webhacking.kr/challenge/web-11/?d=%61%64%6d%69%6e
이렇게 말이죠.
슬프게도 admin이 그대로 입력된것처럼 인식하네요.
이제 코드를 자세히 한번 봅시다.
urldecode를 한번 해주네요? 이 부분이 취약점인것 같습니다.
admin을 urlencode 해줘보겠습니다.
...
해봤는데 그냥 admin이 나오네요.
이번에는 16진수로 변환한 것을 urlencode 해보겠습니다.
...
%2561%2564%256d%2569%256e
이렇게 바뀝니다.
이제 이걸 넣으면 풀릴것 같습니다.
해결했습니다 ㅎ
이번 문제에서 알아낸 것은 기본적으로 %형식으로 된 문자는 url에서 한 번 디코딩해서 인식한다는 것입니다. 그렇기 때문에 한번 인코딩 한 값으로는 문제를 해결할 수 없었습니다.
'Hacking-기초 > [WEB] Webhacking.kr' 카테고리의 다른 글
Webhacking.kr 18번[100] (0) | 2020.04.29 |
---|---|
Webhacking.kr 6번 [100] (0) | 2020.04.29 |
Webhacking.kr 24번 [100] (0) | 2020.04.28 |
Webhacking.kr 17번 [100] (0) | 2020.04.28 |
Webhacking.kr 16번 [100] (0) | 2020.04.28 |