论坛: 菜鸟乐园 标题: 动网--乾坤大挪移大法 复制本贴地址    
作者: newmyth21 [newmyth21]    论坛用户   登录
――――――动网--乾坤大挪移大法――――――-          ¥转载¥


动网--乾坤大挪移大法

漏洞来源:DVBBS V6.0,V6.1 For 任何版. 
发现漏洞日期:2003-12-21
测试目标: 内部局域网机子.win2k,DVBBS For ACCESS V6.1

开场白:
  首先,这不是一篇小说,这是一篇技术性的文章,一个关于怎么发现这个脚本漏洞,利用漏洞,以及体现它最大利用价值的文章.
当然最后我们也给出了安全补丁。这个漏洞,比AK47利害,他能杀人于无形中。 网管根本找不到任何日志。其最终结果,我们可以摧毁
他的主页,让论坛关门,也可以直接下载他的数据库。这就是我今天要为大家介绍的:动网--乾坤大挪移大法之要饭版.
  乾坤大挪移大法的秘诀和一般的脚本秘诀不一样,他深藏在动网的两个脚本文件当中,这里我只介绍一个就行了。另一个文件大家看了
这篇文章自然就明白了.当然自己也能找到得另一个文件咯.

一、寻找乾坤大挪移大法

  打开动网论坛脚本文件:MYMODIFY.ASP让我们来找吧.
  代码如下:

......
sub update()
......

'对上传头象进行过滤与改名
If Cint(Dvbbs.Forum_Setting(7))=1 Then
    On Error Resume Next
    dim objFSO,upfilename,newfilename
    dim upface,memberid
    set rs=conn.execute("select userid,face from [user] where userid="&Dvbbs.userid)
    memberid=rs(0)
    upface=trim(rs(1))
    newfilename=""
upfilename=split(upface,"/")
if ubound(upfilename)=1 and upfilename(0)="uploadFace"  then
  if  instr(upfilename(1),"_")=0 then
  newfilename="uploadFace/"&memberid&"_"&upfilename(1)
  Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
  if objFSO.fileExists(Server.MapPath(upface)) then
    objFSO.movefile ""&Server.MapPath(upface)&"",""&Server.MapPath(newfilename)&""
  end if
  If Err.Number = 0 Then
    Conn.Execute("update [user] set face='"&replace(newfilename,"'","")&"' where userid="&Dvbbs.userid)
  end if
  set objFSO=nothing
  end if
end if
rs.close
set rs=nothing
end if
'对上传头象进行过滤与改名结束
'****************
end sub
.....
让我们一步一步来分析这段代码.
来看:
  memberid =rs(0) 取出用户库中的ID号.
  upface=trim(rs(1)) 取出自定义头像的路径.
  upfilename=split(upface,"/") 用"/"符号把upface分开.
  if ubound(upfilename)=1 and upfilename(0)="uploadFace"  then
    如果upfilename被分成两部分,以及第一部分的值为:"uploadFace"
    if  instr(upfilename(1),"_")=0 then
    如果upfilename的第二部分不包含"_"符号
    newfilename="uploadFace/"&memberid&"_"&upfilename(1)
    newfilename就等于uploadFace/+用户的ID号+"_"+upfilename的第二部分.
    if objFSO.fileExists(Server.MapPath(upface)) then
    如果检测到upface这个路径的文件存在的话.
好,最关键的地方来了。这就是移动的核心代码:
    objFSO.movefile ""&Server.MapPath(upface)&"",""&Server.MapPath(newfilename)&""
    把upface变量中的文件移动并改名为newfilename变量中的文件.
    Conn.Execute("update [user] set face='"&replace(newfilename,"'","")&"' where userid="&Dvbbs.userid)
    更新库中face字段的值.
OK,代码分析完毕.大家应该看明白了。如果没有看明白,就跳转到:"让我们一步一步来分析这段代码"继续看.

