본문 바로가기
WEB_Security

19. Blind Injection

by Jnamelight 2017. 6. 8.

Blind Injection


SQL 취약점중 가장 많이 쓰이는 취약점 분석중 하나이다. 이분석 방법은 쿼리가 실행되고 있는 것이 확인이 된다면 사용되는 방식인대

보통 참과 거짓을 이용하는 방식으로 한글자씩 쿼리안의 내용을 알아내는 방법이다.


즉 이 방식에서 사용하는 몇가지 쿼리문을 설명하자면 ( 취약점 )


substr() : 쿼리문의 row 를 한글자씩 가져오는 함수이다. 

limit : row 가 많은 갯수를 가지고 있다면 , 줄수를 하나로 가져올수 있게 해준다 ( limit 1,3  ->  2줄 부터 3줄 가져옴 ( 0 베이스 )

ascii() : 아스키 코드로 반환 해주는 함수



이 세가지 함수를 주로 이용해서 Blind Injection 을 진행한다. 

예제를 통해서 알아보자.




일단 이전에 만들어 놓았던 테이블을 이용해서 취약점을 분석해보자.

위와같이 if 문에서 쿼리가 실행되면 INFO 를 찍어주는 형식으로 바꾸어준다.



위와같이 참인 값이 넘겨지면 INFO 가 나오지만.



no=4 는 거짓임으로 INFO 가 나오질 않는다 ( no는 3까지만 있음 )



또다른 방법으로는 and 1=1 로 참을 넘겨주어도 INFO 는 나온다.



거짓이면 나오지 않는다 1=2 는 항상 거짓.



자그럼 우리가 해볼 것은 cuser 에 있는 'Oh'의 pass 를 알아보도록 해보자.

현재 쿼리문은 auser로 되어있지만. 

취약점을 통해서 cuser의 내용도 가져올 수 있다.



자그럼 여기서 substr과 ascii 함수를 이용해서 알아보도록 하자

and ascii(substr( (select pass from cuser where name='Oh'), 1,1)) = 비교

이런식으로 get형식을 넘겨주어 내가 원하는 쿼리를 실행하는 것이다.

즉 이방법을 이용하여 만약 아스키 코드의 값의 숫자와 일치하면 INFO 를 보여줄것이다.

위의 값은 pass 의 첫글자가 2 임으로 아스키값으로 50 을 넣어주니 참인 결과를 보여주었다.



반대로 49 즉 50 아닌 값을 넣으면 나오지 않는다.


이런 방식을 이용하면 어떤 데이터든 찾아볼수가있다.

물론 DB의 테이블도 볼 수 있다.

예를 들면 from DB.table  이런식으로 중간에 . 을 이용해서 다른 디비의 테이블도 검색가능

 



'WEB_Security' 카테고리의 다른 글

18. SQL Injection 취약점  (0) 2017.06.05
17. 파일 다운로드 취약점 ( PHP )  (0) 2017.06.02
16. 파일 업로드 취약점 ( 원격 쉘 )  (0) 2017.05.31
15. PHP 파일 업로드 취약점  (0) 2017.05.31
14. CSRF  (0) 2017.05.30

댓글