본문 바로가기

워게임/LOS

[워게임 LOS] 문제 20번, 드래곤(Dragon)


Lord Of SQL injection, 문제 20번 드래곤입니다.


이번 문제는 앞에 주석을 우회해야 풀리는 문제입니다.

현재 쿼리문은 한 줄로 이어져있습니다.

이것을 멀티라인으로 만들어서 보내면 풀릴 것입니다.


멀티라인으로 만들기 위해서는 개행문자가 필요한데

그 예를 들어서 Tab(%09), Line Feed \n(%0a), Carrage Return \r (%0d) 등이 있습니다.

저는 여기서 %0a 를 택했습니다.


pw=1'%0a or id='admin' -- 


하지만 이렇게 보냈을 때 Hello admin이 아닌 Hello guest가 출력되었습니다.

제가 예상한 바로는 아래와 같습니다.


SELECT id FROM prob_dragon WHERE id='guest' # and pw='1' or id='admin'

SELECT id FROM prob_dragon WHERE id='guest' or id='admin'


주석처리된 부분이 지워지고 %0a 뒤의 부분이 앞으로 붙여지면 guest 또는 admin인 id를 출력하는 것이라서


+-------+

| id    |

+-------+

| guest |

| admin |

+-------+


이런식으로 출력될 것이라고 생각이 들었습니다. 

이 상태에서 admin만 출력하려고 하면 limit를 사용해서 두번째 id 값을 출력하면 될것입니다.


LIMIT (인덱스 번호), (행의 갯수)

guest가 인덱스의 0번이고 admin이 인덱스 1번이니까.

인덱스 1번부터 1개의 행만 출력하는 식을 만들면 됩니다.


pw=1'%0a or id='admin' LIMIT 1,1 -- 


위와 같이 보내면 guest는 출력이 되지 않고 admin만 출력되기 때문에 클리어가 됩니다.