什么是目录遍历?
目录遍历(也称为文件路径遍历)是一个 Web 安全漏洞,允许攻击者读取运行应用程序的服务器上的任意文件。这可能包括应用程序代码和数据、后端系统的凭据以及敏感的操作系统文件。在某些情况下,攻击者可能能够写入服务器上的任意文件,从而允许他们修改应用程序数据或行为,并最终完全控制服务器。
思路来源:
考虑一个显示待售商品图像的购物应用程序。图像通过一些HTML加载,如下所示:
<img src="/loadImage?filename=218.png">
URL 采用一个参数并返回指定文件的内容。映像文件本身存储在磁盘上的位置 。要返回图像,应用程序会将请求的文件名追加到此基目录,并使用文件系统 API 读取文件的内容。在上述情况下,应用程序从以下文件路径读取:loadImage
filename
/var/www/images/
/var/www/images/218.png
应用程序不实现对目录遍历攻击的防御,因此攻击者可以请求以下 URL 从服务器的文件系统中检索任意文件:
https://insecure-website.com/loadImage?filename=../../../etc/passwd
这将导致应用程序从以下文件路径中读取:
/var/www/images/../../../etc/passwd
该序列在文件路径中有效,意味着在目录结构中提升一个级别。三个连续的序列从文件系统根目录递增,因此实际读取的文件是:../
../
/var/www/images/
/etc/passwd
在基于 Unix 的操作系统上,这是一个标准文件,其中包含在服务器上注册的用户的详细信息。
在 Windows 上,和 都是有效的目录遍历序列,检索标准操作系统文件的等效攻击将是:../
..\
https://insecure-website.com/loadImage?filename=..\..\..\windows\win.ini
简单的大小写
通过"../" 能够对目录进行遍历
ps:filename=../../etc/passwd
用绝对路径旁路阻止的遍历序列
许多将用户输入放入文件路径的应用程序都实现了针对路径遍历攻击的某种防御,而这些攻击通常可以规避。如果应用程序从用户提供的文件名中剥离或阻止目录遍历序列,则可以使用各种技术绕过防御。您可以使用文件系统根目录的绝对路径(如 )直接引用文件,而无需使用任何遍历序列。
ps:filename=/etc/passwd
总之一句话:若阻止遍历,可以尝试绝对路径读取
非递归剥离的遍历序列
您可能能够使用嵌套遍历序列,例如 或 ,当剥离内部序列时,它将恢复为简单的遍历序列。....//
....\/。当../与..\被替换成空时,上面就变成了../../,因此也可以实现遍历。
ps:filename=....//....//....//etc/passwd
遍历序列被多余的URL解码剥离
在某些上下文中,例如在 URL 路径或请求的参数中,Web 服务器可能会在将输入传递到应用程序之前剥离任何目录遍历序列。您有时可以通过URL编码,甚至双URL编码来绕过这种清理,从而产生或分别产生。
ps:filename=..%252f..%252f..%252fetc/passwd
验证路径的起点
如果应用程序要求用户提供的文件名必须以预期的基文件夹开头,例如 ,则可以包含所需的基文件夹,后跟合适的遍历序列。例如:/var/www/images
ps:filename=/var/www/images/../../../etc/passwd
使用空字节旁路验证文件的
如果应用程序要求用户提供的文件名必须以预期的文件扩展名(如 )结尾,则可以使用空字节在所需扩展名之前有效地终止文件路径。例如:.png
ps:filename=../../../etc/passwd%00.png
加密型传递的参数
filename=aW1hZ2UxLmpwZw==
参数file的数据采用Base64加密,而攻击中只需要将数据进行相应的解密即可入侵,采用一些常见、规律性的加密方式也是不安全的。
常见系统文件路径
Windows:
C:\boot.ini //查看系统版本
C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件
C:\Windows\repair\sam //存储系统初次安装的密码
C:\Program Files\mysql\my.ini //Mysql配置
C:\Program Files\mysql\data\mysql\user.MYD //Mysql root
C:\Windows\php.ini //php配置信息
C:\Windows\my.ini //Mysql配置信息
Linux:
/etc/passwd #查看用户文件
/etc/shadow #查看密码文件,如果能读取该文件说明是root权限
/etc/httpd/conf/httpd.conf #查看apache的配置文件
/root/.bash_history #查看历史命令
/var/lib/mlocate/mlocate.db #本地所有文件信息
/etc/ssh/sshd_config #ssh配置文件,如果对外开放可看到端口
/proc/self/fd/fd[0-9]*(文件标识符)
/proc/mounts文章来源:https://www.toymoban.com/news/detail-401908.html
/root/.ssh/known_hosts文章来源地址https://www.toymoban.com/news/detail-401908.html
到了这里,关于web安全之目录遍历的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!