小迪web自用笔记51
大部分文件下载都是直链地址,网站目录文件名直接下载东西。
还有一种是加载一个文件名,然后直接传递参数获取文件。
前者只能下载浏览器解析的文件(解析是执行后的结果你看不到源码,因为直连链接是先执行,返回动态结果而不提供下载)。
后者你可以直接下载源码(因为有下载协议)
原理:
*文件下载有几种实现模式,一种是直连,一种是以参数传递。
如果直接访问,那就是解析了,看不到源码。
*说白了我感觉就是协议限制,直连链接只有下载类的格式才能下载,而后面的话非下载类的协议都可以下载。
文件读取
文件读取和文件下载是一码事
例子
看到后面的等于7.jpg,他的图片就是通过这个地址加载出来的。
通过jpg的传递显示不同的图片。
我可以简单的理解为,这个漏洞他在这个解析源代码的目录下放了几张图片,然后根据图片的地址来加载图片放到网站上,如果你后面跟的是其他文件路径名他就会解析其他的路径名。
好像跟前面讲的目录跨越有点像,没有做校验限制读或者过滤读取目录导致的。
删除的话,非常少见,因为它产生的地方很多时候我们接触不到,要么是操作自己的,要么就是管理员。
任意文件读取任意文件删除任意文件修改。
💡解答
这段PHP代码存在目录遍历漏洞的风险:
代码通过 substr(strtolower($filedir), 0, 11) !=$dirTemplate 来校验文件路径,要求路径前11个字符必须是 ../templets 。但这种校验方式有缺陷——攻击者可以构造路径,让前11个字符符合要求,但后面拼接 ../ 等跨目录的内容(比如 ../templets/../../etc/passwd ),从而绕过校验,访问服务器上其他目录的文件,引发未授权的文件读取等风险。
要搞清楚这个问题,需结合路径解析规则和服务器执行逻辑来分析:
1. ../ 的路径解析作用
../ 是路径中的“上级目录符号”,用于向上返回一级目录。例如:
- 路径 /a/b/../c/file.php 会被解析为 /a/c/file.php ( b/../ 抵消,最终定位到 a/c/ 目录下的 file.php )。
2. 文件“是否执行”的核心条件
文件最终所在的目录,只是定位文件的前提,但“是否执行”还依赖以下关键因素:
- 目录权限:服务器是否允许访问该目录(比如某些目录被配置为“禁止外部访问”)。
- 文件类型与服务器支持:文件需要是服务器“可执行/可解析”的类型。
- 比如 PHP 文件需要 PHP 解析器支持;
- 若为普通文本文件( .txt ),服务器通常只会“返回内容”,不会“执行”;
- 若为恶意脚本(如 .sh ),还需服务器开启了“脚本执行权限”且有对应的执行环境。
结论
包含 ../ 的路径会被解析到最终目录,但文件“是否执行”,不是由“所在目录”单独决定,而是由目录访问权限、文件类型、服务器执行配置等多重条件共同决定——并非“在某个目录就一定会被执行”。
是的,我之前举的例子中,原路径是 /a/b/../c/file.php ,它的逻辑结构可以理解为:
- 目录层级: a/ → b/ → ../ (返回上级目录) → c/ → file.php
- 解析后路径: /a/c/file.php
你提到的 a/b/c/xx.php 并不是这个例子的原路径,而是一个不含 ../ 的常规路径。
*/../它就是跨域目录的一种操作,只要在目标文件前面加上/../他就会无条件地跨越目录,查找文件并执行,不管你最前面写的东西是什么。而且无论前后他都可以跳(以目录为中心)
还有截断符仅限制于PHP低版本。
文件遍历:
中间件开目录索引才会有这个东西。①
文件索引,如果你任意文件读取点到文件索引的文件,它就会自动跳转首页,因为中间键在你打开这个文件的时候会自动解析。
文件穿越就是那个/../符号