Web安全漏洞分析—文件包含

news2024/11/26 14:55:56

  在当今数字化时代,随着Web应用程序的广泛应用,网络安全问题愈加凸显。其中,文件包含漏洞作为一种常见但危险的安全隐患,为恶意攻击者提供了可乘之机。在这篇博客中,我们将深入探讨文件包含漏洞的本质、攻击手法以及应对策略。 

       文件包含漏洞通常发生在Web应用程序中,攻击者通过巧妙构造输入,成功绕过系统的安全防护,进而执行恶意代码或读取敏感文件。特别是在PHP等动态语言中,文件包含函数的使用不当可能导致严重后果。

       将以简练而深刻的语言,介绍文件包含漏洞的定义及其对系统安全的威胁。通过具体实例,我们将展示攻击者可能采用的不同手段,以揭示潜在的危害。而为了更全面地了解和应对这一挑战,我们将深入研究防御策略,包括输入验证、白名单控制、关闭不必要的函数等多个层面的解决方案。

一、文件包含漏洞及防御

1、文件包含

1)、概念

把可重复使用的函数写入到单个文件中在使用该函数时,直接调用此文件,无需再次编写函数。这一过程被称为包含

2、PHP文件包含

1)、文件包含函数

①、include0: 找不到被包含文件时会产生警告 (E_WARNING)

②、include_once(): 与include () 类似,代码已经被包含则不会再次包含

③、Require(): 找不到被包含的文件时会产生致命错误 (E_COMPILE_ERROR)

④、require_once(): 与require () 类似,代码已经被包含则不会再次包含

2)、文件包含示例

(3)、文件包含示例2

分别修改phpinfo.txt扩展名为: jpg、rar、360发现均可解析,

只要文件内容符合PHP语法规范,任何扩展名都可以被PHP解析

(4)、远程文件包含

(5)、文件包含漏洞

正常访问页面逻辑:

①、1.html

②、点击标签

③、跳转包含文件

攻击者思路: http://127.0.0.1/include/03/index.php?page=xxx.php

3、PHP文件包含利用

1)、读取敏感文件

http://127.0.0.1/include/03/index.php?page=C: \windows-version.txtWindows系统敏感信息:

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

C: \windows \system32 \inetsrv \MetaBase.xml               //IIS配置文件

C:\windows \repair\ sam                   //windows初次密码

C: program \Files\ mysql \my.ini       //Mysgl配置

C:\program Files\mysql data mysql\user.MYD\windows \php.ini  //Mysql root C://php配置信息

(2)、读取敏感文件

Linux系统敏感信息:

/etc/passwd                      //linux用户信息

/usr/local/app/apache2/conf/httpd.conf     //apache2配置文件

/usr/local/app/php5/lib/php.ini           //php设置

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

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

3)、远程包含shell

allow_url_fopen开启

访问: http://127.0.0.1/include/03/index.php?page=http://127.0.0.1)include/04/1.txt

会在indexphp目录下生成shell.php

(4)、本地包含配合文件上传

已经上传图片木马路径为: /upload/1.png图片代码如下:

会在index.php目录下生成shell.php

访问: http://127.0.0.1/include/03/index.php?page=D: upload\1.png

(5)、使用PHP封装伪协议

PHP 内置有很多内置 URL 风格的封装协议,可用于fopen()、 copy(),file_exists() 和 filesize()的文件系统函数。

(6)、data://命令执行

http://127.0.0.1/cmd.php?file=data://text/plain,<?php phpinfo()?>h ttp : / / 1 2 7 .0 .0 .1 / c m d .

p h p ?file = data : / / te x t /plain;base64,PD9waHAgcGhwaW5mbygpPz4=

(7)、zip://实验

http://127.0.0.1/cmd.php?file=zip://D:/soft/phpStudy/www/file.jpg%23phpcode.txt先将要执行的PHP代码写好文件名为phpcode.txt,将phpcode.txt进行zip压缩,压缩文件名为file.zip,如果可以上传zip文件便直接上传,若不能便将file.zip重命名为file.ipg后在上传,其他几种压缩格式也可以这样操作。

8)、使用PHP封装伪协议

写入PHP文件 (allow_url include:on)http://127.0.0.1/include/03/index.php?page=php://input

9伪协议用法小结

(10)、包含Apache日志文件

①、找到Apache路径,利用保护漏洞包含日志文件获取Webshell。Apache两个日志文件: access.log、error.log

各字段分别为: 客户端地址、访问者标识、访问者的验证名字、请求时间请求类型、状态码、发送给客户端短的字节数

②、当发现网站存在包含漏洞,但无webshell文件包含,也无上传点时?当访问不存在的资源时,apache日志同样会记录。如果访问:127.0.0.1/include/<?php phpinfo0;?>,再包含access.log是否可行?

(11)、截断包含

