一、文件包含
       
(1)php://filter
           <?php  $content = '<?php exit; ?>';
                       $content .= $_POST['txt'];
                       file_put_contents($_POST['filename'], $content);
           php代码解释:这里的接收用户通过POST提交的txtfilename参数,在txt内容前添加                 PHP退出标记<?php exit; ?>,通过.=把将组合后的内容写入指定的文件TXT中。
   (2)需要使用到的工具和软件等
    burpsuit抓包软件,vscode。
   (3)在phpstudy_pro文件夹下面创建一个include目录,然后在vscode中打开此目录创建      1.php文件,把(1)的代码写入其中。
   (4)漏洞分析
    这里先在本地中断获取无线网地址,然后先不抓取数据包直接在chrome浏览器地址栏中输入
    192.168.31.116/include/1.php,访问结果:
    

    这里浏览器是直接报错的,因为1.php里面exit是直接退出的,后面的phpinfo都不能执行      了。
   (5)解决方案
    这里用php伪协议filter的base64解码,和stri_tags可以解决前面的exit。
    首先这里使用base64解码绕过exit的方法是通过解码去除无效代码,留下我们想要执行的    比如phpinfo的解码。在执行前打开burpsuit软件,在地址栏输入192.168.31.116/include/1.php时抓包并对包进行修改。


成功抓取到包之后右键点击send to repeater,把get请求改为post请求,右键点击change request method


然后再对需要执行的代码<?php phpinfo进行解码操作



pyload:filename=php://filter/write=convert.base64-decode/resource=shell.php&txt=aPD9waHAgcGhwaW5mbw==
这里的解码前面加上a是为了满足base64的解码要求8位,前面的php exit只有七位,这样就能被识别为无效代码,然后成功执行后面的php代码。
执行结果为:


strip_tags(去除<?标签)
这里如果要使用strip_tags需要把strip_tags和base64两个过滤器联合起来使用。

结果如下:



(6)php://input 可以访问请求的原始数据的只读流,将post请求中的数据作为php代码执行。

      

这里在执行前没有把allow_url_include和allow_url_open都打开,一开始报错了。
(7)zip://,bzip2://,zlib://协议
注:zip://,bzip2://,zlib://协议在双off的情况下也可以使用
首先这三个协议都是PHP的压缩流包装器,常用于文件包含漏洞的利用
1. zip:// 协议
基本语法:zip://[压缩文件路径]#[压缩文件内的文件名]
2.bzip2:// 协议
基本语法:compress.bzip2://file.bz2
3.zlib://协议
基本语法:zlib://file.gz

这三种压缩流包装器提供了文件包含攻击的多种途径,特别是在有文件上传功能且存在LFI漏洞的场景下。
(8)phar://
phar://协议是PHP中一个强大但危险的协议,常用于反序列化攻击和文件包含绕过。
基本用法phar://[phar文件路径]/[内部文件路径]。
(9)文件包含session
session文件包含攻击原理
攻击条件:
存在本地文件包含漏洞:可以包含本地文件

Session 文件可预测路径:能够知道或预测 session 文件的位置

Session 内容可控:可以向 session 中写入PHP代码
phpsession文件通常位于:
Linux:
/var/lib/php/sess_[PHPSESSID]
/tmp/sess_[PHPSESSID]

Windows:
C:\Windows\Temp\sess_[PHPSESSID]

二、文件调试
debug调试和php后门调试
首先在github中找到pwndbg的源,然后在unbuntu里安装pwndbg。这里先使用github原始链接wget https://github.com/pwndbg/pwndbg/archive/refs/heads/dev.zip​​​​​​

下载完成之后输入unzip dev.zip进行解压,解压完成之后进入该目录(cd pwndbg-dev),并且这里给安装脚本添加执行权限(chmod +x setup.sh)。

下载,解压完成。
输入./setup.sh直接运行安装脚本。


安装完成并且成功启动:

并且php8.3的安装与调试也完成:


 

三、总结
关于前四天学习文件包含和文件调试的课程中,我对于文件调试的课程较不熟悉,因为在调试前需要安装很多的环境,包括安装完成之后的配置等等。文件调试课程方面,由于调试前需安装并配置一系列环境(如虚拟机、调试工具、依赖库等),过程中遇到了不少实际问题。例如,在下载镜像源时,虚拟机无法 ping通 GitHub,导致依赖安装失败。为解决这一问题,我采取了更换远程仓库、在本地主机下载工具包后通过文件传输工具 xftp上传至虚拟机等方式。同时,由于 Gitee 仓库缺少部分镜像源,安装文件众多,环境配置也出现了各种异常,在反复尝试过程中,我借助技术博客和 AI 辅助,逐步学会了调试环境搭建与常见问题的排查方法。文件包含课程方面,学习效果较好。这部分内容重点在于理解并掌握 PHP 伪协议的语法结构和使用原理,并通过手动执行各类 Payload 观察实际响应,加深对漏洞机理的理解。文件包含的几种常见利用方式(如本地文件包含、远程文件包含、日志注入、Session 文件包含等)并不复杂,关键在于理解上下文与过滤机制。实践中遇到的主要问题是,由于调试环境中配置项较多,有时测试结果的返回速度较慢,需耐心等待与观察。总的来说,文件包含部分侧重于理解与记忆,而文件调试则更偏向动手与排错。后续学习中,我将在巩固文件包含漏洞知识的同时,进一步加强调试环境搭建与工具使用的熟练度,注重理论与实践相结合,逐步提升独立分析和解决问题的能力。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