如何防止SQL注入漏洞 从代码去入手


能否理解并利用SQL首注是区分一般攻击者和专业攻击者的一个标准。面对严密禁用详细错误消息的防御,大多数新手会转向下一目标。但攻破SQL盲注漏洞并非绝无可能,我们可借助很多技术。它们允许攻击者利用时间、响应和非主流通道(比如DNS)来提取数据。以SQL查询方式提问一个返回TRUE或FALSE的简单问题并重复进行上千次,数据库王国的大门便通常不容易发现SQL盲注漏洞的原因是它们隐藏在暗处。一旦发现漏洞后,我们就会有们能支持多种多样的数据库。大量的漏洞可用。要明确什么时候应选择基于响应而非时间的利用和什么时候使用重量级的非主流通道工具,这些细节可节省不少时间。考虑清楚大多数SQL盲注漏洞的自动化程度后,不管是新手还是专家,都会有大量的工具可用。它们中有些是图形化界面,有些是命令行,它有了SQL注入和SQL盲注的基础知识之后,现在转向进一步利用漏洞:识别并利用一个不错的注入点之后,如何快速发现注入并修复漏洞。


快速解决防SQL注入方案


1.寻找并确认SQL盲注


.无效数据将返回通用错误页面而非详细错误,这时可通过包含副作用(比如时间延迟)来确认SQL注入,还可以拆分与平衡参数。如果数字字段为5,就提交3+2或6-1;如果字符串参数中包含“MadBod”,就提交'Mad'l'Bod'。现该目标。.请思考漏洞的属性:能否强制产生错误以及能否控制无错误页面的内容?·可通过在SQL中提问某一位是1还是0来推断单个信息位,有很多推断技术可用于实现该目标2.使用基于时间的技术SLEEPO类型函数或运行时间很长的查询来引入延迟。.可使用逐位方法或二分搜索方法提取数据并利用延迟装示数据的值,可使用明确的,通常在SQLServer和Oracle上采用以时间作为推断的方法,不过这在MySQL上不大可靠,该机制很可能会失效。.使用时间作为推断方法在本质上是不可靠的,但却可以通过增加超时或借助其他技巧来进行改进。


3.使用基于响应的技术


·可使用逐位方法或二分搜索方法提取数据并利用响应内容表示数据的值。一般来说,现有查询中都包含一条插入子句,它能够根据推断的值来保持查询不变或返回空结果,基于响应的技术可成功用于多种多样的数据库。某些情况下,一个请求可返回多个信息位。4.使用非主流通道,带外通信的优点是:可以以块而非位的方式来提取数据,并且在速度上有明显改进。最常用的通道是DNS.攻击者说服数据库执行一次名称查找,该查找包含一个由攻击者控制的域名并在域名前添加了一些要提取的数据。当请求到达DNS名称服务器后,攻击者就可以查看数据。其他通道还包括HTTP和SMTP。不同数据库支持不同的非主流通道,支持非主流通道的工具的数量明显要比支持推断技术的少。


5.自动利用SQL盲注

Absinthe的威力在于支持数据库映射,并且能利用基于错误和响应的推断利用来对很多流行的数据库(不管是商业的还是开源的)进行检索。方便的GUI为攻击者带来了很好的体验,但缺少特征签名支持限制了其效能。BSQLHacker是另一款图形化工具,它使用基于时间及响应的推断技术和标准错误来从所提问的数据库中提取数据。虽然它仍处于测试阶段,不是很稳定,但该工具前景很好且提供了很多欺诈机会。SQLBrute是一款命令行工具,它针对希望使用基于时间或响应的推断来利用某个固定漏洞的用户。Sqlmap将漏洞的发现和利用结合在一款强大的工具中,它既支持基于时间的推断方法,也支持基于响应的推断方法,另外还支持ICMP通道方法。该工具的成长速度很快,开发也很活跃。


●Sqlninja有很多特性,它支持使用基于DNS的非主流通道来执行远程命令。首先上传一个自定义的二进制封装器(wrapper),然后通过上传的封装器来执行命令。封装器捕获所有来自命令的输出并初始化一个DNS请求序列,请求中包含了编码后的输出。

分享: