1. Blind SQL 인젝션 공격 개요
Blind SQL 인젝션 공격은 임의의 SQL 구문을 삽입해 인가되지 않은 데이터를 열람할 수 있는 공격 기법이라는 것은 다른 SQL 인젝션 공격 기법과는 크게 다르진 않다. 차이점이 있다면 일반 SQL 인젝션 공격은 임의의 SQL 조작된 쿼리를 입력해 한번에 정보를 보여 줄 수 있지만 Blind SQL 인젝션 공격은 쿼리의 결과에 따른 서버의 참과 거짓의 반응을 통해 데이터베이스의 정보를 알아 낼 수 있다. 일반 SQL 인젝션 공격에 비해 시간이 상당히 오래 걸린다는게 단점이지만 시간을 투자하면 언제든지 데이터베이스 정보를 탈취할 수 있기 때문에 위험한 SQL 인젝션 공격 기법 중 하나라고 판단할 수 있다.
(1) Blind SQL 인젝션 공격 실습
[그림 1-1] User ID 입력
Blind SQL Injection 탭을 선택하고 User ID 값에 1을 요청한다. 1을 전송하면 User ID가 존재한다고 표시된다.
[그림 1-2] User ID 입력
이번엔 User ID 값에 6을 요청한다. 6을 전송하면 User ID가 존재하지 않는다고 표시된다. 이러한 응답값을 통해 데이터베이스는 총 5개가 된다는 것을 추측할 수 있다.
[그림 1-3] 정상값 처리
AND 뒤에 1=1#이라는 항상 참이 되는 조건을 추가해 삽입하고 실행한다. 1'이라는 값이 참이기 때문에 뒤에 1=1# 이라는 참이 되는 조건을 추가하면 데이터베이스는 존재한다는 것을 알 수 있다. 만약 SQL 인젝션 쿼리문이 실행되지 않는다면 ID가 1이 아니라 1' AND 1=1#의 전체 문자열을 하나의 ID로 처리하고 비정상적인 값은 실행하지 않아 User ID가 없다는 메시지가 나와야 한다.
[그림 1-4] 비정상값 처리
AND 뒤에 1=2#이라는 거짓이 되는 조건을 추가해 삽입하고 실행한다. User ID는 존재하지 않는다고 출력된다. AND 뒤에 1=2가 거짓이 되기 때문에 앞에 붙은 조건과 관계 없이 거짓이 된다. 즉, AND 이후 조건에 따라 결과가 바뀐다는 거고 입력하는 값이 SQL 쿼리문을 통해 처리되고 있다고 추측할 수 있다.
[그림 1-5] 소스 코드
소스 코드를 보면 빨간색 박스 안에 SQL 쿼리문을 구성하고 있다. User_id='1' AND 1=1과 같이 전제가 참인 조건문이 되서 사용자가 존재한다고 출력된거고 AND 1=2를 입력하면 where 구문이 전부 거짓이 되서 사용자가 없다고 출력한 것이다. 이와 같이 참, 거짓이 구분 되서 출력되는 것은 SQL 쿼리문이 뒤에서 사용되고 있는 것을 추측해 볼 수 있다.
(2) Time based SQL 인젝션 공격 실습
[그림 2-1] sleep 함수
User ID에 1' AND sleep(5)#을 입력한 후 요청한다. 개발자 도구를 활용해 응답시간을 확인하면 약 5초 동안 응답값이 지연 되는 현상을 볼 수 있다.
[그림 2-2] sleep 함수
이번에는 User ID에 6' AND sleep(5)#을 입력한 후 요청한다. 개발자 도구를 활용해 응답시간을 확인하면 응답값이 지연 되지 않고 응답 되는 현상을 볼 수 있다. 앞에 6'이 거짓이기 때문에 응답값이 지연 되지 않고 응답 되는 것이다. 즉, 6이라는 데이터베이스는 존재하지 않는 것이다. 조건이 참일 때만 응답값이 지연되고 거짓일 땐 응답값이 지연되지 않는 참, 거짓을 통해 구분할 수 있게 된다.
'웹해킹 > DVWA' 카테고리의 다른 글
SQL 인젝션 공격 대응 방안 (0) | 2020.01.28 |
---|---|
SQL 인젝션 공격 (3) (0) | 2020.01.28 |
SQL 인젝션 공격 (1) (0) | 2020.01.28 |
브루트 포스 공격 대응 방안 (0) | 2020.01.26 |
브루트 포스 공격 (0) | 2020.01.26 |