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진수로 반환
'웹해킹 > sql injection' 카테고리의 다른 글
SQL Injection 필터링 우회 방법 - 주석편 (0) | 2021.07.10 |
---|---|
SQL Injection 필터링 우회 방법 - 대표 함수편 (0) | 2021.07.08 |
SQL Injection 필터링 우회 방법 - 연산자편 (0) | 2021.07.08 |
SQL Injection 필터링 우회 방법 - 공백편 (0) | 2021.07.07 |