zoukankan      html  css  js  c++  java
  • ASP代码审计学习笔记 -5.文件下载漏洞

    文件下载漏洞

    漏洞代码:

    <%   
    function download(f,n)   
    on error resume next   
    Set S=CreateObject("Adodb.Stream")   
    S.Mode=3   
    S.Type=1   
    S.Open   
    S.LoadFromFile(f)   
    if Err.Number>0 then   
    Reaponse.status="404"   
    else   
    Response.ContentType="application/octet-stream"   
    Response.AddHeader "Content-Disposition:","Attachment;filename="&n   
    Range=Mid(Request.ServerVariables("HTTP_RANGE"),7)   
    
    if Range="" then   
    Response.BinaryWrite(S.Read)   
    else   
    S.Postion=Clng(Split(Range,"-")(0))   
    Response.BinaryWrite(S.Read)   
    end if   
    End if   
    End function   
    dim filename   
    filename=request("filename")
    filename=filename&".asp"
    call download(server.MapPath(filename),filename)   
    %> 

     MapPath 的 Path 参数中不允许字符 '..',需要启用父路径(IIS6.0出于安全考虑,这一选项默认是关闭的。

    漏洞利用:

     漏洞修复:

    如果存在.. 就结束脚本,禁止跨目录进行操作

    If InStr(filename,"..")>0 Then
    Response.write "禁止跨目录操作!"
    response.end
    End IF

    错误处理1:

    filename=Replace(filename, "../", "") '替换../为空 
    filename=Replace(filename, "./", "") 

    代码对../和./进行过滤用来防止目录跳转,但可以通过构造参数饶过检测.由于检测替换只进行一次可以使用....//代替上级目录,程序替换后....//变成../ 

    攻击代码示例:filename=.....///sql.asp

    错误处理2:

    If InStr(filename,"../")>0 Then
    Response.write "禁止跨目录操作!"
    response.end
    End IF

    代码对../进行检测,但是忽略了对..的情况,在windows下,..也可实现跨目录。

    攻击代码示例:filename=..sql.asp

  • 相关阅读:
    互联网架构的三马车
    云时代架构读后感
    支付宝架构师眼里的高并发架构
    支付宝架构
    架构层级的“开闭原则”2
    架构层级的“开闭原则”1
    互联网架构微服务
    关于第三方支付
    分布式架构中数据一致性常见的几个问题
    Java多线程学习笔记二
  • 原文地址:https://www.cnblogs.com/xiaozi/p/7283912.html
Copyright © 2011-2022 走看看