[LoS] WriteUp 01: Gremlin

marceline·2024년 1월 28일
0

[LoS]

목록 보기
2/5

해당 시리즈에서는 Lord of SQLInjection 사이트의 문제들의 풀이를 다루고자한다.
먼저, 01:gremlin 이다.

Analyze

문제에 접속하면 PHP 문이 보인다.

입력값을 Get 방식으로 받는데, 이는 parameter (url) 에 입력값이 그대로 노출되게 되는 방식이다.

id, pw 의 입력값에 대한 특수문자 필터링도 위와 같이 걸려있다.

_ . ( ) 

위 네가지 특수문자는 Get 메서드를 이용해서 파라미터로 넘어오게 될때, 'No Hack ~_~' 문구를 띄우며 PHP 가 종료된다. 따라서 공격에 있어서 위 네가지 특수문자는 사용할 수 없다는 것 을 알 수 있다.


이 부분을 보면, id 와 pw 를 입력받아 prob_gremlin 테이블에 해당 정보가 있는지 조회하는 것임을 알 수 있다.

조회이후 id 데이터를 불러온다면 문제가 풀린다는 것을 알 수 있다.

ID, PW 를 모르는 상태로 로그인을 성공시키는 것이 이 문제의 의도 일것이다

Try

일단 무작정
id=admin'--
encoding> id%3Dadmin%27--%20
를 입력해본다. 결과는 다음과 같다.

id=admin' or 1<2
도 입력해본다.

Payload

여러 시도 끝에 id 를 모르는 상태이기에 임의의 문자를 입력하고, 문자열의 범위에서 벗어나 쿼리를 조작하기 위해서 싱글 쿼터(‘) 를 입력하여 문자열을 종료시킨 후, or 구문을 이용하여 id, pw 값을 모두 참으로 만들 수 있다는 사실을 알 수 있었다.

공격구문은 다음과 같다.
id=asdf' or 1<2-- & pw=123

': 싱글쿼터로 id 문자열의 범위를 종료시킨다.
or: 뒤의 '1<2-- ' 라는 무조건 참인 문장을 넣어 로그인에 성공할 수 있다.

아래 방법도 시도 가능하다.

id='or '1'='1&pw='or '1'='1

마찬가지로 or 구문을 사용하여 id, pw 모두 참으로 만드는 것 이다.

Reference

LOS 1번: Gremlin 문제풀이

0개의 댓글