中华人民共和国网络安全法
阅读本文前,请熟读并遵守中华人民共和国网络安全法:
http://gkhy.jiujiang.gov.cn/zwgk_228/jc/zcwj/202006/P020200618385401918830.pdf
目录
简介
简单一句话,为了更好地使用代码的重用性,引入了文件包含函数,可以通过文件包含函数将文件包含进来,直接使用包含文件的代码。
在包含文件时候,为了灵活包含文件,将被包含文件设置为变量,通过动态变量来引入需要包含的文件时,用户可以对变量的值可控而服务器端未对变量值进行合理地校验或者校验被绕过,这样就导致了文件包含漏洞。通常文件包含漏洞出现在PHP语言中。
PHP通常引发此漏洞的函数
- include()
- include_once()
- require()
- require_once()
文件包含漏洞常用场景
- 具有相关文件包含函数
- 文件包含函数中存在动态变量 如include $file;
- 攻击者能够控制该变量 比如: f i l e = file= file=_GET[‘file’];
- 常见的如:file page 等参数
相关配置介绍
php配置文件
php.ini 是php的配置文件,里面包含了众多配置,在php启动的时候被读取。自php3.5起,php支持每个目录的.htaccess风格的ini文件。此类文件仅被CDI/FASTCGI SAPI处理。如果使用apache,则用.htaccess文件同样效果。
以下是一些常见配置:
- short_open_tag = on 允许php使用短标签,如用 <? 代替 <?php,可利用短标签绕过waf
- disable_classes= /disable_functions= 禁用类/函数 可接收逗号分隔的函数名列表作为参数
- file_uploads = on 设置允许上传
- upload_max_filesize = 8m 最大允许上传多大的内容
- upload_tmp_dir 上传临时文件保存的目录,且这个目录可写
- allow_url_fopen = on 是否允许打开远程文件,该项打开,就能够利用上面的函数远程包含文件
本地文件包含 LFI
当被包含的文件在服务器本地时,就形成本地文件包含
假如服务器存在一个include.php文件,其代码如下:
<?php
$file=$_GET['file'];
include $file;
?>
那么就可以从浏览器上反问一些服务器敏感路径:如下:
在linux系统下就可以访问etc下面的内容,危害十分巨大。
当然,我们也可以将file参数指向我们上一篇博文中的图片木马,从而完全渗透到服务器。
远程文件包含 RFI
当被包含的文件在第三方服务器时,叫做远程文件包含。
前提条件,需要php设置两个参数
- allow_url_fopen = on
- allow_url_include = on 允许包含url对象文件等
这里开启一个本地的php服务,并写一个phpinfo的文件,也可以是一句话木马,然后远程包含
效果如下
PHP伪协议包含
php://input
它是可以访问请求的原始数据的只读流,简单来说就是,获取post传过去的数据
利用条件只有:
allow_url_include = on
利用方式:
index.php?file=php://input
POST:
下面来演示一下
1.将上面的include.php文件放在文件漏洞靶场第一关目录下,如下图
然后在浏览器中访问,如下图,
php://filter
我们一般用它来读取源码,一般用base64先编码,再解码
利用方式
index.php?page=php://filter/read=convert.base64-encode/resource=file1.php
index.php?page=php://filter/read=convert.base64-decode/resource=file1.php
下面演示一下:
首先还是在浏览器中访问
粘贴内容,在线解码:https://base64.us/
可以看到php源码内容
phar://
这个是利用压缩包读取内容的方式执行木马
利用条件,php版本低于5.3.0
首先创建一个文件test.txt 然后在里面写入<?php phpinfo();?>,或者一句话木马,然后压缩成一个test.zip, 通过文件上传等方式将这个压缩包上传到服务器。
在浏览器中这样访问:http://192.168.10.40/upload-labs-master/Pass-01/include.php?file=pchar://压缩包路径/test.txt
如果include.php和压缩包不在一个目录,可以利用…/找到压缩包的目录
类似它的还有: zip://压缩包绝对路径%23文件名称
data:url schema
利用条件:
- php版本大于5.2
- allow_url_include = on
- allow_url_fopen = on
利用方式:
include.php?file=data:text/plain,<?php phpinfo();?>
include.php?file=data:text/plain,<?php system('whoami');?>
通过session文件包含getshell
未完待续。。。