渗透测试之文件包含漏洞

 文件包含漏洞:服务器执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当作PHP执行,可以给开发者节省大量的时间,从而也导致了客户端可以调用一个恶意文件,造成文件包含漏洞。

常见的文件包含函数require()、require_once()、include()、include_once()

文件包含实例

网页为include函数包含CMD参数内容

渗透测试之文件包含漏洞_第1张图片

在同目录下还有一个1.php文件,内容如下(后续会包含显示的内容)

渗透测试之文件包含漏洞_第2张图片

在物理机进行访问并且传参,得到页面返回,文件包含成功

渗透测试之文件包含漏洞_第3张图片

除本目录还可以传参对根目录的文件进行访问(每个windows在windows文件夹中都有一个win.ini文件,在这里尝试包含此文件;linux系统中可以尝试包含/etc/passwd文件)

渗透测试之文件包含漏洞_第4张图片

由于实战环境中并不清楚文件路径,使用相对路径,先退回到根目录,再对目标文件进行访问。

如果有恶意文件上传至服务器并执行(在这里直接将恶意文件放在服务器的c盘下)恶意文件内容如下,调用系统命令打开计算器

渗透测试之文件包含漏洞_第5张图片

在物理机上对恶意文件进行包含,里面的php代码就会执行,服务器上的计算机被打开,正常执行

渗透测试之文件包含漏洞_第6张图片

文件包含分类

文件包含分为本地文件包含和远程文件包含

本地文件包含可以包含当前服务器系统下的文件

远程文件包含可以包含其他服务器上的文件(前提条件:allow_url_include、allow_url_fopen的状态为ON)

               

  

文件包含漏洞实例

一、本地文件包含

1、在参数点是一个文件名可以尝试测试文件包含漏洞是否存在,代码审计中看到文件包含函数,可以看是否与用户交互,如果在包含函数传参的位置有交互,也是有文件包含漏洞存在的可能的。

2、找到之后,将上传的文件参数改成想要得到的对方服务器上的文件相对路径。

渗透测试之文件包含漏洞_第7张图片

二、远程文件包含

1、在另一台服务器(kali)上写入一个想要包含的文件,并开启web服务

渗透测试之文件包含漏洞_第8张图片

2、通过物理机包含kali服务器上的文件

渗透测试之文件包含漏洞_第9张图片

可以看到执行了写在kali服务器上的1.txt文件,而文件中的函数作用在win08服务器上。

远程文件包含的危害较本地文件包含更大,但相应有前提。

伪协议

php://input伪协议:(将post输入流当作php代码执行,include开关打开)

渗透测试之文件包含漏洞_第10张图片

php://filter伪协议:(此协议主要用于读取php源代码时会用到,两个开关随意)

渗透测试之文件包含漏洞_第11张图片

得到的内容是经过base64加密的,经过解密后就可以得到源码

渗透测试之文件包含漏洞_第12张图片

phar://伪协议:(php代码执行,两个开关均不受影响)

zip://伪协议(与phar伪协议很相似)

将php文件打包成压缩包进行上传(在只能上传压缩包的点配合文件上传利用漏洞)

data://伪协议:(php代码执行,两个开关都需要打开)

可以通过base64的加密,绕过过滤php代码的点,可以使php代码正常执行。

渗透测试之文件包含漏洞_第13张图片

在本地文件包含中,只能访问到网站所在盘符上的文件,这里可以通过file伪协议实现跨盘的文件包含,从而拿下整台服务器。

文件包含的绕过

../被禁掉的时候可以用url编码实现绕过

协议被禁掉的时候可以尝试使用phar或zip伪协议实现绕过

你可能感兴趣的:(渗透测试,服务器,php)