SQL注入与XSS漏洞所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击.当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入。sql注入可能导致攻击者使用应用程序登陆在数据库中执行命令。如果应用程序使用特权过高的帐户连接到数据库,这种问题会变得很严重。在某些表单中,用户输入的内容直接用来构造(或者影响)动态sql命令,或者作为存储过程的输入参数,这些表单特别容易受到sql注入的攻击。而许多网站程序在编写时,没有对用户输入的合法性进行判断或者程序中本身的变量处理不当,使应用程序存在安全隐患。这样,用户就可以提交一段数据库查询的代码,根据程序返回的结果,获得一些敏感的信息或者控制整个服务器,于是sql注入就发生了。注入大致方法:先猜表名And(Selectcount(*)from表名)0猜列名And(Selectcount(列名)from表名)0或者也可以这样andexists(select*from表名)andexists(select列名from表名)返回正确的,那么写的表名或列名就是正确这里要注意的是,exists这个不能应用于猜内容上,例如andexists(selectlen(user)fromadmin)3这样是不信的现在很多人都是喜欢查询里面的内容,一旦iis没有关闭错误提示的,那么就可以利用报错方法轻松获得库里面的内容获得数据库连接用户名:;anduser0这个是小竹提出来的,我这里引用《SQL注入天书》里面的一段话来讲解:----------------------------------------------------------------------------------------------------------重点在anduser0,我们知道,user是SQLServer的一个内置变量,它的值是当前连接的用户名,类型为nvarchar。拿一个nvarchar的值跟int的数0比较,系统会先试图将nvarchar的值转成int型,当然,转的过程中肯定会出错,SQLServer的出错提示是:将nvarch-----------------------------------------------------------------------------------------------------------看到这里大家明白了吧,报错的原理就是利用SQLserver内置的系统表进行转换查询,转换过程会出错,然后就会显示出在网页上,另外还有类似的and1=(selettop1userfromadmin),这种语句也是可以爆出来的。;anddb_name()0则是暴数据库名。一旦关闭了IIS报错,那么还可以用union(联合查询)来查内容,主要语句就是Orderby10And1=2unionselect1,2,3,4,5,6,7,8,9,10fromadminAnd1=2unionselect1,2,3,user,5,passwd,7,8,9,10fromadmin上面的orderby10主要就是查字段数目,admin就是表名,可以自己猜,user,passwd是列名反正就是返回正确即对,返回异常即错另外还有十分常用的ascll码拆半法先要知道指定列名,例如user里的内容的长度and(selectlen(user)fromadmin)=2就是查询长度为不为2位,返回错误的增加或减少数字,一般这个数字不会太大,太大的就要放弃了,猜也多余后面的逻辑符号可以根据不同要求更改的,大于小于=就是等于咯,更新语句的话,=也可以表示传递符号就是不等知道了长度后就可以开始猜解了And(Selecttop1asc(mid(user,n,1))fromadmin)100n就是猜解的表名的第几位,最后的长度数字就是刚才猜解出来的列名长度了,And(Selecttop1asc(mid(user,1,1))fromadmin)100就是猜解user里内容的第一位的ASCLL字符是不是大于100正确的话,那么表示USER第一个字符的ASCLL码大于100,那么就猜120,返回错误就是介于100-120之间,然后再一步一步的缩少,最终得到正确字符XXX,然后用ASCLL转换器吧这个转换成普通字符就可以了然后就是第二位And(Selecttop1asc(mid(user,2,1))fromadmin)100一直猜下去加在url后面,列名表名还是先猜解,返回正确的代表帐号的ascll码大于100,那么就再向前猜,指导报错,把猜出来的ascll码拿去ascll转换器转换就可以了,中文是负数,加上asb取绝对值And(Selecttop1asb(asc(mid(user,n,1)))fromadmin)15320得到之后就记得在数字前加-号,不然ASCLL转换器转换不来的,中文在ASCLL码里是-23423这样的,所以猜起来挺麻烦这个猜解速度比较慢,但是效果最好,最具有广泛性2.2.后台身份验证绕过漏洞验证绕过漏洞就是'or'='or'后台绕过漏洞,利用的就是AND和OR的运算规则,从而造成后台脚本逻辑性错误例如管理员的账号密码都是admin,那么再比如后台的数据库查询语句是user=request(user)passwd=request(passwd)sql='selectadminfromadminbatewhereuser='&'''&user&'''&'andpasswd='&'''&passwd&'''那么我使用'or'a'='a来做用户名密码的话,那么查询就变成了selectadminfromadminbatewhereuser=''or'a'='a'andpasswd=''or'a'='a'这样的话,根据运算规则,这里一共有4个查询语句,那么查询结果就是假or真and假or真,先算and再算or,最终结果为真,这样就可以进到后台了这种漏洞存在必须要有2个条件,第一个:在后台验证代码上,账号密码的查询是要同一条查询语句,也就是类似sql=select*fromadminwhereusername='&username&'&passwd='&passwd&'如果一旦账号密码是分开查询的,先查帐号,再查密码,这样的话就没有办法了。第二就是要看密码加不加密,一旦被MD5加密或者其他加密方式加密的,那就要看第一种条件有没有可以,没有达到第一种条件的话,那就没有戏了3防御方法对于怎么防御SQL注入呢,这个网上很多,我这里讲几个如果自己编写防注代码,一般是先定义一个函数,再在里面写入要过滤的关键词,如select;“”;form;等,这些关键词都是查询语句最常用的词语,一旦过滤了,那么用户自己构造提交的数据就不会完整地参与数据库的操作。当然如果你的网站提交的数据全部都是数字的,可以使用小竹提供的方法FunctionSafeRequest(ParaName,ParaType)'---传入参数---'ParaName:参数名称-字符型'ParaType:参数类型-数字型(1表示以上参数是数字,0表示以上参数为字符)DimParaValueParaValue=Request(ParaName)IfParaType=1thenIfnotisNumeric(ParaValue)thenResponse.write参数&ParaName&必须为数字型!Response.endEndifElseParaValue=replace(ParaValue,','')EndifSafeRequest=ParaValueEndfunction然后就用SafeRequest()来过滤参数,检查参数是否为数字,不是数字的就不能通过XSS又叫CSS(CrossSiteScript),跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常忽略其危害性。而本文主要讲的是利用XSS得到目标服务器的shell。技术虽然是老技术,但是其思路希望对大家有帮助。[编辑本段]如何寻找XSS漏洞就个人而言,我把XSS攻击分成两类,一类是来自内部的攻击,主要指的是利用程序自身的漏洞,构造跨站语句,如:dvbbs的showerror.asp存在的跨站漏洞。另一类则是来来自外部的攻击,主要指的自己构造XSS跨站漏洞网页或者寻找非目标机以外的有跨站漏洞的网页。如当我们要渗透一个站点,我们自己构造一个有跨站漏洞的网页,然后构造跨站语句,通过结合其它技术,如社会工程学等,欺骗目标服务器的管理员打开。然后利用下面的技术得到一个shell.[编辑本段]如何利用传统的跨站利用方式一般都是攻击者先构造一个跨站网页,然后在另一空间里放一个收集cookie的页面,接着结合其它技术让用户打开跨站页面以盗取用户的cookie,以便进一步的攻击。个人认为这种方式太过于落后,对于弊端大家可能都知道,因为即便你收集到了cookie你也未必能进一步渗透进去,多数的cookie里面的密码都是经过加密的,如果想要cookie欺骗的话,同样也要受到其它的条件的限约。而本文提出的另一种思路,则从一定程度上解决上述的问题。对于个人而言,比较成熟的方法是通过跨站构造一个表单,表单的内容则为利用程序的备份功能或者加管理员等功能得到一个高权限。下面我将详细的介绍这种技术。[编辑本段]来自内部的跨站攻击寻找跨站漏洞如果有代码的话比较好办,我们主要看代码里对用户输入的地方和变量有没有做长度和对”〈”,”〉”,”;”,”’”等字符是否做过滤。还有要注意的是对于标签的闭合,像测试QQ群跨站漏洞的时候,你在标题处输入〈script〉alert(‘test’)〈/script〉,代码是不会被执行的,因为在源代码里,有其它的标签未闭合,如少了一个〈/script〉,这个时候,你只要闭合一个〈/script〉,代码就会执行,如:你在标题处输入〈/script〉〈script〉alert(‘test’)〈/script〉,这样就可以弹出一个test的框。如何利用我先以BBSXP为例,过程已做成动画,详情可见光盘中的动画。我举BBSXP中其中两个比较好用的跨站漏洞点为例.a.先注册一个普通用户,我这里注册的用户是linzi.然后我们在个人签名里写入:c.然后发个贴子,可以结合其它技术欺骗管理员浏览发的贴子。d.因为是测试,所以我们以管理员身份登陆,然后打开贴子,我们会发现,linzi已经变成了社区区长工,如图一所示除此之外我们只要在个人签名里输入同样发个贴子等,只要管理员打开了,就会加了一个扩展名为asp(有空格)的上传扩展,这个时候,你只要上传一个newmm.asp(有空格)就可以得到一个shell.上面的攻击多多少少有点局限性,虽然可以得到shell,但是隐蔽性不太好,因为签名处受到了长度的限制,不能超过255个字符。我们可以结合flash跨站实现更为隐蔽的攻击,对于flash木马的制作,下面见哥们丰初的介绍。再利用如下:修改一下个人头像的url,输入代码如下:再接着欺骗管理员打开你的资料或者浏览你的贴子,当管理员打开后,会在后台自动加个php扩展名的后辍,因为bbsxp在个人头像url里过滤了空格,%,所以我们只能加个不包括空格的其它扩展,当然你也可以加个shtml的扩展,有了它你就可以用来查看源代码,然后进一步攻击。[编辑本段]来自外部的跨站攻击有的时候,当我们对于目标程序找不到可以利用的跨站点,这个时候我们可