보안

[웹모의해킹] 4-2. Blind SQL Injection

Mara7 2021. 6. 10.
반응형
LIST

2. Blind SQL Injection

1. 정의

SQL 쿼리 요청에 대한 응답 결과가 참, 거짓에 따라 데이터를 획득하는 공격.

데이터 베이스 내에 데이터를 하나씩 요청하여 이에 대한 응답으로 필드 값이나 테이블 명 같은 정보를 찾아내는 방식이며 하나의 쿼리당 하나의 응답을 주고 받기 때문에 많은 쿼리 요청이 전제되어야 하며 원하는 정보를 얻기까지 소요시간이 길다.

 

2. 종류

1. Boolean 기반 : 참, 거짓에 따라 반복적으로 수행하여 추측하는 방식

2. Time 기반 : 쿼리에 대한 응답이 "참"일 경우, sleep()함수를 사용하여 특정 시간만큼 지연시키는 공격 방식이며 거짓일 경우에 sleep() 함수가 실행되지 않으므로 시간 지연없이 응답이 이루어짐.

 

3. 실습을 위해 사용한 함수

4. 실습

1을 넣었을 때 존재한다고 나옴 => 1부터 원하는 결과가 나올때까지 노가다를 해야한다.

20을 넣었을 때 존재하지 않는다고 나옴.

Union함수

Union함수를 이용하면 데이터베이스의 모든 정보를 알아낼 수 있다.

Length

Length함수를 이용하여 데이터명의 개수를 확인함.

Substr함수

Substr함수를 이용하여 데이터베이스 명 문자열을 확인 할 수 있음.

Information_schema.table 함수

Information_schema.table을 이용하여 테이블 명 확인 가능.

사용자 계정 검색

사용자 계정을 찾기 위해 user테이블의 user칼럼을 이용하여 값을 찾을 수 있음.

1번째 함수 : select user from users limits 0,1

-> limit절을 사용하여 시작위치 0에서 1개로 반환값을 제한함.

2번째 함수 : substring((계정명)), 시작위치 1~5, 길이 1)

-> 두번째 함수는 substring()함수를 사용하여 가져온 user명의 시작위치를 순차적으로 변경하여 계정명을 가져옴.

 

3. 대응방안

 

1. Mysql

Mysql_real_escape_String() 함수를 사용 

-> SQL에서 특별한 의미를 갖는 문자들을 escape해서 SQL삽입 방지하는 방법

 

2. PHP.ini

maginc_quotes_gpc 옵션 활성화(On)과 함수 addslashes()를 이용하여 작은따옴표(싱글쿼터) 옆에 역슬래쉬(\)를 추가

 

3. 대응방안

- 웹 방화벽 도입

- 시큐어 코딩

- 취약점 점검

- 모니터링

반응형
LIST

댓글