BIGINT Overflow Error Based SQL Injection?

먼저 결론부터 이야기해야 겠다. 현재 이 방법은 적용이 안 되는 것 같다.

64비트 정수 자료형인 BIGINT의 범위를 초과하는 계산으로 오버플로우 에러를 발생시켜 자료를 빼내는 방법으로 상세한 보고서는 아래 링크에서 볼 수 있다.

https://www.exploit-db.com/docs/37733.pdf

위의 보고서에서는 아래와 같은 POC를 제공하면서 MySQL 5.5 이상에서 가능하다고 하고 있으나…

실제 적용해보면 에러가 발생하기는 하는데, 쿼리를 해석하지 않고 정리해서 보여준다. 표현이 좀 모호한데, user() 함수의 실행 결과가 문자열로 표시되는 게 아니라 user() 함수를 사용한 쿼리를 그대로 보여준다.

보고서 작성자에게 이런 사실에 대해 문의했더니, 패치가 된 것 같다면서 아래와 같은 쿼리를 보내왔다.

잠시 가능성이 보이는 듯 하였으나…

name_const() 함수는 version() 함수를 제외한 함수와 서브 쿼리를 인자로 사용할 수 없었다.

동일한 이유로 exp() 함수를 Error Based SQL Injection 역시 현재는 사용할 수 없는 것으로 보인다. 이 방법에 대한 보고서는 아래 링크와 같다.

https://www.exploit-db.com/docs/37953.pdf

현재까지 가능한(내가 알고 있는 범위 내에서) Error Based SQL Injection은 쿼리는 아래와 같다.