웹해킹/sql injection

SQL Injection - Blind SQL Injection 기법

정보보호학과 새내기 2021. 7. 12. 10:59
반응형
SMALL

Blind SQL Injection

 

- SQL 쿼리의 결과가 보이지 않은 상황

 

- 참일 때와 거짓일 때 다른 결과를 나오게 유도해야한다.

- 참이 나올때의 데이터 1개를 저장해서 데이터 전체를 찾을 때까지 브루트포싱한다.

(브루트 포스란? 무차별 대입 공격으로 조합 가능한 모든 문자열을 하나씩 대입해 보는 방식으로 암호를 해독하는 방법.)

 

- Error Based SQL과 Time Based SQL로 나뉨

 

Error Based SQL Injection

 

- 에러가 나오는지 여부에 따라 참 거짓 구분

- SQL 구문에 sql 쿼리를 보낼 때 에러가 발생하면 에러 문구를 출력시킴

 

- 다른 컴퓨터 언어의 조건문과 같은 조건문 함수를 이용

- if(조건문 ,참일 때 반환값, 거짓일 때 반환값)

- 참일 때 반환값에 에러를 발생시키면 에러 문구가 출력됨

 

- 에러 종류: 정수 오버플로우 에러, Union select 에러, Order by 에러 등

 

1) 정수 오버플로우 에러

- pow(2,5) = 32 정도로 간단함

- pow(2,99999)는 컴퓨터의 정수 범위를 벗어나서 에러를 출력

- ex) if(1=1, pow(2,99999), 0) 이러면 참이니깐 에러 문구를 반환

 

2) Union Select 에러

- Union: 2개 이상의 Select구문의 결과를 합쳐주는 명령어

- Select ~~~ union Select ~~~ 형태로 사용

- 조건: union select에서 가져오는 컬럼의 개수와 앞의 select에서 가져오는 컬럼의 개수가 같아야함 ---> 같지 않으면 에러 반환

- Select-Union Select 구문은 서브-쿼리로 사용할 수 없음 (서브쿼리란? 쿼리 속에 작성되는 쿼리, 무조건 괄호 속에 작성)

 

- SQL 쿼리에서 select 1은 1=1과 비슷한 역할을 함

- 쿼리문 뒤에 and (select 1 union select 2)를 넣으면 select-union select 구문이 서브쿼리에 들어간 것이므로 에러 반환

- 다양하게 활용하여 사용됨(키워드나 규칙 중요)

 

Time Based SQL Injection

 

- 쿼리 처리 시간에 따라 참 거짓 구분

- Mysql에 시간 처리를 늘리게 해주는 명령어들이 존재함

 

1) sleep 함수

- sleep(정수) ---> 정수 초만큼 mysql을 멈춤

 

2) Benchmark 함수

- Select Benchmark(쿼리 수행 횟수, 쿼리)

- 쿼리를 수행 횟수만큼 반복하고, 걸린 시간을 반환

- 쿼리는 일반 SQL구문도 되고 문자열이나 정수도 됨

- 걸린 시간만 반환하므로 컬럼은 1개임 ---> Select 구문으로 1개의 컬럼만 가져오게 작성해야 함

 

유용한 함수들

 

1) Case when then end

- case 비교하는 컬럼 when 비교 조건 then 참일 때 처리 조건 else 거짓일 때 처리 조건 end

- C언어 if else if랑 비슷

- else if 처럼 when then 여러 개 사용 가능

 

2) lpad rpad

- lpad(기준 문자열, 변경할 문자열의 길이, 왼쪽으로 넣을 문자열)

- ex) select lpad("ABCD",21,"ZV"); ---> ZVZVZVZVZVZVZVZVZABCD

- rpad(기준 문자열, 변경할 문자열의 길이, 오른쪽으로 넣을 문자열)

- ex) select rpad("ABCD",21,"ZV"); ---> ABCDZVZVZVZVZVZVZVZVZ

 

3) 데이터 변환함수

- ascii(문자): 해당 문자의 아스키 번호를 10진수로 반환

- ord(문자): 해당 문자의 아스키 번호를 10진수로 반환

- char(숫자): 해당 숫자를 10진수로 인식하고 ascii에 해당하는 문자로 반환

- hex(문자): 해당 문자의 아스키 번호를 16진수로 반환

- bin(숫자): 해당 숫자를 10진수로 인식하고 2진수로 반환

반응형
LIST