#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

+ Recent posts