ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [LOS] 14. giant 문제 풀이
    Wargame/LOS (Lord of SQL Injection) 2019. 7. 19. 01:54

    giant

     

    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

     

    GIANT Clear!

     

    [참고 문헌]

    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
Designed by Tistory.