Lord of SQLInjection
los.rubiya.kr
SQL Injection 을 훈련하기 좋은 사이트이다.
간단한 가입 절차를 거친 후 로그인하면 첫번째 문제 gremlin 으로 접근가능하다.
친절하게 소스코드도 제공되어 있다. 주어진 코드를 분석하여 알맞은 SQL Query 문을 작성해주면 문제가 해결된다.
소스를 보면 입력받은 id와 pw 값을 데이터베이스에서 확인한 후 결과값으로 돌려주는데 해당 결과값에 id 값을 if문으로 검증한다.
id 부분만 존재하는 것으로 만들면 해결될 것이다.
쿼리문을 보면 "select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}'"; 인데 입력받는 id 부분을 수정해본다.
id 부분에 '(싱글 쿼터)를 사용하면 id='' 처럼 문자열 부분이 끝나게되고 뒷 부분에 다른 쿼리를 넣어주면 문자열이 아닌 쿼리로서 동작하게 된다.
id 가 참(TRUE)으로 동작하게 해야 하므로 or(||) 조건을 이용한다.
그러면 입력값은 '||1 이 될것이다.
이렇게 처리하면 해결이 가능할까 하면 불가능하다.
위 입력값을 삽입할 경우 쿼리문은 아래와 같은 형태가 된다.
"select id from prob_gremlin where id=''||1' and pw='{$_GET[pw]}'";
and 로 연결되어 들어가는데 이를 해결하기 위해 주석처리를 해준다.
한 줄 주석의 경우 # 또는 -- 를 사용한다.
url 코드라 그런지 %23 으로 입력하면 인식하는데 #으로는 인식을 하지 못한다. %23으로 넣어주자.
그러면 id 부분에 들어갈 값은 '||1%23 이 된다. 해당값을 입력하자.
입력값은 url 부분에 입력하면 된다.
url 마지막 부분에 입력값 id와 pw 값을 넣어주자. id 값만 있으면 되므로 pw 부분은 주석처리하였다.
?id='||1%23 라고 넣어준다.