揭露88red生成htm静态页面企业建站系统漏洞

当前位置 : 首页 > 实用技巧 > 漏洞研究 > 揭露88red生成htm静态页面企业建站系统漏洞

揭露88red生成htm静态页面企业建站系统漏洞

来源:互联网 作者:脚本宝典 时间:2015-07-26 18:35
作者:小帥(xsser)@[0.S.T] 本文已发表在《黑客手册》第4期,转载请注明出处,或以超链接方式注明:http://blog.0kee.com/xiaoshuai小帥sblog 很久没去asp300溜达了,不去总觉得的对不起这个发布

作者:小帥(xsser)@[0.S.T]  
本文已发表在《黑客手册》第4期,转载请注明出处,或以超链接方式注明:http://blog.0kee.com/xiaoshuai 小帥's blog 
很久没去asp300溜达了,不去总觉得的对不起这个发布站的流量,也对不起黑客手册那么多读者的强烈要求(别扔鸡蛋!扔钱!),那好,既然牛都吹起来了,我不得不冒着生命危险看看代码吧,反正我下载下来的时候就觉得很伟大,这个系统很伟大,他吹的比我还大,好好,我们看他怎么说的:88red生成htm静态页面企业建站系统V3.0经过精心打造正式推出,集合了网站地图、企业新闻中心、企业产品、搜索、客户留言、下载、投票系统等等功能,基本涵盖了一个企业网站所需要的基本功能。其生成静态页面的功能为广大企业网站优化搜索引擎SEO,提供了最大的帮助。系统设计了新的美工,更加贴近企业网站效果。我们用事实说话。1、未过滤的留言版打开目录后发现conn.asp、config.asp等文件,那就看看吧,首先看config.asp里没有什么特别的,conn.asp里容错了(就是防止暴库了),没戏?当然有,我们看下conn.asp:  
<% on error resume next dim conn dim connstr dim db db="data/qiyedata.asa" Set conn = Server.CreateObject("ADODB.Connection") connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(db) conn.Open connstr%>  
顺藤摸…乱摸吧,摸到啥就是啥,我摸到了数据库,还是asa的,我先想到了一句话这个东西,一句话?什么东西能和一句话连在一起呢?怎么让他入库呢?用户、留言、发布等地方,我看了一下根目录都是静态的,想想html注入行不?这个想法我先搁着,去看留言,留言都是静态的,唉!没事,继续…根目录下有个叫savegb.asp的文件,想想也知道是保存留言的文件,那就看他的过滤吧,片断如下:  
if request.form("code")="" then ‘验证码为空就“弹死你”response.write"<script language=javascript>alert('请填写您的名字');this.location.href='javascript:history.go(-1)';</script>"response.endend ifif request.form("content")="" then ‘你不写留言内容就剥夺你的发言权response.write"<script language=javascript>alert('请填写留言内容');this.location.href='javascript:history.go(-1)';</script>"response.endend ifset rs=server.createobject("adodb.recordset") ‘满足以上2个要求才让你去见数据库sql="select * from gb"rs.open sql,conn,3,3  
唉!文件头也就个conn.asp没什么防止或者过滤的,这样就造成2个结果:第1、直接写一句话得到shell。第2、跨站脚本攻击咯!先来看第一个办法,写一句话(前提数据库里没干扰),如图1 

然后我们点击“提交”,这样我们的一句话就输入到asa的数据库了。我是小旋风,asa格式的文件不解析的,所以我换成asp,但是原理是一样的,我们来看图2

这样我们就成功的把一句话插到了数据库里,接着就是提权什么的。第2个,我们来看xss,由xss大家要马上想到有不有办法拿到webshell,比如利用管理员的session进行操作什么的,跨站得到webshell,某牛人写过,我们来看后台吧,后台验证的还行,至少我们的万能钥匙不再万能。片段如下:  
TheAdmin=Replace(Trim(Request("User")),"'","") ‘过滤了空格,并把单引号转换成空格Pass=Replace(Trim(Request("Pass")),"'","") ‘和上面一样的过滤。Set Rs=Server.CreateObject("Adodb.RecordSet")Sql="Select * From Admin Where admname='"&TheAdmin"'" 再进入数据库操作Rs.Open Sql,Conn,1,3If Rs.eof thenResponse.Write "<Script Language='javascript'>alert('对不起,此用户不存在!');window.location.href='Login.asp';</Script>"Response.EndElsePass1=Rs("admpass")If Pass1=Md5(Pass) thenSession("admin")=Rs("admname")Response.Redirect "Main.asp"ElseResponse.Write "<Script Language='javascript'>alert('对不起,密码错误!');window.location.href='Login.asp';</Script>"End IfEnd IfRs.CloseSet Rs=NothingConn.CloseSet Conn=Nothing  
End If  
没戏看了,单引号过滤了就被掐住了我们进后台的办法之一。继续看代码,思路现在整理一下,方便大家理解吧。留言过滤不严---à一句话入库---àxss---à后台验证很好,无法进入-à找到配置文件的文件头查看。2、利用漏洞1顺藤摸webshell我们用默认密码进去看看后台,啥白盒黑盒一起测试,测到webshell就是好tester,呵呵,废话不继续了,小心编辑扣小费,我们来看图3 

Tag:
网友评论

<