SQL注入攻击与防御学习笔记一
2015-12-09 21:08
309 查看
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语句中所有的列:
(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语句中所有的列:
相关文章推荐
- Sql Server 应用程序的高级Sql注入第1/2页
- PHP的SQL注入实现(测试代码安全不错)
- php防止SQL注入详解及防范
- PHP的SQL注入过程分析
- SQL数据库的高级sql注入的一些知识
- ASP也使用ORM,给ASP上所有的SQL注入画上句号
- SQL注入中绕过 单引号 限制继续注入
- JSP 防范SQL注入攻击分析
- PHP中防止SQL注入攻击和XSS攻击的两个简单方法
- 2007 10.30动易网站管理系统vote.asp页面存在SQL注入漏洞
- PHP中全面阻止SQL注入式攻击分析小结
- PHP 小心urldecode引发的SQL注入漏洞
- PHP中防止SQL注入实现代码
- asp.net 预防SQL注入攻击之我见
- php防止sql注入之过滤分页参数实例
- 对于ThinkPHP框架早期版本的一个SQL注入漏洞详细分析
- 防御SQL注入的方法总结
- Mysql数据库使用concat函数执行SQL注入查询
- PHP防范SQL注入的具体方法详解(测试通过)
- PHP中防止SQL注入方法详解