ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Webhacking.kr] 18번 풀이
    Wargame/webhacking.kr (old) 2019. 4. 19. 23:11


    SQL Injection 문제이다.

    SQL Injection이 무엇인지 알아보자.


    SQL Injection이란?

    DB로 전달되는 값에 정상적인 값 대신

    SQL 쿼리문을 삽입해 DB 상에서 의도치 않은 결과 값이 나오도록 하는 공격 기법


    index.phps 를 클릭하면 php 소스를 볼 수 있다.



    소스 코드를 보니 몇몇 문자열이 필터링 되어 있고,

    쿼리문에 no로 입력해준 값을 바로 삽입하여 취약점이 발생하게끔 소스가 짜여져 있다.

    해당 쿼리문에 대한 결과 값이 admin이면 문제가 풀린다.


    - eregi("찾고자 하는 문자", "임의의 값") : 대소문자 구분x

    - ereg("찾고자 하는 문자", "임의의 값") : 대소문자 구분o


    eregi 함수를 이용하여 space, /, (, ), tab, |, &, union, select, from, 0x

    대소문자에 관계없이 필터링되어 있다.


    우선, guest의 no 값을 알아보기 위해 0부터 차례대로 숫자를 입력해보았다.



    1을 입력하니 hi guest가 페이지에 출력되었다.

    guest의 no 값은 1이다.


    select id from challenge18_table where id='guest' and no=$_GET[no]의 결과 값이 admin이 되는 방법은

    두 가지를 생각해볼 수 있다.


    1. id='guest' and no='1이 아닌 수' or id='admin'

    2. id='guest' and no ='1이 아닌 수' or no='admin의 no 값'


    [id='guest' and no=숫자]의 조건을 false를 만들어주어야 or의 뒷부분의 조건을

    판별하기 때문에 no의 값에 guest의 no인 1이외의 수를 넣어주어야 한다.

    (연산자 우선순위 and > or)


    or을 사용하기 위해서는 공백이 필터링되어 있기 때문에 우회해야한다.


    space 필터링 우회 방법

    /**/, (), +, %0a, %0b, %0c, %0d, %09, %20 등


    space 필터링 우회를 위해 %0a를 사용하여 아래와 같이 SQL Injection을 시도하였다.


    ?no=0%0aor%0aid='admin'



    문제가 풀려야하는데,,,,,

    문제가 풀리지 않는다.

    php의 magic_quotes_gpc가 켜져 있어 '가 필터링되는 것 같다.ㅜㅜㅜㅜㅜㅜ


    magic_quotes_gpc 옵션이란?

    php.ini에 작성되어 있는 설정 값으로, 모든 GET, POST, COOKIE 데이터에 addslashes() 처리


    addslashes()

    DB쿼리에 처리되는 문자 앞에 \(백슬래쉬)를 붙인 문자열을 반환하는 함수로 ' '' \ NULL에 적용


    문자열을 작은따옴표 없이 전송하는 방법으로는

    이진수, 16진수, char 함수 사용등이 있으나,

    괄호, 0x의 필터링으로 인해 16진수와 char함수는 사용할 수 없다.ㅠㅠㅠ


    따라서, 이진수를 사용해 admin을 입력하자.

    admin : 01100001 01100100 01101101 01101001 01101110

    (이진수는 앞에 0b를 붙인다.)


    ?no=0%0aor%0aid=0b0110000101100100011011010110100101101110



    두 번째 방법도 되는지 확인해보기 위해 admin의 no값을 찾아 차례대로 숫자들을 입력해보았다.

    admin의 no 값으로 한 10까지만 해볼려고 했으나,,

    2를 입력하니 문제가 풀렸다:)


    admin의 no 값은 2이다.



    'Wargame > webhacking.kr (old)' 카테고리의 다른 글

    [Webhacking.kr] 21번 풀이  (0) 2019.04.19
    [Webhacking.kr] 20번 풀이  (0) 2019.04.19
    [Webhacking.kr] 18번 풀이  (0) 2019.04.19
    [Webhacking.kr] 17번 풀이  (0) 2019.04.19
    [Webhacking.kr] 16번 풀이  (0) 2019.04.19
    [Webhacking.kr] 15번 풀이  (0) 2019.04.19

    댓글 0

@Jo Grini's Blog