文件上传漏洞--理论
什么是文件上传漏洞?
Web应用允许用户上传文件,但是没有对上传的文件进行严格的过滤和检测,导致网站执行了文件中包含的恶意代码。
漏洞的基本利用方式是:
成功上传包含恶意代码的文件,并在服务端成功执行该文件。
可见实现该漏洞的两个要点在于上传与执行。
一句话木马
指仅由一行代码构成的木马文件。通过在服务端植入这行代码,就能获取到执行服务端命令的权限。
下面是最基本的一句话木马:
//shell.php
<?php @eval($_POST[1]);?>
@指即使后面发生错误也不报错。
eval()函数将函数中的内容当作php代码执行。
$_POST[1]表示通过POST向网页传递名为1的参数。
当我们成功上传木马程序后,只要能找到它在目标服务器的对应位置,就能打开该程序并执行系统命令。
一句话木马的其他形式:
<?=@eval($_POST['cmd']);?> //短标签,适合过滤php时使用
<% @eval($_POST['cmd']);%> //asp风格
<script language='php'>@eval($_POST['cmd']);</script> //<script>风格,适合过滤<?时使用
常见的文件上传漏洞
前端校验
有些网站将对上传文件的检测及过滤功能写在了前端,导致攻击者能够轻松绕过检测。
例如下面这个界面,就是将检测功能写在了前端。
我们注意到该页面只允许上传后缀为png的文件。对于这种情况,我们常用的绕过方法有两种。
第一种: 修改前端代码。
F12–查看器,将相应的位置修改为php,就可以上传php后缀的文件。