二、文件包含漏洞实例

1、CVE-2018-12613

1)、漏洞简介

phpMyAdmin是开源的MySQL数据库管理工具,可实现可视化对数据库进行管理受影版本: 4.8.0~4.8.1

index.php界面存在文件包含功能,代码分析进行绕过可实现漏洞利用

(2)、漏洞分析

/index.php第55~63行

(3)、漏洞分析

为了实现文件包含功能,需先通过几个条件判断

①、 target变量不为空;

②、target变量值为字符串;

③、 target变量值不能以'index’开头

④、target变量值不在黑名单中 ;

⑤、调用checkPageValidity函数处理target变量;

4)、/libraries/classes/Core.php    443~476行

(5)、漏洞分析

checkPageValidity 函数中五个条件判断

①、引入$goto_whitelist 白名单 (31行)

②、如果$page变量没有定义或不为字符串则返回false;

③、$page值在白名单中返回true;

④、如果$_page 存在白名单中返回true;

⑤、$page经过ulr解码存在于白名单则返回true;

6)、漏洞利用

Payload: **/index.php?target=db_sql.php%253f/../../../file.txt

注意事项: 

(7)、漏洞利用-getshell方法

①、利用数据库功能写入shell,查询文件位置select @@datadir包含.frm文件

②、利用数据库查询语句将shell写入session文件,包含该session文件

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

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

相关文章

信息收集 - 域名

1、Whois查询: Whois 是一个用来查询域名是否已经被注册以及相关详细信息的数据库(如:域名所有人、域名注册商、域名注册日期和过期日期等)。通过访问 Whois 服务器,你可以查询域名的归属者联系方式和注册时间。 你可以在 域名Whois查询 - 站长之家 上进行在线查询。 2、…

python提取图片型pdf中的文字(提取pdf扫描件文字)

前言 文字型pdf提取&#xff0c;python的库一大堆&#xff0c;但是图片型pdf和pdf扫描件提取&#xff0c;还是有些难度的&#xff0c;我们需要用到OCR&#xff08;光学字符识别&#xff09;功能。 一、准备 1、安装OCR&#xff08;光学字符识别&#xff09;支持库 首先要安…

详解git pull和git fetch的区别

git pull和git fetch的区别, 网上人云亦云胡说八道的实在是太多了&#xff0c;误导我很久。 今天看到一个说得好的&#xff0c;记录一下。 前言 在我们使用git的时候用的更新代码是git fetch&#xff0c;git pull这两条指令。但是有没有小伙伴去思考过这两者的区别呢&#xff…

vue3引入Echarts图表

说明&#xff1a;echarts是父组件&#xff0c;stack是子组件&#xff0c;将stack引入到echarts文件中 查看echarts.vue时可看到stack.vue中的图表 # # # 引入方式 第一步 Echarts官网&#xff1a;快速上手 - 使用手册 - Apache ECharts 第二步 在控制台安装Echarts模块…

8.完成任务实现的SDK封装及插件式加载

1.设计 任务的实现目前完成了Modbus RTU、Modbus TCP、Virtule。任务实现应该是任意的&#xff0c;比如打印一段话&#xff0c;执行一句SQL等&#xff0c;所以系统内部的必然要做到可扩展。 要做到可扩展&#xff0c;首先第一步就是定义标准&#xff0c;所以我们首先需要封装…

nodejs+vue+微信小程序+python+PHP基于大数据的银行信用卡用户的数仓系统的设计与实现-计算机毕业设计推荐

银行信用卡用户的数仓系统综合网络空间开发设计要求。目的是将银行信用卡用户的数仓系统从传统管理方式转换为在网上管理&#xff0c;完成银行信用卡用户的数仓管理的方便快捷、安全性高、交易规范做了保障&#xff0c;目标明确。银行信用卡用户的数仓系统可以将功能划分为管理…

从文字下乡到人人学英语

从建国到改革开放&#xff0c;从恢复高考到新式教育改革&#xff0c;中国飞速发展&#xff0c;文字需求也在不断增大&#xff0c;在“地球村”的时代下&#xff0c;我们要“习文字之变&#xff0c;顺时代发展。” 古言道&#xff1a;“仓颉作书&#xff0c;后稷作稼”&#xff…

【Spark面试】Spark面试题答案

目录 1、spark的有几种部署模式&#xff0c;每种模式特点&#xff1f;&#xff08;☆☆☆☆☆&#xff09; 2、Spark为什么比MapReduce块&#xff1f;&#xff08;☆☆☆☆☆&#xff09; 3、简单说一下hadoop和spark的shuffle相同和差异&#xff1f;&#xff08;☆☆☆☆☆…

Linux学习教程(第十三章 Linux数据备份与恢复)

