이제 문제 생김새에 입대기도 지친다.
<html> <head> <title>Challenge 26</title> <style type="text/css"> body { background:black; color:white; font-size:10pt; } a { color:lightgreen; } </style> </head> <body> <? if(eregi("admin",$_GET[id])) { echo("<p>no!"); exit(); } $_GET[id]=urldecode($_GET[id]); if($_GET[id]=="admin") { @solve(26,100); } ?> <br><br> <a href=index.phps>index.phps</a> </body> </html>
정규식 필터링인데, get ID중에 admin을 필터링하고 있다. 근데 solve하려면 admin을 넣어야된다고 한다.
사실 이건 문제같지도 않은게, eregi 밑에 urldecode를 하고 있다. 뭐하라는건진 잘 모르겠는데 urlencode해주면된다.
근데 바로 안된다. 좀 고민을 하다가 두번 인코드하면 어떨까 해서 했더니 된다.
사실 double encode는 알고 있었는데 바로바로 생각이 안나는거보니 멀었다...
이 기법은 유명한 기법인데, OWASP의 XSS Filter Evasion 문서를 참고 하면 도움이 될 것 같다.