作者:小帥(xsser)@[0.S.T]
本文已发表在《黑客手册》第4期,转载请注明出处,或以超链接方式注明:http://blog.0kee.com/xiaoshuai小帥'sblog
很久没去asp300溜达了,不去总觉得的对不起这个发布站的流量,也对不起黑客手册那么多读者的强烈要求(别扔鸡蛋!扔钱!),那好,既然牛都吹起来了,我不得不冒着生命危险看看代码吧,反正我下载下来的时候就觉得很伟大,这个系统很伟大,他吹的比我还大,好好,我们看他怎么说的:88red生成htm静态页面企业建站系统V3.0经过精心打造正式推出,集合了网站地图、企业新闻中心、企业产品、搜索、客户留言、下载、投票系统等等功能,基本涵盖了一个企业网站所需要的基本功能。其生成静态页面的功能为广大企业网站优化搜索引擎SEO,提供了最大的帮助。系统设计了新的美工,更加贴近企业网站效果。我们用事实说话。1、未过滤的留言版打开目录后发现conn.asp、config.asp等文件,那就看看吧,首先看config.asp里没有什么特别的,conn.asp里容错了(就是防止暴库了),没戏?当然有,我们看下conn.asp:
<%onerrorresumenextdimconndimconnstrdimdbdb="data/qiyedata.asa"Setconn=Server.CreateObject("ADODB.Connection")connstr="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&Server.MapPath(db)conn.Openconnstr%>
顺藤摸…乱摸吧,摸到啥就是啥,我摸到了数据库,还是asa的,我先想到了一句话这个东西,一句话?什么东西能和一句话连在一起呢?怎么让他入库呢?用户、留言、发布等地方,我看了一下根目录都是静态的,想想html注入行不?这个想法我先搁着,去看留言,留言都是静态的,唉!没事,继续…根目录下有个叫savegb.asp的文件,想想也知道是保存留言的文件,那就看他的过滤吧,片断如下:
ifrequest.form("code")=""then‘验证码为空就“弹死你”response.write"<scriptlanguage=javascript>alert('请填写您的名字');this.location.href='javascript:history.go(-1)';</script>"response.endendififrequest.form("content")=""then‘你不写留言内容就剥夺你的发言权response.write"<scriptlanguage=javascript>alert('请填写留言内容');this.location.href='javascript:history.go(-1)';</script>"response.endendifsetrs=server.createobject("adodb.recordset")‘满足以上2个要求才让你去见数据库sql="select*fromgb"rs.opensql,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")),"'","")‘和上面一样的过滤。SetRs=Server.CreateObject("Adodb.RecordSet")Sql="Select*FromAdminWhereadmname='"&TheAdmin"'"再进入数据库操作Rs.OpenSql,Conn,1,3IfRs.eofthenResponse.Write"<ScriptLanguage='javascript'>alert('对不起,此用户不存在!');window.location.href='Login.asp';</Script>"Response.EndElsePass1=Rs("admpass")IfPass1=Md5(Pass)thenSession("admin")=Rs("admname")Response.Redirect"Main.asp"ElseResponse.Write"<ScriptLanguage='javascript'>alert('对不起,密码错误!');window.location.href='Login.asp';</Script>"EndIfEndIfRs.CloseSetRs=NothingConn.CloseSetConn=Nothing
EndIf
没戏看了,单引号过滤了就被掐住了我们进后台的办法之一。继续看代码,思路现在整理一下,方便大家理解吧。留言过滤不严---à一句话入库---àxss---à后台验证很好,无法进入-à找到配置文件的文件头查看。2、利用漏洞1顺藤摸webshell我们用默认密码进去看看后台,啥白盒黑盒一起测试,测到webshell就是好tester,呵呵,废话不继续了,小心编辑扣小费,我们来看图3
当前1/2页12下一页阅读全文