路径遍历(一):PortSwigger靶场通关笔记

2024-07-19 245 0

写在前面

这篇文章主要是对作者关于portswigger提供的路径遍历的相关lab的通关笔记
通过这些lab需要的工具是burpsuite

路径遍历是什么

路径遍历也称为目录遍历,这种漏洞允许攻击者读取运行应用的服务器上的任意文件,在某些情况下,攻击者还可以修改应用的数据或行为,并最终获取服务器的所有控制权
举个攻击者通过路径遍历读取任意文件例子:
假设当前访问的页面通过以下代码加载了一张图片
<img src="https://www.freebuf.com/loadImage?filename=218.png">
在实际的服务器上,218.png存放在/var/www/images/218.png
如果该网站存在目录遍历漏洞,攻击者就可以通过构造以下url访问/etc/passwd文件
http://hostname/loadImage?filename=../../../etc/passwd

lab1:直接目录遍历读取文件

lab1地址:File path traversal, simple case
最理想的状态下,应用一点关于目录遍历的防护措施都没有,直接进行遍历即可,攻击者只需要对文件存放的实际位置进行猜测验证即可,拿到正确路径就可以读文件
lab是一个商店,加载了许多图片
路径遍历(一):PortSwigger靶场通关笔记插图
在burpsuite中随便选一个发送到repeater中
路径遍历(一):PortSwigger靶场通关笔记插图1
读取目标为/etc/passwd,猜测文件路径,逐渐添加../即可,只需要向上返回到根路径即可读取到文件
路径遍历(一):PortSwigger靶场通关笔记插图2

lab2:绝对路径绕过对目录遍历序列的过滤

lab地址:File path traversal, traversal sequences blocked with absolute path bypass某些情景下,应用会将用户的输入中包含的目录遍历序列(即../)顾虑,这种情况下,如果应用允许用户输入绝对路径,则可以绕过该防御方式
路径遍历(一):PortSwigger靶场通关笔记插图3
路径遍历(一):PortSwigger靶场通关笔记插图4

lab3:绕过非递归目录遍历序列过滤

Lab地址:Lab: File path traversal, traversal sequences stripped non-recursively
某些情景下,应用会对用户的输入进行非递归的目录遍历序列过滤,这种情况下,对目录遍历序列进行重写即可绕过,譬如:....//
路径遍历(一):PortSwigger靶场通关笔记插图5
路径遍历(一):PortSwigger靶场通关笔记插图6

lab4:url编码绕过目录遍历序列过滤

lab地址:File path traversal, traversal sequences stripped with superfluous URL-decode
有些场景下,服务器可能会将路径遍历序列过滤后在将输入传递给文件系统api,这种情况下可以通过对../进行url编码来绕过,譬如:
../=> ..%2f=> ..%252f
%25%的url编码
某些情况下,其他非标准的url编码方式也可以,比如
%c0%af解码后是0xc0 0xaf,在utf-8字符集下表示/
%ef%bc%8f解码后是U+FF0F,在 Unicode 中是全角的/字符
路径遍历(一):PortSwigger靶场通关笔记插图7
路径遍历(一):PortSwigger靶场通关笔记插图8

lab5:绕过指定预期文件夹的过滤

lab5地址:Lab: File path traversal, validation of start of path
某些场景下,应用可能要求用户提供的文件名必须包含预期的base目录,这种情况下,我们还是可以使用../组合来进行目录遍历,我认为这个lab甚至比基础lab还要简单,因为这意味着不用猜文件实际的位置了
路径遍历(一):PortSwigger靶场通关笔记插图9

lab6:绕过指定请求文件后缀名的过滤

lab6地址:File path traversal, validation of file extension with null byte bypass
在某些场景下,应用可能要求用户提供的文件名以特定的后缀结尾,这时候可以考虑通过%00空字符进行一个绕过
该lab指定的后缀名是.png,我们直接将其用%00进行截断,成功读取
路径遍历(一):PortSwigger靶场通关笔记插图10

如何防止路径遍历

最有效的方式是避免将用户的输入传递给文件系统api,如果无法避免的要将用户输入传递给文件系统api,可以考虑建立下方的两层防护:

  1. 校验用户的输入,最佳的实践方式是有一个预设的文件白名单,直接比较输入是否在允许的白名单上即可,任何不是对白名单上的文件的请求都被拒绝。如果无法实施文件白名单,则可以设置一个字符白名单,只允许输入包含白名单中的字符

  2. 校验用户输入后,将输入和基本目录做拼接,然后使用语言提供的文件系统api规范化路径,然后比较规范化后的路径是否以基本目录开头,不是则拒绝该请求;譬如下面以python举个例子:

import os

base_directory = "/var/www/imgs"
origin_path= os.path.join(base_directory, user_input)
canonicalize_path = os.path.realpath(origin_path)
if not canonicalize_path.startswith(base_directory):
  # 进行拒绝及其他操作
  pass

4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

webpack打包站点,js文件名批量获取思路
加密对抗靶场enctypt——labs通关
【论文速读】| 注意力是实现基于大语言模型的代码漏洞定位的关键
蓝队技术——Sysmon识别检测宏病毒
内网渗透学习|powershell上线cs
LLM attack中的API调用安全问题及靶场实践

发布评论