龙空技术网

「网络安全」常见攻击篇(4)——SQL注入攻击

成长点滴 1082

前言:

眼前同学们对“sql注入攻击的检测手段”都比较重视,你们都需要剖析一些“sql注入攻击的检测手段”的相关文章。那么小编同时在网上收集了一些有关“sql注入攻击的检测手段””的相关知识,希望朋友们能喜欢,同学们快快来了解一下吧!

什么是SQL注入攻击?

SQL注入攻击是指web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。

SQL注入可以分为平台层注入和代码层注入。前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询。

SQL注入的产生原因通常表现在以下几方面:①不当的类型处理;②不安全的数据库配置;③不合理的查询集处理;④不当的错误处理;⑤转义字符处理不合适;⑥多个提交处理不当。

SQL注入原理

当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入。sql注入可能导致攻击者使用应用程序登陆在数据库中执行命令。如果应用程序使用特权过高的帐户连接到数据库,这种问题会变得很严重。

在某些表单中,用户输入的内容直接用来构造动态sql命令,或者作为存储过程 的输入参数,这些表单特别容易受到sql注入的攻击。而许多网站程序在编写时,没有对用户输入的合法性进行判断或者程序中本身的变量处理不当,使应用程序 存在安全隐患。这样,用户就可以提交一段数据库查询的代码,根据程序返回的结果,获得一些敏感的信息或者控制整个服务器,于是sql注入就发生了。

SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况,需要构造巧妙的SQL语句,从而成功获取想要的数据。

下面我们举例说明SQL注入的原理:

假设有一个users表,里面有两个字段username和password。在java代码中初学者都习惯用SQL拼接的方式进行用户验证。比如:“select id from users where username = ‘”+username +“’ and password = ‘” + password +“’” 这里的username和password都是我们存取从web表单获得的数据。

如果我们在表单中username的输入框中输入‘or 1=1 ',password的表单中随便输入一些东西,假如这里输入123,此时所要执行的sql语句就变成了select id from users where username = ’‘ or 1=1 and password = ’123‘,这个sql中因为1=1是true,后面 and password = ’123‘被注释掉了。所以这里完全跳过了sql验证,构成了一次SQL注入攻击,SQL注入的方式还有很多。

SQL注入攻击的类型带内注入

这是典型的攻击,攻击者可以通过相同的通信通道发起攻击并获得结果。这是通过两种带内技术完成的:

● 基于错误的SQL注入:从显示的错误消息中获取有关数据库的信息

● 基于联合的SQL注入:依赖于攻击者能够将UNION ALL被盗信息的结果与合法结果连接起来。

这两种技术都依赖于攻击者修改应用程序发送的SQL,以及浏览器中显示的错误和返回的信息。如果应用程序开发人员或数据库开发人员无法正确地参数化他们在查询中使用的值,那么它会成功。两者都是试错法,可以检测到错误。

盲注入

也称为推理SQL注入,盲注入攻击不会直接从目标数据库中显示数据;相反,攻击者会仔细检查行为中的间接线索。HTTP响应中的详细信息,某些用户输入的空白网页以及数据库响应某些用户输入需要多长时间,这些都可以是线索,具体取决于攻击者的目标。他们还可以指向攻击者尝试的另一个SQLi攻击途径。

带外注入

这种攻击有点复杂,当攻击者无法在单个直接查询 - 响应攻击中实现其目标时,攻击者可能会使用此攻击。通常,攻击者会制作SQL语句,这些语句在呈现给数据库时会触发数据库系统创建与攻击者控制的外部服务器的连接。以这种方式,攻击者可以收集数据或可能控制数据库的行为。

二阶注入就是一种带外注入攻击。在这种情况下,攻击者将提供SQL注入,该注入将由数据库系统的单独行为存储和执行。当二级系统行为发生时(它可能类似于基于时间的作业或由其他典型管理员或用户使用数据库触发的某些事情)并且执行攻击者的SQL注入,那就是当“伸出”到系统时攻击者控制发生了。

SQL注入的危害数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。网页篡改:通过操作数据库对特定网页进行篡改。网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改。服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。破坏硬盘数据,瘫痪全系统。SQL注入防御不要使用动态SQL

避免将用户提供的输入直接放入SQL语句中;最好使用准备好的语句和参数化查询,这样更安全。

不要将敏感数据保留在纯文本中

加密存储在数据库中的私有/机密数据;这样可以提供了另一级保护,以防攻击者成功地排出敏感数据。

限制数据库权限和特权

将数据库用户的功能设置为最低要求;这将限制攻击者在设法获取访问权限时可以执行的操作。

避免直接向用户显示数据库错误

攻击者可以使用这些错误消息来获取有关数据库的信息。

对访问数据库的Web应用程序使用Web应用程序防火墙(WAF)

这为面向Web的应用程序提供了保护,它可以帮助识别SQL注入尝试;根据设置,它还可以帮助防止SQL注入尝试到达应用程序(以及数据库)。

定期测试与数据库交互的Web应用程序

这样做可以帮助捕获可能允许SQL注入的新错误或回归。

将数据库更新为最新的可用修补程序

这可以防止攻击者利用旧版本中存在的已知弱点/错误。

感谢您的阅读,喜欢的话就转发并关注小编吧。

上一篇:「网络安全」常见攻击篇(3)——跨站脚本攻击XSS

下一篇:「网络安全」常见攻击篇(5)——口令攻击

标签: #sql注入攻击的检测手段 #什么是sql注入攻击并举例说明方法 #sql注入攻击实验总结 #sql注入防护措施中哪种描述是错误的 #js脚本注入攻击