SQL의 잘못된 문법이나 자료형 불일치 등에 의해 DB가 알려주는 DB 오류 메시지에 의존하여 수행되는 공격기법.
공격자는 SQL 쿼리의 잘못된 문법을 사용해 고의적으로 오류를 유발시키고 해당 오류 정보를 바탕으로 DB명, 테이블, 컬럼 정보 등의 DB 정보와 구조를 알아내어 데이터 획득 가능.

문법적으로 오류가 있는 SQL 쿼리를 DB에 요청
-> DB는 SQL 쿼리가 왜 틀렸는지 알려주는 오류 반환
-> 개발자가 디버깅을 위해 HTTP 응답내에 출력하도록 작성해두고 방치한다면 일반 사용자도 확인 가능
-> 필요 이상으로 자세해서 공격에 필요한 정보가 될 수 있음
오류가 출력되지 않더라도 HTML 소스코드의 주석에서 나타날 수도 있음.
extractvalue() 함수를 활용하는 기법
extractvalue(xml_frag, xpath_expr)
extractvalue는 XML과 XPath 표현식이 필요하고 이 인수를 통해 표현식에 일치하는 데이터를 추출하여 반환.
xpath_expr이라는 두번째 인수에 유효하지 않은 XPath 표현식이 사용된다면
ERROR 1105 (HY000): XPATH syntax error: 'xpath_expr 인수의 값'
이런 오류가 발생함.
이 때 인수로 SQL 쿼리를 지정했을 때 이 쿼리의 실행결과가 오류 메시지에 포함됨
-> 이 점을 이용해 오류 기반의 SQL 공격을 수행 가능.
두번째 인수가 항상 유효하지 않은 XPath 표현식이 되도록 하기 위해 concat() 함수를 이용해 콜론을 앞에 추가함. 첫번째 인수는 임의의 값을 지정하기 위해 rand() 함수 사용.
후속 쿼리를 무효화하기 위해 가장 끝에 주석문자(--) 와 공백문자를 추가.
AND extractvalue(rand(), concat(0x3a, 실행할-SQL-쿼리))--
AND updatexml(null, 실행할-SQL-쿼리, null)--
이 때 계속해서 다음 행의 데이터를 추출하기 위해서는 LIMIT 1,1(두번째행), LIMIT 2,1(세번째 행)으로 반복하면 됨.
GROUP BY를 통한 그룹 집계의 기준 컬럼에 rand() 함수가 사용된 경우에 발생하는 Duplicate entry 오류를 활용한 기법으로 이 오류가 발생하는 이유에 대해서는 아직 명확히 밝혀지지 않았으며 단지 MySQL의 버그로 간주되기도 함.