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이 나오게되죠.
'워게임 > LOS' 카테고리의 다른 글
[워게임 LOS] 문제 17번, 서큐버스(succubus) (0) | 2016.07.27 |
---|---|
[워게임 LOS] 문제 16번, 좀비 어쌔신(Zombie Assassin) (0) | 2016.07.27 |
[워게임 LOS] 문제 14번, 자이언트(Giant) (0) | 2016.07.27 |
[워게임 LOS] 문제 13번, 버그베어(Bugbear) (0) | 2016.07.27 |
[워게임 LOS] 문제 12번, 다크나이트(Dark knight) (0) | 2016.07.26 |