File Inclusion

设置题目难度为low

点击File Inclusion(文件收录)

网页这边给了三个文件访问

访问file1,访问出页面的同时网址也变成

看网址

fi后面缺少index.php,加上没什么变化,但代表我们访问的文件是正确的

直接打开文件目录,

phpstudy_pro\WWW\DVWA\vulnerabilities\fi

分别找到index.php,file1.php,low.php三个文件

先看index.php代码

复制代码
<?php

define( 'DVWA_WEB_PAGE_TO_ROOT', '../../' );
require_once DVWA_WEB_PAGE_TO_ROOT . 'dvwa/includes/dvwaPage.inc.php';

dvwaPageStartup( array( 'authenticated' ) );

$page = dvwaPageNewGrab();
$page[ 'title' ]   = 'Vulnerability: File Inclusion' . $page[ 'title_separator' ].$page[ 'title' ];
$page[ 'page_id' ] = 'fi';
$page[ 'help_button' ]   = 'fi';
$page[ 'source_button' ] = 'fi';

dvwaDatabaseConnect();

$vulnerabilityFile = '';
switch( dvwaSecurityLevelGet() ) {
	case 'low':
		$vulnerabilityFile = 'low.php';
		break;
	case 'medium':
		$vulnerabilityFile = 'medium.php';
		break;
	case 'high':
		$vulnerabilityFile = 'high.php';
		break;
	default:
		$vulnerabilityFile = 'impossible.php';
		break;
}

require_once DVWA_WEB_PAGE_TO_ROOT . "vulnerabilities/fi/source/{$vulnerabilityFile}";

// if( count( $_GET ) )
if( isset( $file ) )
	include( $file );
else {
	header( 'Location:?page=include.php' );
	exit;
}

dvwaHtmlEcho( $page );

?>

先得了解这个代码的生成方式

从17行开始,源代码中使用switch,去判断用户传过来的安全等级,这边是low,所以找到low.php

复制代码
<?php

// The page we wish to display
$file = $_GET[ 'page' ];

?>

再看这串代码

require_once DVWA_WEB_PAGE_TO_ROOT . "vulnerabilities/fi/source/{$vulnerabilityFile}";

组成部分:

  1. require_once

    • 包含并运行指定文件

    • _once 确保文件只被包含一次,避免重复包含错误

  2. DVWA_WEB_PAGE_TO_ROOT

    • DVWA 的常量,表示 网站根目录的路径

    • 例如:/var/www/html/dvwa/

  3. 路径拼接

    • "vulnerabilities/fi/source/{$vulnerabilityFile}"

    • 构建完整的文件路径

这串代码照样运算访问low.php

看36行这串代码include( $file )就是访问网页上的file1,file2,file3

但是目录上面还有个file4,这个就是题目不想让我们看见的文件,这是个关于路径漏洞的知识通过这样的路径漏洞我们还可以访问很多文件,甚至可以访问c盘,提取敏感信息

这边的file4.php是相对路径等同于./file4.php,也就是当前文件夹(index.php所在的文件夹)下的 file4.php

我们可以通过../(这个是访问上层目录下的某个文件)

dvwa/vulnerabilities/fi/?page=../

通过报错的信息我们就可以看到现在在那个位置了

设置题目难度为中等

查看源代码

中级难度的代码比低级难度多出两行

这两行代码让我们没有办法使用../来访问目录

主要问题:过滤可以被绕过

绕过方法1:嵌套遍历

php

复制代码
?page=..././..././etc/passwd
// 过滤后:../../../etc/passwd

双写写两遍..././=../

就可以绕过过滤

绕过方法2:双重编码

php

复制代码
?page=..%252f..%252fetc%252fpasswd
// 第一次URL解码:..%2f..%2fetc%2fpasswd
// str_replace过滤:..%2f..%2fetc%2fpasswd(无变化)
// 文件系统可能识别

绕过方法3:非常规路径分隔符

php

复制代码
?page=..\../..\/etc/passwd
// 在Windows系统上可能有效

绕过方法4:绝对路径(如果允许)

php

复制代码
?page=/etc/passwd
// 如果应用有读取权限,可以直接访问系统文件

同样还有这么一段代码file = str_replace( array( "http://", "https://" ), "", file );

他是用来过滤http

但是我们还是可以用双写绕过

hhttp://ttp://=http://

这样就可以访问网址了

http是怎么样让我们信息泄露的,php中include这个函数,他会把远程服务器上的

这段代码加载进来,如果里面有php代码,他会优先执行这段代码

就比如我们再创建一个网站,dvwa2,浏览在桌面文件夹shiyan,端口为8080

现在网站里面没东西,那让我们在文件夹shiyan里面放个txt文件

文件内容为这段php代码

复制代码
<?php echo phpinfo();?>

保存后我们8080服务器下就有了1.txt文件与这段php代码

再加上include这个函数,他会把远程服务器上的,这段代码加载进来

那我们访问这个网站

就能看见我们服务器上所以信息

相关推荐
青旬43 分钟前
我的AI搭档:从“年久失修”的AGP 3.4到平稳着陆AGP 8.0时代
android·ai编程
FrameNotWork2 小时前
#RK3588 Android 14 虚拟相机 HAL 开发踩坑实录:从 Mali Gralloc 报错到成功显示画面
android·车载系统
天地之于壹炁兮2 小时前
用VSCode打造高效AI开发环境:从配置到实战
ide·人工智能·vscode
恋猫de小郭3 小时前
回顾 Flutter Flight Plans ,关于 Flutter 的现状和官方热门问题解答
android·前端·flutter
张风捷特烈3 小时前
FlutterUnit3.4.1 | 来场三方库的收录狂欢吧~
android·前端·flutter
e***58234 小时前
Spring Cloud GateWay搭建
android·前端·后端
x***13397 小时前
【MyBatisPlus】MyBatisPlus介绍与使用
android·前端·后端
n***54388 小时前
【MySQL】MySQL内置函数--日期函数字符串函数数学函数其他相关函数
android·mysql·adb
z***75159 小时前
【Springboot3+vue3】从零到一搭建Springboot3+vue3前后端分离项目之后端环境搭建
android·前端·后端