美文网首页
ASP.NET-漏洞处理-文件下载

ASP.NET-漏洞处理-文件下载

作者: 柠檬正在努力 | 来源:发表于2020-03-31 16:06 被阅读0次

用于外网的允许匿名登陆的网址是比较容易出现漏洞的网址,总结一下新处理的两个漏洞

一、文件下载漏洞处理

原因:

某客户报网络安全漏洞,是系统自身渗透结果,通过_VIEWSTATE获取了加密前的文件下载URL,修改其中的url参数可读取任意文件,如读取了某盘下的***文件

漏洞危害:

高危

修复建议:

对读取文件类型进行限制

分析:

该文件下载的页面是作为打开和下载附件使用的,在不影响原有功能的基础上进行修改,单单对文件类型进行限制的话第一是限制的类型比较多,第二是影响了原有什么文件类型都可以上传的功能,故提出解决方法是通过附件表建立用户和上传附件的一一对应关系,根据FileID和FilePath进行判断,只有在两者都符合的情况下才可以允许下载,这样子就可以达到对可下载文件进行限制的要求了。

''' <summary>
''' 附件验证是否可下载,True为可下载,False为不可下载
''' </summary>
''' <param name="AttID">附件ID</param>
''' <param name="Path">地址</param>
''' <returns></returns>
Private Function ExistAttFile(ByVal AttID As String, ByVal Path As String) As Boolean
    Dim sql As New StringBuilder
    sql.AppendFormat("select IsExists=count(1) from [dbo].[FileAtt] where ID='{0}' and FilePath='{1}'", ID, Path)
    Dim dt As DataTable
    Try
        dt = SqlData.ExecuteDataset(ioCom.ConnectString, CommandType.Text, sql).Tables(0)
    Catch ex As Exception
        '错误检测
        Log.WriteLog(ex.Message)
        Log.WriteLog(Now.ToString & ":Error on StoredProcedure ExistAttFile " & vbCrLf)
        Return False
    End Try
    If dt.Rows.Count > 0 Then
        If dt.Rows(0)("IsExists") <> "0" Then
            Return True
        Else
            Return False
        End If
    Else
        Return False
    End If
End Function

随后在附件下载的函数进行预先判断即可处理该漏洞

If ExistAttFile(FileID.ToString, sPath) Then
    Response.Write("文件可以下载!")
Else
    Response.Write("文件不符合下载要求!")
End If

二、照片下载漏洞处理

原因:

某客户报网络安全漏洞,是系统自身渗透结果,通过ResID参数的遍历可以获取各人员头像

漏洞危害:

中危

修复建议:

禁止越权获取他人头像

分析:

该头像是外网使用的,但是内网也会用到这部分页面,如果禁止越权获取他人头像的话,很容易把管理员查看别人头像的功能也去掉了,如果再加个参数区分管理员什么的也比较麻烦,所以从效率的角度上提出解决方案为加密ResID参数且加入对于FileSize加密参数,在获取头像的时候才进行解密,在已经加密的基础上通过暴力破解获取其他人的加密后ResID和FileSize参数的概率是比较低的

Private Sub BindPic()
    Dim dt As New DataTable
    dt = GetPhoto(resID)
    Dim FileSize As String = "default"
    If dt.Rows.Count > 0 Then
        FileSize = dt.Rows(0)("FileSize").ToString
    End If
    imgMbPhoto.Src = String.Format("../**/**.**?**=***&ResID={0}&FileSize={1}", Code.En(resID) + "CodeEn", Code.En(FileSize))
End Sub

下面是解密过程,在加载图片的时候对参数进行解密即可

Dim ResID As Integer
Dim sFileSize As String = QueryField.GetValue("FileSize", "0")
Try
    Dim sResID As String = QueryField.GetValue("ResID", "0")
    If sResID <> "0" And Microsoft.VisualBasic.Right(sResID, 6) = "CodeEn" Then
        sResID = Microsoft.VisualBasic.Left(sResID, Len(sResID) - 6)
    End If
    sResID = IIf(String.IsNullOrEmpty(Code.De(sResID)), "0", Code.De(sResID))
    sFileSize = IIf(String.IsNullOrEmpty(Code.De(sFileSize)), "0", Code.De(sFileSize))
    ResID = Convert.ToInt32(sResID)
Catch ex As Exception
    ResID = 0
End Try
//加入FileSize验证
Dim dtSize As New DataTable
dtSize = GetPhoto(ResID)
If dtSize.Rows.Count > 0 AndAlso dtSize.Rows(0)("FileSize").ToString <> sFileSize Then
    ResID = 0
End If
//FileSize验证结束,下面是处理下载的代码体

为了安全起见把文中用到的部分代码和地址名称隐匿了,不影响理解

相关文章

  • ASP.NET-漏洞处理-文件下载

    用于外网的允许匿名登陆的网址是比较容易出现漏洞的网址,总结一下新处理的两个漏洞 一、文件下载漏洞处理 原因: 某客...

  • 任意文件查看与下载漏洞

    漏洞介绍 利用条件 漏洞危害 任意文件读取 代码形式可如下几种: 任意文件下载 直接下载: 用header()下载...

  • FLIR-AX8 任意文件下载

    FLIR-AX8 任意文件下载 一、漏洞描述 FLIR-AX8 download.php存在任意文件下载漏洞,直接...

  • ASP.NET-漏洞处理-Sql注入漏洞和XSS入侵漏洞修复

    Sql注入漏洞:Web程序中对于用户提交的参数未做过滤直接拼接到SQL语句中执行,导致参数中的特殊字符破坏了SQL...

  • 不安全的文件下载和上传

    不安全的文件下载漏洞 原理 很多网站都会提供文件下载功能,即用户可以通过点击下载链接,下载到链接所对应的文件。但是...

  • 任意文件下载

    漏洞描述:目录遍历(任意文件下载)漏洞不同于网站目录浏览,此漏洞不仅仅可遍历系统下web中的文件,而且可以浏览或者...

  • 文件上传漏洞 学习笔记

    什么是文件上传漏洞? 文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其...

  • 4.任意文件上传下载

    5、任意文件下载攻击原理及测试方法以及修复漏洞的方法:攻击原理:网站由于业务需要,提供了文件查看和文件下载的功能,...

  • CVE-2011-0624 漏洞分析

    漏洞概述 该漏洞是一个flash 在解析 swf 文件时产生的漏洞,其原因是在处理畸形 opcode 时没有进行相...

  • 文件上传与下载

    文件上传 前端页面 Action处理类 struts.xml 文件下载 前端页面 处理下载请求的action st...

网友评论

      本文标题:ASP.NET-漏洞处理-文件下载

      本文链接:https://www.haomeiwen.com/subject/ggbwuhtx.html