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,一经查实,立即删除!

相关文章

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

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

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…

分布式版本管理工具——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 索引损坏的痛苦。 做好准备 这篇博客与往常不同。它不是对新功能或教程的解释。这是关于花…

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

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

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

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

LunarVim安装

LunarVim以其丰富的功能和灵活的定制性&#xff0c;迅速在Nvim用户中流行开来。它不仅提供了一套完善的默认配置&#xff0c;还允许用户根据自己的需求进行深度定制。无论是自动补全、内置终端、文件浏览器&#xff0c;还是模糊查找、LSP支持、代码检测、格式化和调试&#xff…

高质量 Next.js 后台管理模板源码分享,开发者必备

高质量 Next.js后台管理模板源码分享&#xff0c;开发者必备 Taplox 是一个基于 Bootstrap 5 和 Next.js 构建的现代化后台管理模板和 UI 组件库。它不仅设计精美&#xff0c;还提供了一整套易用的工具&#xff0c;适合各种 Web 应用、管理系统和仪表盘项目。无论你是初学者还是…

开发场景中Java 集合的最佳选择

在 Java 开发中&#xff0c;集合类是处理数据的核心工具。合理选择集合&#xff0c;不仅可以提高代码效率&#xff0c;还能让代码更简洁。本篇文章将重点探讨 List、Set 和 Map 的适用场景及优缺点&#xff0c;帮助你在实际开发中找到最佳解决方案。 一、List&#xff1a;有序存…

Java包装类型的缓存

Java 基本数据类型的包装类型的大部分都用到了缓存机制来提升性能。 Byte,Short,Integer,Long 这 4 种包装类默认创建了数值 [-128&#xff0c;127] 的相应类型的缓存数据&#xff0c;Character 创建了数值在 [0,127] 范围的缓存数据&#xff0c;Boolean 直接返回 True or Fal…

工程师 - MinGW

MinGW Minimalist GNU for Windows&#xff0c;前身为mingw32&#xff0c;是一个免费开源的软件开发环境&#xff0c;从2010年开始项目停止并不再使用。后续提供MinGW-w64。 MinGW包括: - 移植到Windows上的GNU编译器集&#xff08;GCC&#xff09;&#xff0c;包括C、C、ADA和…

EasyExcel(读取操作和填充操作)

文章目录 1.准备Read.xlsx&#xff08;具有两个sheet&#xff09;2.读取第一个sheet中的数据1.模板2.方法3.结果 3.读取所有sheet中的数据1.模板2.方法3.结果 EasyExcel填充1.简单填充1.准备 Fill01.xlsx2.无模版3.方法4.结果 2.列表填充1.准备 Fill02.xlsx2.模板3.方法4.结果 …

CKA认证 | Day7 K8s存储

第七章 Kubernetes存储 1、数据卷与数据持久卷 为什么需要数据卷&#xff1f; 容器中的文件在磁盘上是临时存放的&#xff0c;这给容器中运行比较重要的应用程序带来一些问题。 问题1&#xff1a;当容器升级或者崩溃时&#xff0c;kubelet会重建容器&#xff0c;容器内文件会…

关于JAVA方法值传递问题

1.1 前言 之前在学习C语言的时候&#xff0c;将实参传递给方法&#xff08;或函数&#xff09;的方式分为两种&#xff1a;值传递和引用传递&#xff0c;但在JAVA中只有值传递&#xff08;颠覆认知&#xff0c;基础没学踏实&#xff09; 参考文章&#xff1a;https://blog.csd…

Excel基础知识

一&#xff1a;数组 一行或者一列数据称为一维数组&#xff0c;多行多列称为二维数组&#xff0c;数组支持算术运算&#xff08;如加减乘除等&#xff09;。 行&#xff1a;{1,2,3,4} 数组中的每个值用逗号分隔列&#xff1a;{1;2;3;4} 数组中的每个值用分号分隔行列&#xf…