• 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

  • 相关阅读:
    LINQ 详解
    oracle下查询的sql已经超出IIS响应时间
    IOC应用之 Ninject
    JSONP ---------跨域
    国内各大互联网公司相关技术站点2.0版 (集合腾讯、阿里、百度、搜狐、新浪、360等共49个)
    IO多路复用,以socket为例
    socket机制下实现的多用户与服务器交互
    在一个进程中定义多个线程
    基于tcp的socketserver,即tcp的多线程
    基于upd的socketserver,即udp的多线程
  • 原文地址:https://www.cnblogs.com/xiaozi/p/7283912.html
Copyright © 2020-2023  润新知