Jaeseo's Information Security Story

Blind Sql Injection 공격 본문

Security Study/Web hacking

Blind Sql Injection 공격

Jaeseokim 2019. 10. 15. 10:44

평범한 SQL Injection과 달리 Blind SQL Injection은 한번에 바로 결과가 나오는 것이 아닌 서버의 True 일때의 반응과 False의 반응이 비교가 된다면 이것을 가지고 DB의 정보를 알아내는 기술이다.
문자를 하나씩 비교를 해서 True인지 False인지 비교를 해야 해서 보통 자동화된 툴을 이용해 Blind SQL Injection 공격을 시도한다.

기본 원리

  • 점검문자열을 통해 알아낸다.
    1) 'and 1=1 -- (참)
    2) 'and 1=2 -- (거짓)
    3) 'and 'a' = substring('admin',1,1) -- (참)
    4) 'and 'd' = substring('admin',2,1) -- (참)

  • 사용자 테이블 이름 질의
    1) information_schema.tables의 table_name 컬럼의 사용자 테이블 이름 조회하기
    => select table_name from information_schema.tables
    2) information_schema.tables의 table_name 컬럼의 사용자 테이블 이름을 오름차순으로 정렬시킨 후 첫번째 테이블명만 조회
    => select top 1 table_name from information_schema.tables order by table_name asc
    3) 사용자 테이블 명을 오름차순으로 정렬시킨 후 첫번째 테이블의 첫글자가 'a'로 시작하는지 확인해보기
    'and 'a' = substring((select top 1 table_name from information_schema.tables order by table_name asc),1,1) --
    => 만약 True의 반응이 나온다면 첫번째 테이블의 첫글자: a

이러한 반응을 통해 알아낼수 있다. 이제 실제로 실습을 해본다.

취약한 사이트 서버 이미지를 이용하여 VM으로 사설망에서 테스트를 진행 하였다.
일단 사이트에서 SQL 질의를 해보는 모든 입력창에 점검문자열을 입력해서 테스트를 해본다.


일단 ' and 1=1 -- 을 통해 True일때의 반응을 살펴본다.


그결과 모든 페이지가 출력 하는 것을 볼수가 있다.
이제 '' and 1=2 -- 을 통해 Flase일때의 반응을 살펴본다.


그 결과 True와 Flase의 반응이 확실히 비교가 되면서 blind injection에 취약하다는 것을 예상 할수가 있다.
이제 실제로 취약한지 직접 공격을 통해 알아본다.
이번에는 n3015m Blind Sql Injection tool for Developer을 통해 진행 해보도록 한다.


이번에는 게시판의 글에 들어간 후 URI에 있는 곳에 공격을 해보고 취약한지 파악을 해본다.


v_num=352 라는 게시판 번호로 보이는 변수가 있는데 여기에 쿼리문을 점검 문자열을 넣어 테스트 해본다.

/shop_board_list.asp?page=1&v_num=352 and 1=1 --

그 결과 정상적으로 나오는 데 이때 False에 해당하는 점검 문자열을 넣어 테스트 해본다.

/shop_board_list.asp?page=1&v_num=352 and 1=2 --

오류가 나는 것을 보고 실제로 질의가 되는 것을 확인 하였다. 이제 이것을 가지고 공격을 해본다.


TOOL을 통해 공격이 가능 하다는 것을 확인 하였다 이제 테이블 명을 알아 내 본다.


공격을 통해 실제로 반응을 통해 DB명을 알아내는 것을 볼 수가 있다.

만약 회사에 취업을 해서 취약점 진단 또는 모의해킹을 하게 된다면 아래의 사항을 꼭 지켜야 한다.

  • SQL 자동화 도구 사용 시 주의사항
    반드시 고객사 협의를 통한 허가받은 후 사용
    고객사 허가 후 담당자에게 데이터베이스와 관련된 모든 설정 정보 백업 이후 사용
Comments