第二种: 将我们的.php文件修改为.png文件,然后上传并抓包,在请求体中将后缀名修改回.php,同样绕过了前端检测。
MIME验证
对文件的媒体类型进行检测,媒体类型信息在请求头中位于文件的Content-Type位置,如果不符合上传要求,就会被拦截。
对于这种检测,我们的绕过方式是将Content-Type修改为允许上传的类型。
常见的图片格式媒体类型:
image/jpeg:JPEG格式图片;
image/gif:GIF格式图片;
image/png:PNG格式图片;
后端过滤后缀名(.user.ini)
在服务端的后端定义了一个后缀名黑名单,并会检测用户上传文件的后缀名是否位于该黑名单中。如果在,则拒绝上传。
对于这种过滤,我们只能将木马程序的后缀名修改为合法的后缀名才能成功上传。
但是这种情况下,服务端就不会将我们的木马程序解析为PHP程序,也就不能正常执行我们的木马。
为了让服务器能够以正常执行我们的程序,可以上传 .user.ini 文件。
//.user.ini
auto_prepend_file=shell.png
这个文件的作用是:在访问主页文件时,会自动包含shell.png文件,将其文件内容当做php代码执行。
如果我们上传的文件在/upload目录下,那么upload就是shell.png的主页文件。我们访问/upload时,会自动包含并以php代码形式执行shell.png中的恶意代码。
文件内容过滤
即服务器后端对文件的内容进行了检测,如果其中包含不合规的内容,就会拒绝文件上传。
常见过滤及绕过:
过滤php 使用短标签 <?= 绕过
过滤[] 使用{}绕过
过滤[]和{} 不能使用一句话木马,直接上传RCE代码
过滤() 使用反引号执行RCE
过滤()和反引号 不能正常上传恶意代码,考虑使用日志注入
相关文章:
文件上传漏洞--理论
什么是文件上传漏洞? Web应用允许用户上传文件,但是没有对上传的文件进行严格的过滤和检测,导致网站执行了文件中包含的恶意代码。 漏洞的基本利用方式是: 成功上传包含恶意代码的文件,并在服务端成功执行该文件。 …...
快速入门Selenium自动化测试
一、背景与意义 Selenium是常用的Web自动化测试工具,前端开发工程师可以在完成每项开发任务之后,使用Selenuim做一下回归测试,以避免被提BUG太多导致后面做项目总结时太难看。测试工程师学习Selenium时需要掌握很多API接口,例如页…...
C++指针使用指南
指针 适合指针的情况 动态内存管理 C 语言中,malloc、calloc 和 free 等函数用于动态分配和释放内存,这些函数返回的都是指针类型。通过指针,可以动态创建和管理内存区域,尤其在需要动态数组或复杂数据结构(如链表、…...
一文学会,利用LLaMA 3.2打造能“识图断字”的个人AI助理
人工智能最直接也是最普及的应用之一肯定是聊天机器人,或者叫个人 AI 助理。尽管聊天机器人以各种形式存在了30年,但在过去两年中,这些个人AI助理才真正成为热门应用。它们已经从前沿技术范畴落地到生活的各个方面、社交场合和商业场景中。 虽…...
idea的mapper.xml文件里写sql语句出现Tag name expected错误提示
原因如下: xml文件的某些特殊字符是自动转义的, xml解析器会忽视CDATA中的内容 解决方法: 使用下面的表达式表示对应符号。 小于(<):<大于(>):>和号(&):&单引号():'双引…...
EasyExcel 使用多线程按顺序导出数据
通过多线程读取数据,使用EasyExcel按顺序导出数据 导出时如果要保证顺序需要使用单线程,但是查询时可以用多线程,因为多线程查询后返回数据不是按照顺序排列的,所以我的思路是再循环时给每个线程打标识,通过标识来排序…...
数据驱动的投资分析:民锋科技的量化模型探索
在全球金融市场中,数据驱动的投资分析正在变革传统投资方式。民锋科技通过精密的量化模型和智能算法,为投资者提供更加科学的市场预测和投资分析工具,以帮助他们更好地理解市场波动、优化投资组合,实现风险管理。 #### 一、数据驱…...
cesium 设置相机视角 flyTo 参数destination,orientation
效果 // 监听相机的改变 用来设置相机飞行到哪里window.viewer.camera.changed.addEventListener(function () {// 当相机改变时,获取相机的参数let camera window.viewer.camera;// 获取当前摄像机的位置(经纬度)let cameraPosition wind…...
vue+Leaflet.PM插件实现创建和编辑几何图形(点、线、面、圆等)
场景 VueLeaflet实现加载OSM显示地图:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/122317394在上面加载显示OSM的基础上,使用Leaflet.pm插件实现在页面上绘制、编辑、剪切、移动几何元素。Leaflet.pm插件 用于创建和编辑几何图层的插件可…...
Rust语言在系统编程中的应用
💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 Rust语言在系统编程中的应用 Rust语言在系统编程中的应用 Rust语言在系统编程中的应用 引言 Rust 概述 定义与原理 发展历程 Ru…...
test 是 JavaScript 中正则表达式对象 (RegExp) 的一种方法,用于测试一个字符串是否匹配某个正则表达式
在你的代码中,test 方法用于验证扫描结果是否符合特定的格式要求。具体来说,/^[A-Za-z\d]{16}$/.test(res.result) 这一行代码用于检查扫描结果 res.result 是否是一个由16个字母或数字组成的字符串。 test 方法的作用 正则表达式匹配: ^ 表…...
大厂社招3年-力扣热点高频刷题记录(已更新100+道热点题)
前言: 最近从大厂出来看机会,大厂面试基本都考察算法,于是维护此文档,一是查缺补漏,确保整体热点算法题目的应知应会,与思路的灵活理解;二是分享出来给其他同学朋友做一个参考借鉴,共…...
6.2 对角化矩阵(2)
五、不能对角化的矩阵 假设 λ \lambda λ 是 A A A 的一个特征值,我们从两个方面发现这个事实: 特征向量(几何的): A x λ x A\boldsymbol x\lambda\boldsymbol x Axλx 有非零解。特征值(代数的&…...
ubuntu24.04播放语音视频
直接打开ubuntu自带的video播放.mp4文件,弹窗报错如下: 播放此影片需要插件 MPEG-4 AAC 编码器安装方式: sudo apt install gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly sudo apt install ffmpeg验证AA…...
GPT4的下一代Orion已经降速了?
嘿,大家好,我是小索奇!说起AI,相信不少人都和我一样,总感觉这玩意儿发展得就像装了火箭,快得让人眼花缭乱。咱们从GPT-3到GPT-4,一路哇哦着过来,天天惊叹它越来越聪明,越…...
SpringCloud框架学习(第二部分:Consul、LoadBalancer和openFeign)
目录 六、Consul服务注册和发现 1.基本介绍 2.下载运行 3.服务注册与发现 (1)支付服务provider8001注册进consul (2)修改订单服务cloud-consumer-order80 4.CAP (1)CAP理论 (2&#x…...
Linux 批量配置互信
批量配置SSH互信脚本 #!/bin/bash# 定义目标机器列表 machines( "192.168.122.87" "192.168.122.89" "192.168.122.90" ) set -o errexit # 设置默认的用户名和密码 default_username"root" default_password"111111"# 读取…...
设计定长的内存池
目录 定长内存池设计设计思路具体实现定长内存池初始化T*New()申请内存代码 void Delete(T* obj)回收内存代码 设计的总代码测试代码 Objectpool.h文件代码test.cpp文件代码拓展windows和Linux下如何直接向堆申请页为单位的大块内存: 感谢各位大佬对我的支持,如果我…...
【动手学电机驱动】 STM32-FOC(7)基于 MCSDK6.0 控制与调试速度环
STM32-FOC(1)STM32 电机控制的软件开发环境 STM32-FOC(2)STM32 导入和创建项目 STM32-FOC(3)STM32 三路互补 PWM 输出 STM32-FOC(4)IHM03 电机控制套件介绍 STM32-FOC(5&…...
无人机飞手考证,地面站培训技术详解
无人机飞手考证及地面站培训技术涉及多个关键方面,以下是对这些方面的详细解析: 一、无人机飞手考证流程与要求 1. 证书类型 民用无人机驾驶员证书:这是国家民航局颁发的无人机操作人员资质证书,分为视距内驾驶员、超视距驾驶员…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...
DAY 26 函数专题1
函数定义与参数知识点回顾:1. 函数的定义2. 变量作用域:局部变量和全局变量3. 函数的参数类型:位置参数、默认参数、不定参数4. 传递参数的手段:关键词参数5 题目1:计算圆的面积 任务: 编写一…...
【版本控制】GitHub Desktop 入门教程与开源协作全流程解析
目录 0 引言1 GitHub Desktop 入门教程1.1 安装与基础配置1.2 核心功能使用指南仓库管理日常开发流程分支管理 2 GitHub 开源协作流程详解2.1 Fork & Pull Request 模型2.2 完整协作流程步骤步骤 1: Fork(创建个人副本)步骤 2: Clone(克隆…...
