搜索型注入点的找寻和注入方法

 转自:http://hi.baidu.com/wowobar/blog/item/9d13ab2f84c8ba584ec226d8.html

目前,一些网站为了方便用户查找网站的资源,都对用户提供了搜索的功能,因为是搜索功能,往往是程序员在编写代码时都忽略了对其变量(参数)的过滤,而且这样的漏洞在国内的系统中普遍的存在,常见的搜索功能代码如下:

..................
keyword=trim(request.From("keyword")
获取客户端提交在要查询的关键字,并过滤了两边的空格

if keyword="" then 如果关键字为空,则输出下面的"查询内容不能为空!'"
response.Write "alert('查询内容不能为空!');history.back(-1);"
response.end
end if
set rs=server.CreateObject("ADODB.recordset") 创建对象
sql="select * from b_class where b_name like '%"&keyword"%' order by id desc"
利用关键字进行模糊查询,将查询的结果按id字段的降序排列
rs.open sqls.conn.3.1
if rs.eof then
...................
%>

从上面的代码中,程序只对用户提交的搜索变量(参数)过滤了两边的空格,并没有过滤这个参数的其它东西,就带到了SQL语句内进行查询,从而导致了注入的漏洞产生.在大部分的系统中,实现搜索功能的文件名为"search.asp",如果大家要寻找系统源代码中有没有搜索型注入的漏洞,首先要看系统中有没有这个文件,一般情况下都有存在的,如果没有,我们还可以在搜索系统的首页,查找关键字"搜索"(或"查询"等),也可以找到,找到关键字后,还要查看要实现搜索功能的这个表单是被那个文件链接,(大家都知道,在HTML语言中,表单在网页上的一个特定的区域中,是由一对标志定义的标识的,在标志中ACTION属性定义了表单数据提交的地址),所以我们还要看ACTION属性是链接那个文件,而这个文件就是实现搜索功能的文件,我们就可以使用"查看源文件"来看代码,并找出是否有注入的漏洞存在.不过,我们还是要来学习下SQL数据查询中WHERE子句使用Like操作符的知识,Like操作符所起的作用就是模糊查询,要使用Like进行模糊查询必须还要配合通配符才能完成,"%"就是Like操作符中的一种通配符,它代表零个或多个任意字符,为了大家理解,为大家举了一些例子:

Like "黑客%" 返回以黑客开始的任意字符

Like "%黑客" 返回以黑客结尾的任意字符

Like "%黑客%" 返回以包含黑客的任意字符

我想,通过这些例子的说明,大家对模糊查询有了一定的了解吧,下面我就讲讲注入的方法吧
我们打开一个网站,在搜索框里输入关键字%' and 1=1 and '%'='关键字就为"经理"吧,点搜索,结果返回与经理有关的资料,当我们输入经理%' and 1=2 and '%'='时,却返回空的资料,这又是为什么呢?,哈哈,讲到这儿,有的朋友就可能想到时在第一讲中关于逻辑运算的知识了,不错,在我们输入经理%' and 1=1 and '%'='在Like后的语句就变成了'%经理%' and 1=1 and '%'='%',转成逻辑运算符就为真and真and真and,那么它的结果也为真,当然返回我们要搜索的资料了,反之,运算的结果为假,自然就什么也搜索不到了.当然我们还可在搜索框中输入关键字' and '1%'='1和关键字' and '1%'='2来看是不是返回不同的页面来判断该漏洞的存在.(关于这方面的知识,在第一讲中我已比较详细的说明了)
同样,搜索型注入方法也分手工和工具两种方法,手工的注入利用方法很简单,只要我们在搜索框中输入关键字%' and 注入攻击代码 and '%'=',这儿的注入攻击代码和我们平常在URL中使用的注入代码一样,比如,我们要判断网站后台的数据库类型,那么我们输入关键字%' and user>0 and '%'=',就可以了,不过我们选的关键字一定要在这个网站中可以搜索到,如果这个关键字在网站中搜索不到那么,这个关键字就不可以来作为我们注入的关键字.在工具中,NBSI和HDSL这二款注入工具都提供了对搜索型的注入漏洞的注入,不过前提是我们要得到注入点,也就是要得到搜索页面的URL地址,在上一讲中,我已提到系统在获取用户的提交数据时,有GET和POST这两种的提交数据方式,在request对象中获取GET方法提交的数据对应的集合是QueryString,而获取POST方法提交的数据对应的集合是From,在实际的代码中,通过POST方法提交数据的时候用得最多,在上面的代码中,大家也可以看到是使用POST方法提交数据的,当然request对象可以不通过集合来获得数据,但它的效率低下,容易出错,在大型系统中一般不使用这种提交的方法,这两种提交数据的方法,最大的不同就是在通过GET方式提交数据的时候,所有的参数及值都是放入URL中的,成为URL的一部分,并显示出来,例如,百度在搜索的时候就是采用这种方式,当我们搜索"新世纪网安"时,就可以看到在浏览器的URL显示了"http://www.baidu.com/s?wd=%D0%C2%CA%C0%BC%CD%CD%F8%B0%B2&cl=3"而%D0%C2%CA%C0%BC%CD%CD%F8%B0%B2就是新世纪网安经过编码的字符(这点,我可以给大家看下),并放入在URL中,在这个URL中,通过将?,&多个变量的值连在一起,这个URL是传输搜索字"新世纪网安".而cl的值为3,如果系统是采用GET方式提交的搜索,我们只需要把其URL填入工具中就可,不过还要填入可以搜索到的关键字,但在使用POST提交方式时,我们提交的数据在URL中是看不到的,它将表单中的数据放到PORM的数据体中了,这样我们就要自己来手动找出隐藏的变量了,然后再赋予正确的值并正确构造出注入的URL,再交给工具进行注入就行了,下面我就用"http://hr.wtojob.com(世贸人才网)和http://www.sdrs.gov.cn/"(山东人事信息网),这两个网站分别来讲讲两种方法的步骤:

1:先判断有没有注入的漏洞
2:先在网站的搜索框中输入要搜索的关键字,先不要点击"搜索".
3:再打开Wesockexpert工具,单击工具条里的"打开进程"按钮,会出现一个进程列表,选择网站的IE进程,点击后打开就可以监视我们提交的数据了,
4:再点击"搜索",之后,我们在工具界面的框中,选中POST提交的信息包,点击后,就会在下面的框中,就会出现POST提交的参数和相对应的值
5:URL的手工修改,修改好后把它填入注入工具里,关于搜索型注入工具,HDSI工具处理的比较好,大家还要注意,由于工具判断注入漏洞的方法只是检测最后的一个变量,因此要把查询的关键字放在URL的最后面才可以检测出来,接下来工具就可以帮我们做想做的事了. (重要申明,大家看了教程后,不要去对上面的二个网站搞破坏,否则后果自负)
现在很多的网站系统都过滤了一些普通的注入,但程序员往往疏忽了对搜索功能查询,文本框内的输入和隐藏域内的数据提交变量(参数)的过滤或过滤不全,这样也导致了漏洞的产生

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值