LOS gremlin Lord of SQL injection 1번

2021. 3. 13. 14:16LOS(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 인젝션의 기초적인 기초 문제라고 할 수 있다. 

 

다들 나름의 방법으로 재미있게 풀기를 바란다 ^-^