路径遍历,从 url 浏览器栏访问服务器文件目录,ASP.NET 2.0 中的 Web 应用程序构建

Path traversal, access server files directory from url browser bar, web App build in ASP.NET 2.0

提问人:developer_aleksi 提问时间:11/6/2023 最后编辑:developer_aleksi 更新时间:11/6/2023 访问量:40

问:

我有一个使用 ASP.NET 2.0 设计的旧项目,使用 IIS 8.0 编写 VB 9.0 用户登录后,通过浏览器的 URL 栏,用户可以访问服务器的文件并下载它们。

此 Web 应用程序的一项操作是授予用户从唯一路由(C 中的文件夹,服务器)下载某些文件或文件夹的权限。

更具体地说:

在主页上时:https://xx.xx.xx.xx./My_app/operations/home.aspx

如果用户键入:https://xx.xx.xx.xx/My_app/operations/ManageFiles/FileDownload.aspx?filename=..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\Windows\System32\drivers\etc\hosts

然后具有访问权限并下载文件。

此外,此弹出窗口正在通过 JavaScript 运行:operations/ManageFiles/FileDownload.aspx?

在网上搜索后,我尝试了不同的方法。

- 在IIS管理器中重写入站规则

·在 Web 配置中添加:System.Web 中所需的验证=true

- 在上面的文件中添加 JavaScript 代码,其中包括弹出窗口:

`if (user_input.indexOf('\0') !== -1) {
return respond('Access denied');
}`

- 在 Visual Basic 中添加验证代码:

    ' 
    Dim path2 As String = Request.QueryString("filename")
    
    First Validation
    If path2.IndexOfAny(Path.GetInvalidFileNameChars()) > -1 Then
        Throw New FileNotFoundException(“Error”)
    End If

    ' Second Validation
    If path2.IndexOf(Chr(0)) <> -1 Then
        Throw New ApplicationException("Access Denied")
    End If

    ' Third Validation
    If String.IsNullOrEmpty(path2) Then
        Throw New ApplicationException("Error, something is wrong...")
    Else
        ' Url decode to reveal encoded attempts e.g. '%2f' (/) or '%2e%2e%2f' (../)
        Dim decodedPath As String = HttpUtility.UrlDecode(path2)

        Try
            If decodedPath.Contains("/") Then
                Throw New Exception()
            End If

            If decodedPath.Contains("\") Then
                Throw New Exception()
            End If

            If decodedPath.Contains("$") Then
                Throw New Exception()
            End If

            If decodedPath.Contains("..") Then
                Throw New Exception()
            End If

            If decodedPath.Contains("?") Then
                Throw New Exception()
            End If
        Catch ex As Exception
            Throw New Exception()
        End Try
    End If`

上述这些尝试都对我不起作用,用户仍然可以访问敏感文件。

我无法确定,在项目中的哪个位置添加验证,以及上述潜在解决方案是否有效。我需要你的建议。

先谢谢你。

vb.net URL IIS-8 ASP.NET-2.0 目录遍历

评论

1赞 Lex Li 11/6/2023
他们都无济于事。转到原始代码库以添加另一层验证,以限制该页面中可以访问的文件夹(允许列表)。此外,由于它有如此典型的安全隐患,您可以聘请安全专业人员来帮助审查代码以消除其他典型问题。FileDownload.aspx

答: 暂无答案