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 |
댓글