Blind SQL(Structured Query Language) 인젝션은 데이터베이스에 참 또는 거짓 질문을 하고 애플리케이션 응답을 기반으로 답을 결정하는 SQL Injection의 한 유형임.
- 데이터베이스가 웹 페이지에 데이터를 출력하지 않을 때 공격자는 데이터베이스에 일련의 참 또는 거짓 질문을 하여
데이터를 훔쳐야 함.
- 기본적인 폼 구성. 일반 SQL Injection 폼과 똑같음.
- 내부적인 동작을 보기 위해 정상적인 값을 입력.
- userid에 대한 값에 대한 존재 여부만을 출력해주고 있음.
- 6과 7을 입력했을 때는 userid가 6, 7인 값이 없다라고 출력해주고 있음.
- 평소같으면 오류가 출력되어야 하는데, 값이 존재하지 않는다고 친히 말해주고 있음.
(내부적으로 정상적인 값을 제외한 모든값은 값이 없다고 출력해주는 매커니즘이라는 것을 의심할 수 있음.)
- 즉, 웹페이지에 userid 에한 데이터가 출력되지 않고, userid에 대한 값 존재여부만을 출력해주는 것을 확신할 수 있음.
이 뜻은, 정상적인 SQL Injection으로는 데이터를 탈취가 불가능하고 Blind SQL Injeciton을 수행해야한다라고 받아드
릴 수 있음.
- injection이 가능한가 테스트하기 위해 ' 를 입력.
- 비정상적인 값이 때문에 MISSING from the database가 떠야하지만, 오류가 출력됨. (이유는 모르겠음 ㄹㅇ ㅋㅋ)
- 하지만 Blind SQL Injection은 Where절의 True와 False만을 따지기 때문에 상관이 없음
AND 연산자를 이용한 Blind SQL Injection (Boolen Based)
- DVWA의 SQL Injection (Blind)는 내부적으로 정상적인 값을 제외한 모든 값은 MISSING from the database를 출력해
주는 것을 확인했음.
- Blind SQL Injection은 WHERE 절의 TRUE와 FALSE만 따지기 때문에 AND 연산자를 이용해 공격할 수 있음.
' and 1=1 # 삽입
1' and 1=1 #
- 사전에 UserID가 1~5인 값은 존재한다고 알아내었음.
- 1~5이 아닌 값을 넣으면 MISSING from the database가 출력되어야하는것이 맞는 것임.
- 만약 1' and 1=1 # 삽입 결과값이 Exists라면 1' and 1=1 # 가 하나의 SQL 쿼리문으로 인식을 한다고 의심할 수 있고,
결과값이 MISSING이면, 1' and 1=1 #가 하나의 String으로 인식되어 비정상적인 값으로 판단하는 것으로 볼수있음,
사용자의 ID가 Exists 하다 출력되었음. 즉, AND 이하 구문이 SQL 쿼리문 내에서 처리된 것임. 이 사실만으로도
Blind SQL Injection을 의심할 수 있지만, 한가지 테스트를 더 해봐야함.
' and 1=2 # 삽입
1' and 1=2 #
1' and 1=2 # 를 삽입했을 때는 사용자의 ID가 MISSING이라고 나옴. 그 이유는 AND 뒤의 1=2가 거짓이되기 때문임.
이 의미는 AND이 후의 조건에 따라 결과가 바뀐다는 것이고, 다시 말하면 입력하는 값이 SQL 쿼리문을 통해 처리되고
있다는 뜻임.
내장함수 Sleep()을 이용한 Time Based SQL INJECTION (Blind)
위의 Boolen Based SQL Injection처럼 참/거짓에 따라 응답 메시지가 달리지는 경우도 있지만, 어떤 경우는 웹사이트에
출력되는 메시지조차 같은 경우도 있음. 이와 같은 경우에는 웹 요청이 요청되는 시간의 차이를 이용하여 참과 거짓을 구별해낼 수 있음,
1' and sleep(3) #
- 사용자의 ID가 1인 사람이 존재하기 때문에, Sleep(3)함수가 실행된 것을 확인할 수 있음.
- 요청에 대한 응답이 3.03초 후에 온것을 확인 가능.
6' and sleep(3) #
- 사용자의 ID가 6인 사람이 존재하지 않기 때문에, Sleep(3)함수가 실행되지 않음을 확인할 수 있음.
- 요청에 대한 응답이 34 마이크로세컨(ms)만에 옴을 확인 가능.
Blind SQL Injection은 일반적인 SQL Injection처럼 테이블의 결과를 모두 빼내는 등 직접적으로 데이터를 알아낼수는 없어도, 어떤 명제를 제시하고 그 명제에 대한 참/거짓을 리턴해주는 과정을 반복하여 원하는 정보를 알아낼 수 있다.
'WebHacking > DVWA' 카테고리의 다른 글
[DVWA] Command Injection (0) | 2022.01.12 |
---|---|
[DVWA] SQL Injection (3) (0) | 2022.01.12 |
[DVWA] SQL Injection (2) (0) | 2022.01.12 |
[DVWA] SQL Injection (1) (0) | 2022.01.11 |
[DVWA] Brute-Force (0) | 2022.01.10 |