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.文件头检测 定义 文件上传漏洞是指攻击者上传了一个可执行文件(如木马…...
ubuntu20.04 调试bcache源码
搭建单步调试bcache的环境,/dev/sdb作为backing dev, /dev/sdc作为cache dev。 一、宿主机环境 1)安装ubuntu 20.04 : 参考ubuntu20.04 搭建kernel调试环境第一篇--安装系统_ubuntu kernel-CSDN博客安装,其中的第六…...
全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之循环结构(for循环语句)(四)
实战训练1—最大差值 问题描述: 输入n个非负整数,找出这个n整数的最大值与最小值,并求最大值和最小值的差值。 输入格式: 共两行,第一行为整数的个数 n(1≤n≤1000)。第二行为n个整数的值(整…...
基于深度学习(HyperLPR3框架)的中文车牌识别系统-python程序开发测试
本篇内容为python开发,通过一个python程序,测试搭建的开发环境,读入一张带有车牌号的图片,成功识别出车牌号。 1、通过PyCharm新建一个工程,如:PlateRecognition,配置虚拟环境。 2、在工程中新…...
【SpringMVC】拦截器
拦截器(Interceptor)是一种用于动态拦截方法调用的机制。在 Spring MVC 中,拦截器能够动态地拦截控制器方法的执行过程。以下是请求发送与接收的基本流程: 当浏览器发出请求时,请求首先到达 Tomcat 服务器。Tomcat 根…...
离线的方式:往Maven的本地仓库里安装依赖
jar文件及源码的绝对路径,gav坐标,打包方式,Maven本地仓库的路径 mvn install:install-file ^-DfileD:\hello-spring-boot-starter-1.0-SNAPSHOT.jar ^-DsourcesD:\hello-spring-boot-starter-1.0-SNAPSHOT-sources.jar ^-DgroupIdcom.examp…...
短视频矩阵系统后端源码搭建实战与技术详解,支持OEM
一、引言 随着短视频行业的蓬勃发展,短视频矩阵系统成为了众多企业和创作者进行多平台内容运营的有力工具。后端作为整个系统的核心支撑,负责处理复杂的业务逻辑、数据存储与交互,其搭建的质量直接影响着系统的性能、稳定性和可扩展性。本文将…...
ArcGIS Pro地形图四至角图经纬度标注与格网标注
今天来看看ArcGIS Pro 如何在地形图上设置四至角点的经纬度。方里网标注。如下图的地形图左下角经纬度标注。 如下图方里网的标注 如下为本期要介绍的例图,如下: 图片可点击放大 接下来我们来介绍一下 推荐学习:GIS入门模型构建器Arcpy批量…...
鸿蒙Next状态管理V2 - @Once初始化用法总结
一、概述 Once装饰器用于实现变量仅在初始化时同步一次外部传入值,后续数据源更改时不会将修改同步给子组件。其必须搭配Param使用,且不影响Param的观测能力,仅拦截数据源变化,与Param装饰变量的先后顺序不影响实际功能ÿ…...
全新免押租赁系统助力商品流通高效安全
内容概要 全新免押租赁系统的推出,可以说是一场商品流通领域的小革命。想象一下,不再为押金烦恼,用户只需通过一个简单的信用评估,就能快速租到所需商品,这种体验简直令人惊喜!这个系统利用代扣支付技术&a…...
VUE前端实现防抖节流 Lodash
方法一:采用Lodash工具库 Lodash 是一个一致性、模块化、高性能的 JavaScript 实用工具库。 (1)采用终端导入Lodash库 $ npm i -g npm $ npm i --save lodash (2)应用 示例:搜索框输入防抖 在这个示例…...
Redisson 框架详解
目录 一.为什么要使用分布式锁? 二.Redisson 的基本使用: 1.添加 Redisson 依赖: 2.在 application.yml 配置 Redis: 3. 创建 Redisson 客户端: (1)单节点模式: (…...
WebSocket 入门详解
开发领域:前端开发 | AI 应用 | Web3D | 元宇宙 技术栈:JavaScript、React、Three.js、WebGL、Go 经验经验:6年 前端开发经验,专注于图形渲染和AI技术 开源项目:智简未来 晓智元宇宙、数字孪生引擎 大家好!…...
chinahrt 题库
只针对 https://ouc-sz.chinahrt.com/center/MyExam import requests import time import random import pandas as pd from openpyxl import load_workbookexcel_file rC:\Users\N3verL4nd\Desktop\exam_answers.xlsx# 定义请求头,包含 Authorization headers {…...
uniapp通过v-if进行判断时,会出现闪屏?【已解决】
1.问题:按钮切换时,通过v-if来判断,会出现闪烁情况,影响用户体验 2.v-if 闪烁问题可能的原因 条件切换频繁:如果 v-if 指令的条件在短时间内频繁切换,会导致元素不断被销毁和重新创建,从而…...
jmeter设置tps、响应时间监测时间间隔
jmeter设置tps、响应时间监测时间间隔 思路: 1、设置tps和响应时间插件的采集时间间隔,然后运行jmeter脚本; 2、先按默认配置跑出jtl文件保存下来,再添加tps和响应时间插件,设置采集时间间隔后,导入jtl文件…...
Android Notification 问题:Invalid notification (no valid small icon)
问题描述与处理策略 1、问题描述 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.my.notifications/com.my.notifications.MainActivity}: java.lang.IllegalArgumentException: Invalid notification (no valid small icon): Notification(chan…...
Kotlin 协程基础知识总结四 —— Flow
异步流 Flow 主要内容: 认识:特性、构建器与上下文、启动、取消与取消检测特性、缓冲操作符:过渡操作符、末端操作符、组合、扁平异常:异常处理、完成 1、认识 1.1 如何异步返回多个值 挂起函数可以异步返回单个值,…...
Ubuntu24.04安装NVIDIA驱动及工具包
Ubuntu24.04安装NVIDIA驱动及工具包 安装nvidia显卡驱动安装cuda驱动安装cuDNN安装Anaconda 安装nvidia显卡驱动 NVIDIA 驱动程序(NVIDIA Driver)是专为 NVIDIA 图形处理单元(GPU)设计的软件,它充当操作系统与硬件之间…...
雷电模拟器安装LSPosed
雷电模拟器最新版支持LSPosed。记录一下安装过程 首先到官网下载并安装最新版,我安装的时候最新版是9.1.34.0,64位 然后开启root和系统文件读写 然后下载magisk-delta-6并安装 ,这个是吾爱破解论坛提供的,号称适配安卓7以上所有机型&#x…...
基于深度学习(HyperLPR3框架)的中文车牌识别系统-搭建开发环境
本篇内容为搭建开发环境。包括:python开发环境,Qt/C开发环境,以及用到的各个库的安装和配置。 一、Python开发环境搭建与配置 1、下载并安装Anaconda 我没有用最新的版本,安装的是 Anaconda3-2021.05-Windows-x86_64.exe&#…...
TCP 为什么采用三次握手和四次挥手以及 TCP 和 UDP 的区别
1. TCP 为什么采用三次握手和四次挥手 采用三次握手的原因: 确认双方的收发能力。第一次握手,客户端发送 SYN 报文,告诉服务器自身具备发送数据的能力,第二次握手,服务器回应 SYN ACK 报文,表名自己既能…...
Apriori关联规则算法 HNUST【数据分析技术】(2025)
1.理论知识 Apriori是一种常用的数据关联规则挖掘方法,它可以用来找出数据集中频繁出现的数据集合。该算法第一次实现在大数据集上的可行的关联规则提取,其核心思想是通过连接产生候选项及其支持度,然后通过剪枝生成频繁项集。 Apriori算法的…...
Sqoop的使用
每个人的生活都是一个世界,即使最平凡的人也要为他那个世界的存在而战斗。 ——《平凡的世界》 目录 一、sqoop简介 1.1 导入流程 1.2 导出流程 二、使用sqoop 2.1 sqoop的常用参数 2.2 连接参数列表 2.3 操作hive表参数 2.4 其它参数 三、sqoop应用 - 导入…...
华为 IPD,究竟有什么特点?(一)
关注作者 (一)华为版 IPD 特点一:一定要让研发转身为作战 部队 冲到前台的研发,应主动拉通公司上下游,向前抓需求,向后支撑可制造性、可 服务性,并推动制造、服务的改进。 1)研发从…...
Go快速开发框架2.6.0版本更新内容快速了解
GoFly企业版框架2.6.0版本更新内容较多,为了大家能够快速了解,本文将把更新内容列出详细讲解。本次更新一段时间以来大伙反馈的问题,并且升级后台安全认证机制,增加了RBAC权限管理及系统操作日志等提升后台数据安全性。 更新明细…...
C++的第一个程序
前言 在学习c之前,你一定还记得c语言的第一个程序 当时刚刚开始进行语言学习 因此告诉到,仅仅需要记住就可以 #include <stdio.h>int main(){printf("Hello World");return 0; }而对于c中的第一个程序,似乎有所变化 C的…...
《机器学习》线性回归模型实现
目录 一、一元线性回归模型 1、数据 2、代码 3、结果 二、多元线性回归模型 1、数据 2、代码 3、结果 一、一元线性回归模型 1、数据 2、代码 # 导入所需的库 import pandas as pd # 用于数据处理和分析 from matplotlib import pyplot as plt # 用于数据可视化 fr…...
蓝桥杯速成教程{三}(adc,i2c,uart)
目录 一、adc 原理图编辑引脚配置 Adc通道使能配置 实例测试 编辑效果显示 案例程序 badc 按键相关函数 测量频率占空比 main 按键的过程 显示界面的过程 二、IIC通信-eeprom 原理图AT24C02 引脚配置 不可用状态,用的软件IIC 官方库移植 At24c02手册 编辑…...
【Agent】Chatbot、Copilot与Agent如何帮助我们的提升效率?
人工智能(AI)技术的迅猛发展正在深刻改变我们的生活和工作方式。你是否曾想过,未来的工作场景会是什么样子?AI的崛起不仅仅是科技的进步,更是我们生活方式的革命。今天,我们将深入探讨三种主要的AI能力&…...
PostgreSQL 数据库连接
title: PostgreSQL 数据库连接 date: 2024/12/29 updated: 2024/12/29 author: cmdragon excerpt: PostgreSQL是一款功能强大的开源关系数据库管理系统,在现代应用中广泛应用于数据存储和管理。连接到数据库是与PostgreSQL进行交互的第一步,这一过程涉及到多个方面,包括连…...
C++ 设计模式:中介者模式(Mediator Pattern)
链接:C 设计模式 链接:C 设计模式 - 门面模式 链接:C 设计模式 - 代理模式 链接:C 设计模式 - 适配器 中介者模式(Mediator Pattern)是行为型设计模式之一,它的主要目的是通过一个中介者对象来…...
计算机网络期末复习
目录 第一章-概述 第二章-物理层 第三章-数据链路层 第四章-网络层 第五章-运输层 第六章-应用层 试卷 郑州轻工业大学--计算机网络(谢希仁-第八版)--期末复习重点题型及试卷 如果有答案错乱或者不对的地方请告知一下,感谢࿰…...
JUC并发工具---线程协作
信号量能被FixedThreadPool代替吗 Semaphore信号量 控制需要限制访问量的资源,没有获取到信号量的线程会被阻塞 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore;public class Sem…...
SkyWalking java-agent 是如何工作的,自己实现一个监控sql执行耗时的agent
Apache SkyWalking 是一个开源的应用性能监控 (APM) 工具,支持分布式系统的追踪、监控和诊断。SkyWalking Agent 是其中的一个重要组件,用于在服务端应用中收集性能数据和追踪信息,并将其发送到 SkyWalking 后端服务器进行处理和展示。 SkyW…...
Linux 常用命令 - pwd 【显示当前工作目录】
简介 pwd 命令来源于 “print working directory”,即“打印当前工作目录”。这个命令的最主要功能就是显示当前用户所在的完整目录路径。在实际工作中我们经常会频繁在各个目录下进行切换,为了快速获取当前我们所在的目录,可以使用该命令进…...
如何在 Ubuntu 上安装 PyTorch
简介 PyTorch 因其易用性、动态计算图和高效性而日益流行,成为实现深度学习模型的首选。如果你想探索这个工具并学习如何在 Ubuntu 上安装 PyTorch,本指南将对你有所帮助! 在本教程中,我们将引导你完成在 Ubuntu 系统上使用 Pip…...
redis优化
在高并发、高性能、高可用系统中,Redis 的优化至关重要。以下是一些在面试中可以详细说明的 Redis 优化策略,以及具体的实践经验和技术亮点: 1. 数据模型与结构设计优化 使用合适的数据结构 :根据业务需求选择合适的 Redis 数据结…...
QT的信号和槽页面的应用
完善对话框,点击登录弹出对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面 如果账号和密码不匹配&…...
Jmeter自学【8】- 使用JMeter模拟设备通过MQTT发送数据
今天使用jmeter推送数据到MQTT,给大家分享一下操作流程。 一、安装JMeter 参考文档:Jmeter自学【1】- Jmeter安装、配置 二、安装MQTT插件 1、下载插件 我的Jmeter版本是5.6.3,用到的插件是:mqtt-xmeter-2.0.2-jar-with-depe…...
深度学习任务中的 `ulimit` 设置优化指南
深度学习任务中的 ulimit 设置优化指南 1. 什么是 ulimit?2. 深度学习任务中的关键 ulimit 设置2.1 max locked memory(-l)2.2 open files(-n)2.3 core file size(-c)2.4 stack size(…...
C++(Qt)软件调试---VS性能探查器(27)
文章目录 [toc]1 概述🐜2 VS工具说明2.1 使用场景2.2 工具适用项目 3 CPU使用率4 内存分析4.1 调试模式下分析内存4.2 非调试模式下分析内存 5 相关地址🐐 更多精彩内容👉内容导航 👈👉C软件调试 👈 1 概述…...
Spring源码_05_IOC容器启动细节
前面几章,大致讲了Spring的IOC容器的大致过程和原理,以及重要的容器和beanFactory的继承关系,为后续这些细节挖掘提供一点理解基础。掌握总体脉络是必要的,接下来的每一章都是从总体脉络中, 去研究之前没看的一些重要…...
【c语言】简单的c程序设计
内存 1byte8bit 1KB1024byte 1MB1024byte 1G1024MB 1T1024G 变量 变量可以由数字、字母和下划线组成且不能以数字开头任何不满足条件的变量都是非法变量,如含有特殊字符的变量等变量不能含有空白字符,如空格、换行符等变量区分大小写变量不能是c语言…...
k8s dashboard可视化操作界面的安装
一、官方安装方法 根据官网的安装配置可以选择如下安装: kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml 二、添加阿里云加速进行安装 #修改recommended.yaml拉取镜像的链接 vim recommended.yam…...
鸿蒙项目云捐助第三十一讲云捐助项目云前台显示商品列表
鸿蒙项目云捐助第三十一讲云捐助项目云前台显示商品列表 前面完成了云数据库后台的商品批量添加,这里需要把数据放在分类导航页面中显示。 一、云前台显示商品列表 这里需要把商品列表显示在MyNavSliderBar的组件中,MyNavSliderBar组件是通过首页路由实现的,在项…...
【rustdesk】客户端和服务端的安装和部署(自建服务器,docker,远程控制开源软件rustdesk)
【rustdesk】客户端和服务端的安装和部署(自建服务器,docker) 一、官方部署教程 https://rustdesk.com/docs/zh-cn/client/mac/ 官方服务端下载地址 https://github.com/rustdesk/rustdesk-server/releases 我用的docker感觉非常方便&am…...
Flink源码解析之:如何根据算法生成StreamGraph过程
Flink源码解析之:如何根据算法生成StreamGraph过程 在我们日常编写Flink应用的时候,会首先创建一个StreamExecutionEnvironment.getExecutionEnvironment()对象,在添加一些自定义处理算子后,会调用env.execute来执行定义好的Flin…...
【Spring MVC 核心机制】核心组件和工作流程解析
在 Web 应用开发中,处理用户请求的逻辑常常会涉及到路径匹配、请求分发、视图渲染等多个环节。Spring MVC 作为一款强大的 Web 框架,将这些复杂的操作高度抽象化,通过组件协作简化了开发者的工作。 无论是处理表单请求、生成动态页面&#x…...
2、Bert论文笔记
Bert论文 1、解决的问题2、预训练微调2.1预训练微调概念2.2深度双向2.3基于特征和微调(预训练下游策略) 3、模型架构4、输入/输出1.输入:2.输出:3.Learned Embeddings(学习嵌入)1. **Token Embedding**2. **Position Embedding**3…...