-
[LOS] 14. giant 문제 풀이Wargame/LOS (Lord of SQL Injection) 2019. 7. 19. 01:54
shit이라는 인자를 GET 방식으로 입력받는데, 길이가 1보다 크면 No Hack 문구가 출력된다. 게다가 공백과 공백을 우회할 때 자주 사용되는 문자들까지 필터링된다.
일단 shit 인자에 한 자리 숫자를 인자로 주고 쿼리문을 확인해보자.
쿼리문을 보니 from과 prob_giant 테이블 사이에 공백이 없어서 쿼리문이 정상적으로 동작하지 않는 것을 알 수 있다.
따라서 이 문제는 공백, \n, \t, \r 문자를 우회하여 공백을 넣으면 쿼리문이 정상적으로 동작하여 1234가 select될 것이다.
공백을 우회할 수 있는 방법은 여러 가지가 있다.
1. Line Feed (\n)
- 커서(캐럿)를 다음 줄(현재 위치에서 바로 아래줄)로 이동시키는 개행 문자
- URL Encoding: %0a
- 예시) no=1%0aor%0aid='admin'
2. Tab (\t)
- 커서를 한 tab만큼 이동시키는 문자
- URL Encoding: %09
- 예시) no=1%09or%09id='admin'
3. Carrage Return (\r)
- 커서(캐럿)를 줄의 맨 앞(왼쪽)으로 이동시키는 개행 문자
- URL Encoding: %0d
- 예시) no=1%0dor%0did='admin'
4. 주석 (/**/)
- 예시) no=1/**/or/**/id='admin'
5. 괄호 ()
- 예시) no=(1)or(id='admin')
6. 더하기 (+)
- 예시) no=1+or+id='admin'
7. %0b, %0c, %a0
- 1~6까지의 모든 우회 방법이 먹히지 않을 경우 공백 대신 사용
- %a0은 잘 안먹히는 것 같으니 %0b나 %0c를 위주로 사용하자.
공백을 우회하는 7가지 방법 중 \r, \n, \t는 필터링에 걸리기 때문에 사용할 수 없고, 괄호와 주석은 길이가 1이라는 제약에 걸리기 때문에 사용할 수 없다. 따라서 이 문제에서는 7번 방법을 사용한다. (더하기는 왜 안먹히는지 잘 모르겠다. 내 궁예로는 공백 문자의 인코딩 값이 +인 경우가 있기 때문인 것 같다.)
shit=%0b 또는 shit=%0c
[참고 문헌]
https://chaneyoon.tistory.com/111
https://binaryu.tistory.com/31
'Wargame > LOS (Lord of SQL Injection)' 카테고리의 다른 글
[LOS] 16. succubus 문제 풀이 (0) 2019.07.22 [LOS] 15. assassin 문제 풀이 (0) 2019.07.19 [LOS] 13. bugbear 문제 풀이 (0) 2019.07.19 [LOS] 12. darkknight 문제 풀이 (0) 2019.07.18 [LOS] 11. golem 문제 풀이 (0) 2019.07.18