WarGame/Lord of SQL Injection

[LOSI] Lord of SQL Injection Level 41 - Nessie

4시이다. 글을 쓰고 있는 지금은 오후 11시이다...... 잡소리 그만하고 NESSIE의 코드를 만나보자

< 출처 : 위키백과 https://en.wikipedia.org/wiki/Loch_Ness_Monster >


코드

DB가 바뀌었다. 지난 시간까지는 sqlite였는데, mssql이 되었다. query는 2개가 시행이 되는데, 첫 번째 쿼리만 exploit 대상이 되는 거 같고, 두 번째 query는 정확한 pw를 전달해서 문제를 해결하는 문고리 문제인 거 같다.

master, sys, information, prob, wiatfor 등이 막힌것을 보니, 메타데이터의 접근과 time based sql injection을 방지하려고 한 거 같다.

 


해결방법

Answer Url : los.rubiya.kr/chall/XXXX.php?pw=uawe0f9ji34fjkl

코드를 잘 보면 exit(mssql_error(sqlsrv_errors()))이 있다. 즉 에러가 그대로 표출된다. 다음의 코드를 한번 쳐보자

try : ?pw=%27order%20by

오호....

try : ?pw=%27=

대박... 이거 아예 에러를 강제 유발할 수도 있겠다. 프로그래밍에도 자료형이 있듯이, 데이터베이스에도 자료형이 있다. 그중 문자열을 저장하는 VARCHAR나 VARCHAR2들이 문자열을 저장하게 되는데, 강제로 다른 형태의 자료를 넣으면 에러가 발생한다. 

 

따라서 문자열인 pw에 1을 입력하면 변환 오류가 나오며 유의미한 오류가 나올 수도 있다.

try : ?id=admin&pw=1%27%20or%20id=%27admin%27%20and%20pw=1--%20

어?


어허.... 쉽게 해결할 수 있었다. 다음 문제에서 기다리겠다.