더블 인코딩 문제
GET 방식으로 id 파라미터 값을 받아서 urldecoding 한 후의 값이 "admin"이여야 하고, admin 을 그대로 입력할 시 필터링이 된다.
urlencoding 표를 참고해서 admin 을 인코딩 시켰다.
admin 을 디코딩 한 값(아래) 를 URL에 파라미터 값으로 넣어준다.
%61%64%6d%69%6e
코드를 보면 preg_match 함수가 urldecode 앞쪽에 있어 영향을 받을 일이 없어보이는데 위와 같은 결과가 나타났다. 그렇다면 아마도 urldecode가 되기 이전에 자동적으로 디코딩이 되었기 때문에 preg_match가 동작한 것을 보인다.
웹 서버와 브라우저 사이에서 데이터 교환 시 브라우저는 폼에서 입력받은 데이터를 자동으로 인코딩한 값을 PHP서버로 보내고 PHP는 받은 인코딩된 값을 자동으로 디코딩한다.
위와 같은 이유일 것 같다. 이 값을 서버에서 한번 더 디코딩하고 필터링하는 과정을 거치므로 이 값을 한번 더 인코딩(더블 인코딩) 해주어야 우회할 수 있다.
admin을 더블 인코딩하면 다음과 같다. (다음 사이트를 통해)
http://www.convertstring.com/ko/EncodeDecode/UrlEncode
%2561%2564%256d%2569%256e
더블 인코딩한 admin 값을 id 파라미터로 전달한다.
'Wargame > Webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] 28번 (0) | 2021.05.18 |
---|---|
[Webhacking.kr] 27번 (0) | 2021.05.17 |
[Webhacking.kr] 25번 (0) | 2021.05.17 |
[Webhacking.kr] 24번 (0) | 2021.05.17 |
[Webhacking.kr] 23번 (0) | 2021.05.17 |