|
文件包含漏洞(一)
⽂件包含漏洞原理
⽂件包含严格来说不算漏洞,算功能,但是,由于包含、引⽤、读取、访问的⽂件不可控的性质,导致漏洞的产⽣
⽂件包含-功能
include("../sql-connections/sql-connect.php");
10 个地⽅⽤到同样的 600 ⾏代码⽂件
如果调⽤了⽂件包含相关的函数,那么就可以直接解析执⾏⽂件内的 php 代码,不会受到⽂件类型的影响
实例代码
<?php
$file = $_GET['file'];
include($file);
?>
1.txt
hello world!!
2.txt
<?php phpinfo();?>
如果读取的⽂件是 php 代码类的⽂件,那么可以直接解析执⾏
如果不是 php 代码⽂件,那么就会将⽂件的原始内容直接输出出来
漏洞分类
LFI: local file include(本地⽂件包含)
RFI:remote file include(远程⽂件包含)
需要满⾜两个前提php.ini 配置⽂件内
allow_url_fopen allow_url_include 都要为 ON
⽂件包含函数
include():⽤到⽂件就去读取使⽤,如果出错只会警告但代码会继续执⾏
Incluede_once():⽤到⽂件就去读取使⽤,如果出错只会警告但代码会继续执⾏(包含的⽂件只会读取⼀次,不会
重复读取)
Require():如果发⽣错误,代码会停⽌执⾏
require_once():如果发⽣错误,代码会停⽌执⾏(包含的⽂件只会读取⼀次,不会重复读取)
2.php
<?php
$a="这是 2.php ⽂件"
?>
3.php
<?php
//使⽤ include 函数包含 2.php ⽂件
include '2.php';
echo "⽂件包含测试:".$a;
//使⽤ inclede 函数包含⼀个不存在的⽂件
include 'abc.php';//致命错误
echo "这是代码的中间部分";
//使⽤ require函数包含⼀个不存在的⽂件
require ‘abc.php’; //这⾥会产⽣⼀个致命错误
echo "这是代码的结尾"; //代码不会执⾏到这⾥
?>
利⽤
常⻅敏感⽬录:https://www.cnblogs.com/NBeveryday/articles/sensitvefile.html
php 伪协议
file:// — 访问本地⽂件系统
http:// — 访问 HTTP(s) ⽹址
ftp:// — 访问 FTP(s) URLs
php:// — 访问各个输⼊/输出流(I/O streams)
php://filter/read=convert.base64-encode/resource=⽂件名
php://input:将 post请求的数据当做代码执⾏
压缩类型:可以直接访问压缩包⾥⾯的⼦⽂件
zlib:// compress.zlib://压缩包名 (只能够执⾏ gz 后缀的压缩包)
zip://压缩⽂件绝对路径%23压缩⽂件内的⼦⽂件名
bzip://
phar://压缩⽂件绝对路径/⼦⽂件名 (可以使⽤相对路径也可以使⽤绝对路径)
bzip2://
data:// — 数据(RFC 2397) 执⾏代码
data://text/plain;base64,编码的代码
data://text/plain,原始代码
glob:// — 查找匹配的⽂件路径模式
phar:// — PHP 归档
ssh2:// — 安全外壳协议 2
rar:// — RAR
ogg:// — ⾳频流
expect:// — 处理交互式的流
WEB渗透测试工程师系统班250303期 第31节课作业 1. 为什么会需要文件包含功能?
include("../sql-connections/sql-connect.php");
10 个地⽅⽤到同样的 600 ⾏代码⽂件
如果调⽤了⽂件包含相关的函数,那么就可以直接解析执⾏⽂件内的 php 代码,不会受到⽂件类型的影响
2. 文件包含漏洞的原理是什么? 由于包含、引⽤、读取、访问的⽂件不可控的性质,导致漏洞的产⽣ 实操课程内讲解的文件包含漏洞靶场
|