SQL注入攻击与防御学习笔记一

1、不同数据库的简单识别方法:

(1)oracle和postgresql数据库,向web服务器发送如下请求:

http://www.victim.com/showproducts.php?category=bikes(原始) 测试:bi ' || ' kes

(2)microsoft sql server数据库,向web服务器发送如下请求:

http://www.victim.com/showproducts.php?category=bikes(原始) 测试:bi ' + ' kes

(3)mysql数据库,向web服务器发送如下请求:

http://www.victim.com/showproducts.php?category=bikes(原始) 测试:bi ' ' kes

2、用户请求触发数据库错误时,web构造返回的场景:

(1)将SQL错误显示在页面上,它对web浏览器用户可见。

(2)将SQL错误隐藏在web页面的源代码中以便于调试。

(3)检测到错误时跳转到另一个页面。

(4)返回HTTP错误代码500(内部服务器错误)或HTTP重定向代码302.

(5)应用适当地处理但不显示结果,可能会显示一个通用的错误页面。

3、使用一些技术来检索嵌入在数据库返回错误中的信息,第一种是通过将字符串转换到整数来产生错误。

例如:index.php?id=1 and 1=0/@@version(或者0/user);--   产生错误syntax error converting the nvarchar value 'microsoft sql server 2000-8.00.760....' to a column of data type int.

第二种 having 1=1技术(原理:group by要求select语句选择的字段是某个聚合函数的结果或者包含在group by字句中。如果该条件不满足,那么数据库会返回一个错误,显示出现该问题的第一列。

index.php?id=bike' having '1'='1   产生错误columns 'products.productid' is invalid in the select list because it is not contained in an aggregate function and there is no group by clause.

可以使用该技术和group by 来枚举select语句中所有的列:

你可能感兴趣的:(网络安全)