一、什么是路径遍历漏洞
路径遍历漏洞允许攻击者通过构造特殊的输入,绕过应用程序的安全限制,访问或执行服务器上的任意文件或目录。这些文件可能包括应用程序代码和数据、后端系统的凭据以及敏感的操作系统文件等。
二、文件路径遍历,简单情况
filename=../../../etc/passwd
三、文件路径遍历,被绝对路径旁路阻塞的遍历序列
filename=/etc/passwd
四、文件路径遍历,非递归剥离的遍历序列
filename=....//....//....//etc/passwd
五、文件路径遍历,用多余的 URL 解码剥离的遍历序列
filename=..%252f..%252f..%252fetc/passwd
六、文件路径遍历,验证路径的开头
filename=/var/www/images/../../../etc/passwd
七、文件路径遍历,使用空字节绕过验证文件扩展名
filename=../../../etc/passwd%00.png
八、如何防止路径遍历攻击
- 严格输入验证:对用户输入的文件路径进行严格的验证和过滤,确保只接受合法的文件路径。可以使用正则表达式、白名单等方式来限制用户输入
- 使用安全的文件操作函数:避免使用不安全的文件操作函数,如fread、fwrite、file_get_contents等。这些函数直接将用户输入作为文件路径,容易引发路径遍历漏洞。应该使用更加安全的文件操作函数,如fopen、fclose、fgets等,并在打开文件之前进行充分的检查
- 路径规范化:在构建文件路径之前,对用户输入进行规范化处理。例如,将路径分隔符替换为标准分隔符(如使用斜杠“/”而不是反斜杠“\”),并确保路径的开始点在应用程序的根目录之下
- 设置安全的文件和目录权限:对敏感文件和目录设置最小必要的权限,只允许文件所有者或特定的用户组访问这些文件。同时,定期检查文件和目录的权限设置,确保没有不必要的权限被赋予
- 运行在沙盒环境中:将应用程序运行在沙盒环境中,限制其对系统资源的访问权限。这样即使应用程序存在路径遍历漏洞,攻击者也无法利用该漏洞执行恶意代码或访问敏感文件