#About
[그림 1] - 문제 화면
#Solution
위 문제는 싱글쿼터만이 필터링되며 싱글쿼터가 필터링되므로 like 이하 절을 거짓으로 만든 후 새로운 쿼리를 덧붙일 수 없다
따라서, 싱글쿼터를 입력 후 새로운 쿼리를 덧붙이던 기존의 문제풀이와 다른 방법으로 문제를 해결해야만 한다
다른방법으로는 $query 변수의 pw 필드 이후에 오는 문자열 비교 구문이 =이 아닌 like 임을 미루어 문제를 해결할 수 있다
like 함수는 %와 _를 사용하여 임의 문자를 지정할 수 있으며 자세한 설명은 아래의 msdn에서 확인할 수 있다
https://technet.microsoft.com/ko-kr/library/ms187489(v=sql.105).aspx
[그림 2] - 쿼리 1
임의의 문자를 의미하는 _을 이용해 pw가 8글자임을 추출해 낼 수 있었고, 여러 쿼리를 날려본 결과 Hello Admin이 아닌
Hello Guest만 출력되는 이유는 admin과 guest의 pw의 길이가 같고 id 필드의 guest가 담긴 레코드가 admin 보다 상위에 위치하기 때문이다
[그림 3] - 쿼리 2
[그림 4] - 쿼리 3
[그림 5] - 쿼리 4
위 [그림 4]와 같이 쿼리를 날렸을 때, 문제가 해결 되는 것을 미루어, 83______까지는 admin과 guest가
공통적으로 가지고 있는 pw 값이며 832____ 부터는 admin이 가지는 고유 pw 값임을 알 수 있다
[그림 6] - 쿼리 5
[그림 7] - 쿼리 6
[그림 8] - 쿼리 7
[그림 9] - 쿼리 8
[그림 10] - 문제 해결
'Wargame' 카테고리의 다른 글
[Lord of SQL Injection] Succubus (0) | 2017.11.02 |
---|---|
[Lord of SQL Injection] Zombie Assassin (0) | 2017.11.02 |
[Lord of SQL Injection] Giant (0) | 2017.11.01 |
[Lord of SQL Injection] Bugbear (0) | 2017.11.01 |
[Lord of SQL Injection] Darkknight (0) | 2017.10.30 |