본문 바로가기

워게임/LOS

[워게임 LOS] 문제 15번, 어쌔신(Assassin)



Lord Of SQL injection, 문제 15번 어쌔신입니다.


  if(preg_match('/\'/i'$_GET[pw])) exit("No Hack ~_~"); 


필터링에서는 홑따옴표(Single quote)만 검사하고 있는데

pw like 를 보시다시피 정규표현식을 허용하는 LIKE를 사용하고 있습니다.

그리고 id 파라미터는 없고 pw만 있네요.


정규식에서 % 기호는 임의의 문자가 0번이상 반복된다는 것을 의미합니다.

0% 시작해서 일일이 찾아나가면 될것입니다.


자동화 스크립트로 돌리면 더 편하지만

이 문제 SQL테이블에서는 admin과 guest 사용자가 존재합니다.



입력값에 9%를 넣었을 때 반응이 이렇습니다.

9%를 지정하고 Hello admin을 find로 찾으면 모든 경우의 수에서 실패할 것입니다.

그래서 if문을 두가지 둬서 90?가 admin이면 그 비밀번호를 찾도록.. 소스코드를 보시면 더 설명이 쉽겠지요.


답은 Hello admin이 출력되는 문자까지 찾고 뒤에 %만 있어도 클리어입니다.

이유는 앞서 설명했다시피 % 기호가 정규식에서 임의의 한 문자를 만드는 것이기때문에,

뒤의 문자열은 자동으로 맞춰지고 select id에서 admin이 나오게되죠.


prob15 assassin.py