Security/Web
[Webhacking.kr] Challenge(old)- old26
bonggang
2020. 6. 1. 01:19
문제
https://webhacking.kr/challenge/web-11/
문제 풀이
0. 소스 코드 확인
<?php
if(preg_match("/admin/",$_GET['id'])) { echo"no!"; exit(); }
$_GET['id'] = urldecode($_GET['id']);
if($_GET['id'] == "admin"){
solve(26);
}
?>
id 값으로 admin을 주면 끝나는 간단한 문제다. 하지만 preg_match("/admin/", $_GET['id'])에서 필터링 된다.
바로 아래 문장을 보면 urldecode($_GET['id'])가 있으니 인코딩해서 값을 넘겨주면 된다.
1. 아스키 코드표 기반 urlencoding
admin: %61%64%6d%69%6e
즉, ?id=%61%64%6d%69%6e를 넣어주면 된다.
자신있게 넣은 결과
no!
응...???
id 값을 검증할 때 이미 한 번 디코딩 되어있다는 것. 인코딩을 2번해야한다.
%61%64%6D%69%6E -> URL decode -> admin -> 첫번째 조건문 -> no!
%2561%2564%256D%2569%256E -> URL decode -> %61%64%6D%69%6E -> 첫번째 조건문 -> URL decode -> admin