应用异常监控
数据库异常监控
在SQL注入的探测阶段,或者报错注入的攻击阶段,通常会在数据库产生大量的异常。因此,通过监控异常可以有效的发现的SQL注入攻击。目前我们所有支持的数据库均可以监控SQL异常,且异常代码可以在插件里配置。
插件里默认监控的SQL异常如下,具体请参考官方插件的 sql_exception 检测算法。
MySQL
错误编号 |
报警样例 |
1060 |
Duplicate column name '5.5.60-0ubuntu0.14.04.1' |
1062 |
Duplicate entry '::root@localhost::1' for key 'group_key' |
1064 |
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') from mysql.user' at line 1 |
1105 |
XPATH syntax error: '~root@localhost~' |
1367 |
Illegal non geometric 'user()' value found during parsing |
PostgreSQL
错误编号 |
报警样例 |
42601 |
normal syntax error |
22P02 |
ERROR: invalid input syntax for type double precision: "DATABASE: test1" |
SQLite
错误编号 |
报警样例 |
1 |
generic error, like syntax error、malformed MATCH expression: ["3.6.23.1] and other |
Oracle
错误编号 |
报警样例 |
ORA-01740 |
missing double quote in identifier |
ORA-01756 |
quoted string not properly terminated |
ORA-00907 |
missing right parenthesis |
HSQL
错误编号 |
报警样例 |
-5583 |
malformed quoted identifier |
-5590 |
unexpected end of statement |
SQLServer
错误编号 |
报警样例 |
105 |
Unclosed quotation mark after the character string '%.*ls'. |
245 |
Conversion failed when converting the %ls value '%.*ls' to data type %ls. |
DB2
错误编号 |
报警样例 |
42603 |
The string constant beginning with "'xxx" does not have an ending string |
FAQ
1. Unable to derive error code from SQL exceptions 错误
当MySQL服务器与JDBC驱动不兼容,我们将无法从异常消息里提取SQL错误代码,并打印这个错误。比如 JDBC 5.1.46 + MySQL 5.5 就会出现这个问题,可以考虑升级JDBC驱动到对应的版本来解决。
这个错误会让数据库异常监控失效。