第十三章 Linux数据备份与恢复 不知道大家有没有丢失过重要的数据呢&#xff1f; 丢失数据的理由是多种多样的&#xff0c;有人是因为重装系统时&#xff0c;没有把加密文件的密钥导出&#xff0c;重装系统后密钥丢失&#xff0c;导致所有的加密数据不能解密&#xff1b;也有人…

实验记录:深度学习模型收敛速度慢有哪些原因

深度学习模型收敛速度慢有哪些原因&#xff1f; 学习率设置不当&#xff1a; 学习率是算法中一个重要的超参数&#xff0c;它控制模型参数在每次迭代中的更新幅度。如果学习率过大&#xff0c;可能会导致模型在训练过程中的振荡&#xff0c;进而影响到收敛速度&#xff1b;如果…

字符设备驱动框架的编写

一. 简介 我们在学习裸机或者 STM32 的时候关于驱动的开发就是初始化相应的外设寄存器&#xff0c;在 Linux 驱动开发中&#xff0c;肯定也是要初始化相应的外设寄存器。 只是在 Linux 驱动开发中&#xff0c; 我们需要按照其规定的框架来编写驱动&#xff0c;所以说学 …

【网络安全】网络防护之旅 - Java安全机制探秘与数字证书引爆网络防线

&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《网络安全之道 | 数字征程》⏰墨香寄清辞&#xff1a;千里传信如电光&#xff0c;密码奥妙似仙方。 挑战黑暗剑拔弩张&#xff0c;网络战场誓守长。 目录 &#x1f608;1. 初识网络安…

机场信息集成系统系列介绍(3):机场运行核心数据库(AODB)

目录 1、背景&#xff1a;什么是AODB 2、AODB包括哪些内容 3、AODB还应该适配哪些场景 4、一点点拓展 机场运行核心数据库&#xff08;AODB&#xff09;Airport Operation DataBase 1、背景&#xff1a;什么是AODB 在机场繁重的航班保障和旅客服务背后&#xff0c;庞大的…

centos安装了curl却报 -bash: curl: command not found

前因 我服务器上想用curl下载docker-compress&#xff0c;发现没有curl命令&#xff0c;就去下载安装&#xff0c;安装完成之后&#xff0c;报-bash: curl: command not found 解决方法 [rootcentos ~]# rpm -e --nodeps curl warning: file /usr/bin/curl: remove failed: …

非常好用的C++跨平台网络通信Mongoose,随笔记录

简介 Mongoose 是一个 C/C 网络库。它实现了事件驱动&#xff0c; TCP、UDP、HTTP、WebSocket、MQTT 的非阻塞 API。它连接设备 并将它们带到网上。自 2004 年以来&#xff0c;一些开源和商业 产品已经利用了它。它甚至运行在 国际空间站&#xff01; Mongoose 使嵌入式网络编…

【数据结构】(堆)Top-k|堆排序

目录 概念&#xff1a; 堆的实现 构建 初始化 销毁 插入元素 往上调整 删除堆顶元素 往下调整 返回堆顶元素 返回有效个数 是否为空 堆排序 Top-k问题 ​编辑 创建数据 堆top-k 概念&#xff1a; 堆是将数据按照完全二叉树存储方式存储到一维数组中&#xff…

Python实验项目9 :网络爬虫与自动化

实验 1&#xff1a;爬取网页中的数据。 要求&#xff1a;使用 urllib 库和 requests 库分别爬取 http://www.sohu.com 首页的前 360 个字节的数据。 # 要求&#xff1a;使用 urllib 库和 requests 库分别爬取 http://www.sohu.com 首页的前 360 个字节的数据。 import urllib.r…

网络 / day02 作业

1. TCP和UDP通信模型 1.1 TCP server #include <myhead.h>#define PORT 9999 #define IP "192.168.250.100"int main(int argc, const char *argv[]) {//1. create socketint sfd -1;if( (sfd socket(AF_INET, SOCK_STREAM, 0 ))-1 ){perror("socke…

YOLOv5改进 | SPPF | 将RT-DETR模型AIFI模块和Conv模块结合替换SPPF(全网独家改进)

一、本文介绍 本文给大家带来是用最新的RT-DETR模型中的AIFI模块来替换YOLOv5中的SPPF。RT-DETR号称是打败YOLO的检测模型&#xff0c;其作为一种基于Transformer的检测方法&#xff0c;相较于传统的基于卷积的检测方法&#xff0c;提供了更为全面和深入的特征理解&#xff0c…

机器学习 | KNN算法

一、KNN算法核心思想和原理 1.1、怎么想出来的&#xff1f; 近朱者赤&#xff0c;近墨者黑&#xff01; 距离决定一切、民主集中制 1.2、基本原理 —— 分类 k个最近的邻居 民主集中制投票分类表决与加权分类表决 1.3、基本原理 —— 回归 计算未知点的值决策规则不同均值法与…