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

  • 相关阅读:
    爬虫大作业
    数据结构化与保存
    使用正则表达式,取得点击次数,函数抽离
    爬取校园新闻首页的新闻
    网络爬虫基础练习
    综合练习:词频统计
    Hadoop综合大作业
    理解MapReduce
    熟悉HBase基本操作
    熟悉常用的HBase操作
  • 原文地址:https://www.cnblogs.com/xiaozi/p/7283912.html
Copyright © 2011-2022 走看看