提问者:小点点

HP Fortify File.Create 引发路径操作漏洞


我尝试了许多不同的方法fileInfofilestream等…无法绕过File. Create(DirName

DirName=ConfigurationManager.AppSettings("DirectoryName")
Dim fileName As String = PatientLastName & "_" & PatientFirstName & "_" & CurrentPatEntityID & ".pdf"
For Each c In Path.GetInvalidFileNameChars()
    If fileName.Contains(c) Then
        fileName = fileName.Replace(c, String.Empty)
    End If
Next

Dim stream As FileStream = File.Create(DirName & fileName)
stream.Write(FinalContents, 0, FinalContents.Length)
stream.Flush()
stream.Close()
stream.Dispose()

共1个答案

匿名用户

该漏洞似乎与路径遍历攻击有关。

路径遍历攻击旨在访问存储在 Web 根文件夹外部的文件和目录。通过浏览应用程序,攻击者会寻找存储在 Web 服务器上的文件的绝对链接。通过操作引用文件的变量,使用“点-点-斜杠(../)“序列及其变体,可以访问存储在文件系统上的任意文件和目录,包括应用程序源代码、配置和关键系统文件,受系统操作访问控制的限制。攻击者使用“../“ 序列向上移动到根目录,从而允许在文件系统中导航。

这个描述来自OWASP。(进一步信息:https://www.owasp.org/index.php/Path_Traversal)

我假设PatientLastName,PatientFirstName变量在用户(攻击者)的控制下。这意味着我们不能信任这个变量。

还让我分享一些关于GetInvalidFileNameChars函数的信息。

 The following characters are invalid in a path: 
Char    Hex Value 
",      0022 
<,      003C 
>,      003E 
|,      007C  

for循环查找这些字符,因为我们不能在Windows操作系统的文件名中使用这些字符之一。但是使用反斜杠似乎没有障碍 ( \ ).

假设 PatientLastName 变量包含 “..\ ..\ ..\测试”。因此文件名变量类似于“..\ ..\ test_DATA_DATA.pdf“ .当您尝试使用 File.Create(目录名称)创建该文件时

为了缓解,您也可以将反斜杠替换为空( ../../ 是 .. 的编码形式。\ ..\ !也请考虑一下)。Fortify可以再次将此代码标记为易受攻击,但这次将是误报。

更多信息,请阅读OWASP文件系统文章(https://www.owasp.org/index.php/File_System )