워게임/LOS
[워게임 LOS] 문제 16번, 좀비 어쌔신(Zombie Assassin)
Gr4d
2016. 7. 27. 11:42
Lord Of SQL injection, 문제 16번 좀비 어쌔신입니다.
if(@ereg("'",$_GET[id])) exit("HeHe");
if(@ereg("'",$_GET[pw])) exit("HeHe");
preg_match가 아닌 ereg로 single quote를 체크하고 있습니다.
그리고 쿼리문에서는 id와 pw를 single quote로 감싸고 있구요.
이 상황에서는 double quote를 쓰면 바깥에 있는 single quote 때문에 먹히지 않는데요.
그러면 결국 single quote를 사용해야하는 상황입니다.
ereg와 관련된 문제는 8번 트롤문제에서도 나왔지만 이번과는 다른 모습이네요.
ereg의 취약점은 찾아보시면 알겠지만 %00 (NULL)이 앞에 붙으면 정상적으로 체크를 하지 못합니다.
%00%27 이렇게 되면 필터링하지 않고 정상적인 문자로 넘어간다는 것이죠. preg_match에서는 통하지 않습니다.
제가 푼 답은 아래와 같습니다. (드래그 하세요.)
?id=1&pw=1%00%27%20or%20id%20LIKE%20%27admin
%00 말고도 %20 같은 공백문자에 %27이 붙으면 역시 검사를 못합니다.