sql注入的攻击方式_网站如何用sql注入攻击

hacker|
180

如何对网站进行SQL注入

首先你要了解什么是SQL注入漏洞,SQL注入漏洞就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击。

简单来说,网站一般都是由web应用程序,数据库,服务器等组成的,网站的所有用户数据,密码表单等等都是保存在数据库当中的,数据库的内容按到常理来说是只能在服务器内部进行查询,当然,但是,开发人员对客户端用户向客户端提交的参数没有进行过滤,那么,黑客就可以从客户端【浏览器,等等,详细可以学习http协议】向服务器提交查询数据库的SQL语句,如果提交的语句成功的被服务器给接收到并且执行么,那么黑客岂不是想怎么查询数据库里面的内容就怎么查询,不是么?那些管理账号密码,会员数据不是分分钟就到手了?SQL注入漏洞危害是非常大的。

当然,这种漏洞是根据提交参数没过滤而产生的,那么除了浏览器的get提交参数,http协议中还有,post提交,cookie提交,等等。注入漏洞不是网上那些所谓的黑阔,用什么啊D,明小子之类的乱检测一气而找出来的,如果楼主想研究这个漏洞的产生,原理,利用和防御,是需要进行代码审计,SQL注入语句基础,等等。

现在一般常用的工具:SQLmap【这是一款神器,现在是公认最强大的开源注入工具】

建议楼主去看几本书:《SQL注入天书》《SQL注入漏洞的产生与防御》

这个漏洞的利用不是几句话就能说清楚的,详细的可以追问,纯手工打字,望楼主采纳。

如何对一个网站进行SQL注入攻击

比如一个查询页面,输入关键词进行查询:

若后台使用查询的SQL语句为:select * from table where content like '%{input}%'

{input}为页面填写的值,要对这种进行注入攻击,可输入: ';delete * from table where 1=1 or ''='

则整个SQL语句就变成了一条查询语句和一条删除语句。那么执行完后将全部数据被删除了。

SQL注入攻击与防范

关于SQL注入攻击与防范

随着网络的普及,关系数据库的广泛应用,网络安全越来越重要。下面是我为大家搜索整理了关于SQL注入攻击与防范,欢迎参考阅读,希望对大家有所帮助。想了解更多相关信息请持续关注我们应届毕业生培训网!

一、 SQL注入攻击

简言之,SQL注入是应用程序开发人员未预期地把SQL代码传入到应用程序的过程。它由于应用程序的糟糕设计而成为可能,并且只有那些直接使用用户提供的值构建SQL语句的应用程序才会受影响。

例如:用户输入客户ID后,GridView显示客户的全部行记录。在一个更加真实的案例中,用户还要输入密码之类的验证信息,或者根据前面的登录页面得到用户ID,可能还会有一些用户输入关键信息的文本框,如订单的日期范围或产品名称。问题在于命令是如何被执行的。在这个示例中,SQL语句通过字符串构造技术动态创建。文本框txtID的值被直接复制到字符串中。下面是代码:

在这个示例中,攻击者可以篡改SQL语句。通常,攻击的第一个目标是得到错误信息。如果错误没有被恰当处理,底层的信息就会暴露给攻击者。这些信息可用于进一步攻击。

例如,想象一下在文本一下在文本框中输入下面的字符串会发生什么?

ALFKI'OR '1'='1

再看看因此生成的完整SQL语句:

这条语句将返回所有的订单记录,即便那些订单不是由ALFDI创建,因为对每一行而言而有信1=1总是true。这样产生的后果是没有显示当前用户特定信息,却向攻击者显示了全部资料,如果屏幕上显示的是敏感信息,如社会保险号,生日或信用卡资料,就会带来严重的问题。事实上,这些简单的SQL注入往往是困扰那些大型电子商务公司的麻烦。一般而言,攻击点不在于文本框而在于查询字符串(可被用于向数据库传送值,如列表页向详细信息页面传送唯一标识符)。

还可以进行更复杂的攻击。例如,攻击者可以使用两个连接号(--)注释掉SQL语句的剩余部分。这样的攻击只限于SQL Server,不过对于其他类型的数据库也有等效的办法,如MySql使用(#)号,Oracle使用(;)号。另外攻击者还可以执行含有任意SQL语句的批处理命令。对于SQL Server提供程序,攻击者只需在新命令前加上分号(;)。攻击者可以采用这样的方式删除其他表的内容,甚至调用SQL Server的系统存储过程xp_cmdshell在命令执行任意的程序。

下面是攻击者在文本框中输入的,它的攻击目标是删除Customers表的全部行。

LUNCHUN’;DELETE*FROM Customers--

二、防范

如何预防SQL注入攻击呢?需要记住几点。首先,使用TextBox.MaxLength属性防止用户输入过长的字符是一个好办法。因为它们不够长,也就减少了贴入大量脚本的可能性。其次,要使用ASP.NET验证控件锁定错误的数据(如文本、空格、数值中的特殊字符)。另外,要限制错误信息给出的提示。捕获到数据库异常时,只显示一些通用的信息(如“数据源错误”)而不是显示Exception.Message属性中的信息,它可能暴露了系统攻击点。

更为重要的是,一定要小心去除特殊字符。比如,可以将单引号替换为两个单引号,这样它们就不会和SQL语句的分隔符混淆:

string ID=txtID.Text().Replace(“’”,”’’”);

当然,如果文本确实需要包含单引号,这样做就引入了其他麻烦。另外,某些SQL注入攻击还是可行的。替换单引号可以防止用户提前结束一个字符串,然而,如果动态构建含有数值的SQL语句,SQL注入攻击又有发挥的空间了。这个漏洞常被(这是很危险的)忽视。更好的解决办法是使用参数化的命令或使用存储过程执行转义以防止SQL注入攻击。

另一个好建议是限制用于访问数据库的账号的权限。这样该账号将没有权限访问其他数据库或执行扩展的存储过程。不过这样并不能解决SQL脚本注入的问题,因为用于连接数据库的进程几乎总是需要比任意单个用户更大的权限。通过限制权限,可以预防删除表的攻击,但不能阻止攻击者偷看别人的.信息

三、POST注入攻击

精明的用户可能会知道还有另外一个Web控件攻击的潜在途径。虽然参数化的命令防止了SQL注入攻击,但它们不能阻止攻击者向回发到服务器的数据添加恶意的值。如果不检查这些值,就使得攻击者可以提交本来不可能存在的控件值。

例如,假设你有一个显示当前用户订单的列表。狡诈的攻击者可能保存该页面的一个本地副本,修改HTML内容向列表添加更多的项目,然后选择某个“假”的项目。如果攻击成功,攻击者就能够看到其他用户订单,这显然是一个问题。幸好,ASP.NET使用一个很少被提及的叫做“事件验证”的特性来防止这种攻击。事件验证检查回发到服务器的数据并验证其中值的合法性。例如,如果回发的数据表明用户选择了一个没有意义的数据(因为它在控件中并不存在),ASP.NET就产生一个错误并停止处理。可以在Page指令中设置EnableEventValidation特性为false来禁用事件验证。创建使用客户端脚本动态改变内容的页面时,需要执行这一步。不过,此时在使用这些值之前要注意检查潜在的POST注入攻击。

;

0条大神的评论

发表评论