二、修练乾坤大挪移大法

  也许你还没有看出这段代码有什么不对的地方.好,现在让我来为你解释吧.
  大家都知道在DOS中 "." 和".."的用法吧.在IE和中一样可以使用.
  如: http://ip/abc/../a.asp = http://ip/a.asp的.
  并且"/"和"\"在IE中输入的时候没有什么区别.
  不相信,你试试:http://ip/a.asp和http://ip\a.asp.都是指向的一个页面.
 但是动网的人只判断了"/"符号,以"/"符号作为分隔符.误解了法佛,让乾坤大挪移流传下来.
  现在我们来举个例子.
  如果在库中的face字段为:uploadFace/.\..\index.asp 那么当我们执行这段代码的时候会发生什么?
  首先:upfilename被"/"分成两部分.
  第一部分:upfilename(0)=uploadFace
  第二部分:upfilename(1)=.\..\index.asp
  看着代码我们往下走.
  if ubound(upfilename)=1 and upfilename(0)="uploadFace"  then
  条件满足.请注意:uploadFace中的F是大写的.
  if  instr(upfilename(1),"_")=0 then
  条件满足.
  newfilename="uploadFace/"&memberid&"_"&upfilename(1)
    假如我们的用户ID号为:9 那么:
    newfilename="uplodFace/9_.\..\index.asp"
    实际上是等同于:newfilename="uploadFace/index.asp"
    if objFSO.fileExists(Server.MapPath(upface)) then
     upface 是等于 uploadFace/.\..\index.asp
        实际上直接等同于:index.asp的.
  当然检测到这个文件的.然后下面他就开始移动文件了。看代码.
  objFSO.movefile ""&Server.MapPath(upface)&"",""&Server.MapPath(newfilename)&""
  看uploadFace/..\..\index.asp移动并改名为:uplodFace/9_.\..\index.asp
  经过我们的转换就是:把index.asp移动到uplodFace/index.asp
看明白了吧!好,修练成功,我们来利用移动大法.

三、运用乾坤大挪移大法,杀人于无形.

先在动网的论坛中注册一个账号.然后我们点击菜单.用户控制面板->基本资料修改.
好了,现在我们就在
  自定义头像地址: 后面的输入框中把默认的:userface/image1.gif 改成:uploadFace/.\..\index.asp
然后点击更新.输入的东西第一次会保存在数据库当然.还不会移动。因为修改的值还没有被读出来。
我们再次点进基本资料修改。再次输入:uploadFace/.\..\index.asp呵呵,这次你再进主页就打不开了。
因为已经被移动了uploadFace目录下去了.如果在uploadFace目录下有index.asp移动会失败。不会自动覆盖.
有一点值得提醒的就是如果我们把conn.asp移动到uploadFace目录下,那么打开 http://ip/dvbbs/uplodFace/conn.asp应该报出数据库绝对路径。不过这个CONN.ASP本身就存在问题,直接输入http://ip/conn.asp有错误提示,所以我COPY过去也失败了。
因为这个错误在报数据库路径之前。哎。。。如果能得到数据库绝对路径该多好啊。
大家想想看有没有什么办法移动硬盘上的文件,这个我还没有去研究
时间太紧了!发现方法的朋友请第一时间通知我哟!



四、乾坤大挪移大法,生可生,灭可灭

我们为这个漏洞打个补丁吧,因为危害太多了。以POST提交数据,管理员查不到日志,并且可以移动动网论坛中的任何文件.
分析一下这个漏洞造成的原因就是:没有过滤好"\"符号.
  我们把这句代码:if  instr(upfilename(1),"_")=0 then
  改成
  if instr(upfilename(1),"_")=0 and instr(upfilename(1),"\")=0 then
 看就是判断upfilename中不要包括"\"符号. 
  好这样,补丁打好了!
  同时在这里我还发现了可以输入HTML语句大家自己测试一下.
  如在自定义路径输入框中输入:uploadFace/mm.jpg><b>要饭</b
  呵呵没有过滤好,点击更新,再次返回到基本资料你会看到有要饭两个字在上面变成粗体了。至于怎么利用。
 地球人都知道,我就不说了。今天主要是为大家介绍这个移动大法.再闪人之前,为大家送了一个好东东。
 请注意看光盘中的动画文件.有本教程的演示实例! 

五、结束闪人.
 
  本漏洞对动网论坛的危害是相当大的。可以移动论坛中的任何文件到uploadFace目录下. 
  请大家不要利用本漏洞破坏网上论坛。我这只是做了一个测试!并没有去破坏任何数据.
  希望动网官方的人员及时打上补丁.





地主 发表时间: 04-02-14 02:57

回复: newmyth21 [newmyth21]   论坛用户   登录


B1层 发表时间: 04-02-14 04:14

回复: gebishamo [gebishamo]   论坛用户   登录
顶顶!

B2层 发表时间: 04-02-14 08:14

回复: lhh2003 [lhh2003]   论坛用户   登录


B3层 发表时间: 04-03-07 00:29

回复: zyyyz [zyyyz]   论坛用户   登录
谢谢老大

B4层 发表时间: 04-03-19 12:49

论坛: 菜鸟乐园

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号