IIS网站安全管理之URL路径穿越漏洞
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
路径穿越其实就是目录遍历,它可以让攻击者查看运行了存在此漏洞的应用的服务器上的任意文件,包括: 程序代码、数据; 后台系统凭证; 敏感的操作系统文件。 在某些情况下还可能允许攻击者上传文件到任意目录下(比如文件上传漏洞同时存在路径穿越),从而使得攻击者可以修改服务器的配置文件,甚至最终完全控制服务器。 1、文件、模版下载; 2、URL参数,如 file、f、path、download、filename、load 等,相关的字典网上多的是我就不列举了; 3、图片链接。 测试方法 这没什么好说的 ../ 就完事了,再不济 ..%2F。 其实要预防路径穿越漏洞的方法就是不要把用户提供的参数完全输入给文件系统的API,而是写死在代码里,限制用户只能下载指定的文件。 那如果必须要用户输入呢,可以添加下面的验证流程: 如果可能得话,验证用户输入是否在白名单列表中;如果不行,就验证用户输入是否只包含文字或数字;如果再不行,就校验用户输入是否包含 ../ ..%2F 之类的 payload 设置指定的文件路径,在拼接用户输入后获取真实的文件路径,查看其是否与预设相同,示例代码如下: import os input_path = input("请输入路径: ") full_path = os.path.realpath(os.path.join("D:\ProjectPython\\test", input_path)) # 将用户输入的路径与/etc/abc拼接成完整的路径,使用os.path.realpath()函数获取完整路径的真实路径 common_path = os.path.commonpath([full_path, "D:\ProjectPython\\test"]) # 使用os.path.commonpath()函数找到完整路径和/etc/abc的共同路径。如果共同路径为/etc/abc,则表示路径合法;否则,表示路径不合法。 if common_path == "D:\\ProjectPython\\test": print("路径合法") else: print("路径不合法")
一个简单的路径穿越 任务简报 这个实验室包含路径穿越漏洞,你要读取到 /etc/passwd 文件。 任务过程 在网站上有一些商品的图片,这些图片的src=/image?filename=48.jpg,那我们是不是可以修改它的值来查看对应的文件呢? 现在我们把 filename 的值改成 "/../../../../../etc/passwd" 看看: 修改之后它的图片就没有啦,我们看看 burp 的流量是什么: OK 成功拿下。 绝对路径绕过 有些应用会检测用户输入中是否含有 ../ 这种跨越目录的命令,但是如果它们使用的是一些函数进行目录拼接时如果你输入的是一个绝对路径,那么它们就会自动忽略你前面预设的目录,这里我使用 python 作为演示,输入正常的文件名: 此时一切安好,那我们输入带有 payload 的路径呢: 此时虽然最终执行的 /etc/passwd 但是我们的规则校验已经识别出它有问题了,在实际中并不会被执行,那么我们输入绝对路径试试 /etc/passwd,按照我们的理解,这里最后应该执行的是 /home/test/etc/passwd 这个路径,那么结果是不是这样呢,下面揭晓: 哈 傻了吧,最后的结果是 /etc/passwd 而且我们的校验规则认为这个用户输入是没有问题的,这也就使得对方的攻击成功了,他成功绕过了我们的校验。 这主要是因为,os.path.join() 函数会根据传入的参数自动拼接路径,并处理其中的目录分隔符。然而,如果传入的参数中包含了绝对路径(以根目录开始的路径),则之前的路径部分将被忽略。 那么我们接下来就在靶场中看一下吧。 任务简报 这个网站设置了一个默认的工作目录,应用程序阻止遍历序列,但将提供的文件名视为相对于默认工作目录,你要做的是读取到 /etc/passwd 文件。 任务过程 我们还是使用 ../ 试一下运行的结果。 可以看到是不行的,现在我们换成绝对路径看看 /etc/passwd。 看 和我们的演示代码是一样的结果,绝对路径绕过了它的 ../ 检测。 双写绕过 有的开发会在识别到 ../ 之后将其直接置换为空,以此对抗路径穿越,但是我们都知道,这种策略我们可以通过双写来绕过,下面我们来看看。 任务简报 这个网站会把用户提交的 ../ 剥离,你要做的是读取到 /etc/passwd 文件。 任务过程 我们还是提交一个 ../ 看看情况。 这里我们可以看到在使用 ../3.jpg 的情况下还是正常显示了图片,这说明程序就是把 ../ 给去掉了,毕竟上一层目录是不会有 3.jpg 这个文件的,那我们就开始工作吧 ....//....//....//....//....//etc/passwd。 成功绕过,收工。 URL 编码绕过 对于上面的情况,我们也可以使用 URL 编码进行绕过,有时候也可以尝试 双层 URL 编码绕过。 任务简报 这个实验室包含路径穿越漏洞,你要读取到 /etc/passwd 文件。 任务过程 还是输入 ../ 看看情况。 这里可以看到,还是和上一节一样的情况,这次我们改一下,用 ..%2F 试试。 还是不行,好好好,那我就直接双重编码。 这次应该是成了,我们直接上: payload %25%32%65%25%32%65%25%32%66%25%32%65%25%32%65%25%32%66%25%32%65%25%32%65%25%32%66%25%32%65%25%32%65%25%32%66%25%32%65%25%32%65%25%32%66%25%32%65%25%32%65%25%32%66%25%36%35%25%37%34%25%36%33%25%32%66%25%37%30%25%36%31%25%37%33%25%37%33%25%37%37%25%36%34 OK 成功绕过,下班下班。 截断绕过 有些网站可能会通过验证文件后缀来判断要访问的是不是系统文件,毕竟大多数Linux系统的文件都是没有后缀的,对于这种情况,我们可以通过之前文件上传漏洞时使用的 00 截断来绕过。 任务简报 这个实验室包含路径穿越漏洞,你要读取到 /etc/passwd 文件。 任务过程 这次我们直接用 ../images/38.jpg 试试水。 这里可以正常回显图片,说明这个地方没有对 ../ 做处理,那我们就直接上 payload 了。 这里可以看到是不行的,那我们试试 00 截断 OK 现在就可以了,具体原理可以参考上一篇文件上传的文章,这里就不过多赘述了。 好了,本篇文章主要就是介绍了一些路径穿越的常见位置、测试方法、常见的绕过手段、修复建议,相同的方法都可以用在文件下载上面,这两个的原理都是一样的,就不单独介绍啦。 该文章在 2024/3/18 18:39:37 编辑过 |
关键字查询
相关文章
正在查询... |