[SQL Injection 의 종류]
1. Error based SQL Injection (지난 게시글)
: 쿼리와 관련된 ', ; 삽입 시에 SQL 과 관련된 에러를 통해서 데이터베이스의 정보를 예상한다.
2. Union based SQL Injection (지난 게시글)
: Union 키워드를 사용하여 select 문을 사용하여 칼럼 수와 같은 정보를 얻어낸다.
3. Blind based SQL Injection (현재 게시글)
: 요즘은 에러 메시지를 1번과 같이 출력하지 않기 때문에 에러가 발생되지 않는 사이트에서 SQL 쿼리 삽입 시 정상적으로 페이지가 출력됐냐 안됐냐에 따라 DB 구조를 파악한다.
4. Stored Procedure based SQL Injection
5. Time based SQL Injection (현재 게시글)
[실습 내용]
Blind SQL Injection 취약점을 발생시켜보자!
[초기화면]
- 앞선 SQL Injection 과 마찬가지로 숫자를 대입해보았다.
- 데이터베이스에 존재하는지 여부만 알려줄 뿐, 앞선 게시글처럼 정보를 내어주진 않는다.
- Blind SQL Injection 이므로 ', ; 등을 입력해도 에러 메시지가 출력되지 않을 것을 알지만 한번 시도해본다.
- 그냥 데이터베이스에 존재하지 않다고만 뜨고 쿼리문을 사용하는지 어떤지 데이터 베이스에 대한 정보를 빼낼 수가 없다.
- 다시 Blind SQL Injection 취약점 정의를 생각해보면 쿼리문을 날리고 참/거짓 여부를 판단하는 것으로 정보를 알아낼 수 있다.
- 1' AND 1=1# 를 이용하면 숫자 1 에 해당하는 유저가 있으면서 뒤의 조건은 참이므로 둘 다 만족하면 출력하라는 것을 작성한다.
- 존재한다고 뜬 걸 볼 수 있다. 그렇다면 뒤의 조건에 거짓을 붙이면 어떻게 될까?
- 출력되지 않는 것을 볼 수 있다. 분명 숫자 1 을 찾으라는 건 똑같은데 뒷부분을 거짓으로 하니 출력이 되지 않는 것을 보아 참/거짓으로 유저가 존재하는지 존재하지 않는지 여부를 판단할 수 있다.
- 이때, 응답 속도를 이용하여 개발자 도구를 통해 참/거짓 여부를 판단해 볼 수 있다.
- 2' AND sleep(5)# : 2번에 해당하는 유저가 존재하면 5초 뒤에 가져오라는 명령어가 된다.
- 정확히 5초 뒤에 유저가 존재하지 않는다는 메시지가 출력되는 것으로 보아 sleep(5) 함수가 정상적으로 실행됐음을 알 수 있다. -> 2번 유저가 존재한다.
- 이번에는 7' AND sleep(5)# 를 입력해보았다.
- 바로 빠르게 에러 메시지가 출력되는 것을 보아 7번에 유저는 존재하지 않음을 알 수 있다.
- 이렇게 Blind SQL Injection 은 에러 메시지를 통해 직접적으로 정보를 가져올 수 없을지 몰라도,
참/거짓 을 이용해서 해당 정보가 데이터 베이스에 존재하는지 여부를 판단할 수 있다.
'TeamH4C' 카테고리의 다른 글
[빡공팟 5기] W5 : DVWA 실습 - DOM based XSS (0) | 2022.10.23 |
---|---|
[빡공팟 5기] W5 : DVWA 실습 - Weak Session IDs (0) | 2022.10.23 |
[빡공팟 5기] W5 : DVWA 실습 - SQL Injection (0) | 2022.10.23 |
[빡공팟 5기] W5 : DVWA 실습 - Insecure CAPTCHA (0) | 2022.10.23 |
[빡공팟 5기] W5 : DVWA 실습 - File Upload (0) | 2022.10.23 |