2021. 3. 13. 14:16ㆍLOS(Lord Of SQL injection)
이번엔 LOS 1번 문제 gremlin 풀이를 시작해보도록 하겠다.
앞으로 풀 문제는 다음과 같은 형식일 것이다.
>>>select id from prob_XXX where id =" and pw="<<<
그리고 id 와 pw를 실제로 맞추거나 우회하는 방법으로 문제를 하나 둘 씩 클리어 할것이다.
$query = "select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}'";
이 부분을 보면 id 와 pw 둘다 참이어야 한다고 함
if($result['id']) solve("gremlin");
하지만 아이디만 찾으면 gremlin이 해결된다고 한다.
따라서 id pw 둘다 참이 되게 하는 쿼리문을 만들어 볼 것이다.
일단 무작위로 id 와 pw를 넣어보았다.
id 에는 a 를 pw 에는 1을 넣으니
select id from prob_gremlin where id='a' and pw='1' 로 변했다.
여기서 id 값은 어떠한 값이여도 상관 없으니 pw 를 무조건 참인 값으로 우회해 볼것이다.
이렇게 우회를 시도해 보았다.
id 값에는 아무런 값을 넣고 pw 값에 or 를 사용하여 pw = 1 이거나 1=1이다. 라면 무조건 참이되는 구문이 된다.
처음 sql 인젝션을 했을때 ' 를 어디에 넣어줘야 하는지 잘 이해가 가지 않았는데 문장이 매끄럽게 이어지도록 한다고 생각하면 이해하기 쉬울것 같다.
일단 gremlin 을 clear 했다. 여기서 중요한 점은 주소창을 보면
첫번째에 입력할때는 ?id=a&pw=1' or '1=1 이었지만 주소로 이동하고 나니
두번째에 입력할때는 ?id=a&pw=1%27%20or%20%271=1 이런식으로 바뀐다.
여기서 알 수 있는 부분은
%27 = ' , %20 = 띄어쓰기 이다.
이런것들은 나중에 문제를 풀게되면 ' 나 띄어쓰기에 필터링을 건다면 우회할 수 있는 방법으로 알고있다.
그리고 내가 사용한 ?id=a&pw=1' or '1=1 외에도 문제를 풀 수 있는 방법들은 많다.
예를 든다면
주석 # = %23 을 이용한 pw 생략
본문에 id 만 입력해도 solve 가 된다 해서 id 외 뒤의 구문 생략
등등 한가지 문제를 푸는데도 다양한 방법들이 있다.
이것이 sql 인젝션의 기초적인 기초 문제라고 할 수 있다.
다들 나름의 방법으로 재미있게 풀기를 바란다 ^-^
'LOS(Lord Of SQL injection)' 카테고리의 다른 글
LOS darkelf Lord of SQL injection 6번 (0) | 2021.03.13 |
---|---|
LOS wolfman Lord of SQL injection 5번 (0) | 2021.03.13 |
LOS orc Lord of SQL injection 4번 (0) | 2021.03.13 |
LOS goblin Lord of SQL injection 3번 (0) | 2021.03.13 |
LOS cobolt Lord of SQL injection 2번 (0) | 2021.03.13 |