zoukankan      html  css  js  c++  java
  • ASP代码审计学习笔记 -3.上传漏洞

    1、ASP上传过程抓包分析:

    POST /4.asp HTTP/1.1
    Host: 192.168.1.102
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
    Accept-Encoding: gzip, deflate
    Referer: http://192.168.1.102/upfile.htm
    Cookie: BMFNWNPGYIUDQDSPBJIM=LPJCJXPLUPUEWFQHYUSRFZDREVMVJBPDVCLCWBZM
    Connection: keep-alive
    Upgrade-Insecure-Requests: 1
    Content-Type: multipart/form-data; boundary=---------------------------17271789418104
    Content-Length: 630
    
    -----------------------------17271789418104
    Content-Disposition: form-data; name="act"
    
    upload
    -----------------------------17271789418104
    Content-Disposition: form-data; name="upcount"
    
    1
    -----------------------------17271789418104
    Content-Disposition: form-data; name="filepath"
    
    /upload
    -----------------------------17271789418104
    Content-Disposition: form-data; name="file1"; filename="1.jpg"
    Content-Type: image/jpeg
    
    111111111111111111111111111111111111
    -----------------------------17271789418104
    Content-Disposition: form-data; name="Submit"
    
    ¡¤ Ìá½» ¡¤
    -----------------------------17271789418104--
    

     

    2、利用方法

    1.路径截断上传漏洞 %00 filepath截断上传   /upload/a.asp  

    修复方法:锁定上传路径   if filepath="upload" then filepath="img" end if 

    2.filetype上传漏洞,修改filetype绕过上传    Content-Type: image/jpeg

    3.过滤不全aspasacercdxhtr

    防御办法:使用白名单如jpggifrar

    4. IIS6的目录解析漏洞如/a.asp/a.jpg下面的jpg会当asp执行

    防御办法:不允许客户自建目录或者目录名不能包含“.”字符

    5. IIS6的文件名解析漏洞如a.asp;a.jpg名字包含分号的jpg会当asp执行

    防御办法:文件名不能包含“;”字符

    6.替换漏洞

    7.二次上传漏洞主要是利用逻辑漏洞,比如无惧无组件上传代码:

    fileExt=lcase(Mid(ofile.filename,InStrRev(ofile.filename,".")+1))   

    arrUpFileType=split(UpFileType,"|")'获得允许上传的所有文件扩展名   

    for i=0 to ubound(arrUpFileType)'判断上传的文件扩展名是否在允许的范围内   

    if fileEXT=trim(arrUpFileType(i)) then   

    EnableUpload=true   

    exit for

    end if   

    双文件上传,状态为true,可以上传

    8.小数点或空格被忽视,这个也是利用了win系统特性了,比如a.asp.a.asp空格、a.php.

    绕过黑名单的过滤

    防御办法:使用自己的扩展名来代替

    9.超长文件名截断文件后缀,各系统版本的超长文件名长度可能各不相同,最常见的是应用在本地包含漏洞方面,由于php新版过滤了%00,所以用 a.php?files=../../../../../../../../../etc/passwd…………………………………(N个点).html,推荐用“.”和“/”或空格来试。在win:

    echo aaaa>a.asp若干个空格.gif

    dir a.asp

    2010-03-15 17:41 2,852 a.asp

    防御办法:对文件名长度进行限制

    10.只校验了文件头和文件完整性

    有的上传程序校验文件头,并只允许上传图片文件类型且验证图片文件完整性(仅伪造文件头还是不行),但没有验证文件后缀,也没有强制更改上传文件的后缀。我们可以新建一个几kb大小以内的jpg图片文件(颜色填充),然后用ue以十六进制打开文件,在文件内容末尾加些空格后再加上一句话木马< ?fputs(fopen("c.php","w"),")?>存为 aaa.php上传。如果有验证文件后缀,也可以结合以上方法绕过文件的后缀验证。 

    防御办法:对文件名进行判断即可

    11. SSI文件上传漏洞

    上传内容为 <!--#includ file="conn.asp"--> shtml 文件

    conn.asp 就一览无遗 , 直接请求这个 shtm 文件 . 数据库路径也就得到了

    其作用是将 "conn.asp" 内容拷贝到当前的页面中 , 解析 :<!--#includ file="conn.asp"--> 就是一条 SSI 指令 . 当访问者来浏览时 , 会看到其它 HTML 文档一样显示 conn.asp 其中的内容 .

    http://baike.baidu.com/view/31870.htm

    防御办法:使用白名单如jpggifrar

    3、如何上传才能安全?

    formPath=upload.form("filepath")
     ''在目录后加(/)
     select case formPath
     case "img"
     formPath="img"
     case "file"
     formPath="file"
     case "media"
     formPath="media"
     case Else
       HtmEnd "非法路径!"
     end select
     formPath=formPath&"/"
     
    
    
    set file=upload.file(formName)  ''生成一个文件对象
     if file.FileSize>0 then         ''如果 FileSize > 0 说明有文件数据
     fileext=lcase(right(file.FileName,4))
      '检查文件扩展名是否合法
      select case fileext
        case ".jpg"
        fileext=".jpg"
        case ".gif"
        fileext=".gif"
        case ".bmp"
        fileext=".bmp"
        case ".rar"
        fileext=".rar"
        case ".mp3"
        fileext=".mp3"
        case ".wma"
        fileext=".wma"
        case ".wmv"
        fileext=".wmv"
        case Else
        HtmEnd "非法文件扩展名!"
      end select
      randomize
      ranNum=int(900*rnd)+100
      ranNum=year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum
      file.SaveAs Server.mappath(formPath&ranNum&fileext)   ''保存文件
      response.write file.FilePath&file.FileName&" ("&file.FileSize&") => "&formPath&ranNum&fileext&" 成功!<br>"
      file.FileName=ranNum&fileext
      response.write file.FileName
    
      iCount=iCount+1
     end if
     set file=nothing
    

      

    关于我:一个网络安全爱好者,致力于分享原创高质量干货,欢迎关注我的个人微信公众号:Bypass--,浏览更多精彩文章。

  • 相关阅读:
    yolo2 anchor选择校招总结
    rfcn校招总结
    cascade rcnn
    sort论文和代码解读
    重要的观点
    代办项
    stixel上边缘
    resnet densenet
    最小二乘法和线性回归
    逻辑回归原理
  • 原文地址:https://www.cnblogs.com/xiaozi/p/5808796.html
Copyright © 2011-2022 走看看