※ LOS = Lord Of SQL Injection
Ⅰ. 문제
(문제를 클릭하면 위와 같은 화면을 볼 수 있는데, 아래 코드들은 해당 페이지의 php코드이다.)
Ⅱ. 코드 분석
4 : db연결
5,6 : GET 메소드를 통해 id, pw를 전달 받음
7 : db에 질의
8 : 쿼리문 화면에 출력
9 : db에 질의하여 나온 결과물들 중 가장 위에 있는 튜플 선택
10 : 선택된 튜플에 id가 존재하면 문제 풀이 성공
Ⅲ. 취약점 분석
- GET 방식을 통해 파라미터를 넘기고 있음
- id, pw를 하나의 쿼리문을 사용하여 질의하고 있음
Ⅳ. 풀이방법
- URL을 변경하여 파라미터를 넘겨주되, result에 속하는 튜플이 있을 수 있도록 SQL Injection 공격을 실시한다.
<payload>
https://los.rubiya.kr/chall/gremlin_280c5552de8b681110e9287421b834fd.php?id=123' or 1=1 --+
id에 어떤 값을 입력하든 상관없이 작음 따옴표를 사용하여 id 입력란을 마쳐주고, or 1=1 을 넣어 질의문이 항상
참이도록 한다. 그리고 뒤에 --+를 넣어줌으로서 뒤에 있는 쿼리문 뒤의 문자열들을 무시한다.