小迪web自动笔记50
文件包含:
如果想要调用数据库查询,直接用include,这个文件中的代码就会被调用。
无论你是什么格式,都会被当成脚本执行。
有本地包含与远程包含,但是远程包含限制很多,比如直接给你开关限制或者给你过滤关键字。
可以直接执行其他网站的的文件(但是不能包含自己电脑上的文件,所以叫做远程包含。
本地文件
你只能执行本地有的功能,
无文件利用:只能用本地里面的功能。
有文件利用:可以上传一个后门。
1,伪协议
第1个要绝对路径,第2个用相对路径读取。
可以进行跳级操作。
直接读d盘。
*这个伪协议相对路径的机制。
在文件系统和Web应用程序中,绝对路径和相对路径的产生是为了管理和定位文件资源。即使有两个内容一模一样的文件,它们也可能存储在不同的位置,路径就是用来唯一标识这些文件的方法。下面我会详细解释为什么需要绝对路径和相对路径,以及它们在文件包含漏洞中的重要性。
1. 绝对路径和相对路径的基本概念
· 绝对路径:从文件系统的根目录(如Linux的/或Windows的C:\)开始,指定文件的完整路径。它唯一确定一个文件,无论当前工作目录是什么。
· 示例:/var/www/html/index.php(Linux)或C:\xampp\htdocs\index.php(Windows)。
· 相对路径:从当前工作目录开始,指定文件的相对位置。它依赖于当前上下文,因此可能指向不同的文件,如果工作目录改变。
· 示例:如果当前目录是/var/www/html,那么./config.php指的是/var/www/html/config.php;而../uploads/file.txt则指向/var/www/uploads/file.txt。
2. 为什么需要绝对路径和相对路径?
· 绝对路径提供了文件的精确位置,确保无论当前目录如何,都能找到正确的文件。这在系统级操作或需要明确指定文件时非常有用。
· 相对路径提供了灵活性,使代码或命令更容易移植。例如,如果一个Web应用程序从开发环境(如/home/dev/project/)迁移到生产环境(如/var/www/),使用相对路径可以避免修改所有文件引用。
3. 如果有两个一模一样的文件,路径如何区分?
即使两个文件内容完全相同,如果它们存储在不同的目录下,它们就是不同的文件实例。路径是区分它们的唯一标识符。例如:
· 文件A位于:/var/www/uploads/log.txt
· 文件B位于:/tmp/log.txt
· 虽然内容相同,但通过绝对路径/var/www/uploads/log.txt和/tmp/log.txt,系统可以明确区分它们。
在文件包含漏洞中,攻击者可以利用路径来包含特定文件:
· 如果应用程序使用相对路径包含文件,攻击者可能通过路径遍历(如../../etc/passwd)访问敏感文件。
· 如果应用程序使用绝对路径,攻击者可能直接指定系统文件路径(如/etc/passwd)来读取数据。
4. 在文件包含漏洞中的实际影响
在远程文件包含(RFI)或本地文件包含(LFI)漏洞中,路径的选择至关重要:
· 绝对路径:允许攻击者直接指向系统关键文件(如/etc/passwd),但可能被应用程序限制或过滤。
· 相对路径:攻击者常使用路径遍历技术(如../)来“跳出”当前目录,访问其他目录下的文件。例如,如果应用程序包含include($_GET['file']),且当前目录是/var/www/html,那么file=../../etc/passwd可能成功包含系统文件。
如果有两个一模一样的文件(比如一个正常文件和一个恶意文件),攻击者可以通过指定不同的路径来选择包含哪一个:
· 例如,如果应用程序有上传功能,攻击者上传一个恶意文件到/var/www/uploads/shell.php,然后通过LFI包含它:file=uploads/shell.php。
· 同时,系统可能有一个正常文件/usr/lib/legit.php,但通过路径,攻击者可以避免包含它。
5. 为什么会产生路径问题?
路径问题的根源在于应用程序如何处理用户输入的文件路径。如果应用程序未正确验证或 sanitize 用户输入,攻击者可以操纵路径来包含未授权的文件。常见问题包括:
· 缺乏输入验证:允许用户输入绝对路径或包含../的相对路径。
· 错误的路径拼接:将用户输入直接与基础路径拼接, without checking for path traversal.
· 服务器配置不当:如allow_url_include开启,允许远程包含。
总结
绝对路径和相对路径是文件系统的基本组织方式,用于唯一标识文件。在文件包含漏洞中,路径是攻击者的关键工具,用于访问敏感文件或执行恶意代码。即使有两个一模一样的文件,路径也能确保它们被正确区分。因此,在开发Web应用程序时,必须严格验证用户输入的路径,避免使用用户输入直接包含文件,或使用白名单机制限制可包含的文件。
*是以存在文件包含的目录为起点
文件写入:上面有有两种方式。
代码执行:上面也有。
例子
先观察特征,怀疑是文件包含,用file协议构造一下包含一下网站里的php执行,结果真的是。
这道题没有上传点(不能自己构造PHP代码上传),只能通过伪协议读取文件。
这张截图里的 Post data 指的是 HTTP POST 请求的请求体数据,和 URL 中的 GET 参数(直接在地址栏里写 ?key=value )是两种不同的请求数据提交方式。
1. Post data 是什么?
- HTTP 请求分为两种常见的提交数据方式:
- GET:参数直接放在 URL 里(如 ?file=xxx ),会显示在浏览器地址栏。
- POST:参数放在请求体(Request Body)里,不会显示在地址栏,更适合传递敏感或大量数据。
- Post data 就是 POST 请求体里的内容。
2. 为什么这里不能直接在 URL 构造?
因为截图里用的是 php://input 伪协议,它的作用是 读取 POST 请求体的数据。
- 如果直接在 URL 里构造(比如 ?file=xxx ),这是 GET 请求, php://input 是读不到的。
- 必须用 POST 请求,把数据放在请求体里, php://input 才能读取到内容。
3. 结合截图里的场景
截图里的 URL 是:
plaintext
http://xxx/?file=php://input
这表示:
- PHP 代码里的 include($_GET['file']) 会去包含 php://input 。
- php://input 会去读取 POST 请求体里的内容(也就是截图中 Post data 里的 <?php system('ls');?> )。
- 这样 PHP 就会执行 POST 数据里的代码(比如 system('ls') )。
4. 总结
- Post data 是 POST 请求体里的数据,和 URL 里的 GET 参数是两回事。
- 这里用 php://input 必须配合 POST 请求体,不能直接在 URL 构造,因为 php://input 是专门读取 POST 数据的。
Get里面的f ILE,并把这里面的东西包含 ,如果里面的内容有PHP直接给你改成三个问号。
文件写入↑
直接写入
可以访问日志(日志包含)
绝对路径执行↓
然后把代码写入再执行日志。
先构造一个读取目录的代码,然后读到文件之后再打开文件。
改包USER AGENT
seSSion包含
这玩意儿是会话会产生在服务器上,一般保存在Tmp目录下。
工具↑
固定会话文件的产生。
在它清空之前马上创建一个新的文件。
Session在包含的那一刹那就会清空所有的东西,我让他触发之前的时候赶紧连接访问创建一个新的文件。
不断发包,不断链接,怎么感觉跟之前的那个有点像?就那个逻辑顺序漏洞?
*SESSION,cookie那个啥开发有点忘了,SESSION好像确实访问了之后创建会话,在另一个文件下保存这个东西(会话允许通过的人的信息,用户登录状态。),然后定期的清理(中小型网站)
有空去看看复习一下前面。
两次编码
主要得看有没有urldecode这个玩意儿,他提前给你解密一次了。
正常浏览器会给你解码一次,你正常两次加密它是解不出东西的,但是有这个东西,它先给你解了一次。
凯撒加密↓
上面这个是关键字符过滤,不让你搞。
然后的话你在编码的时候就得多加几字符让关键字不见
最后一关好像是另一种加密万变不离其本不搞。直接禁你的加密↓