当前位置: 首页 > news >正文

文件上传漏洞--理论

什么是文件上传漏洞?

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
过滤()和反引号 不能正常上传恶意代码,考虑使用日志注入

相关文章:

文件上传漏洞--理论

什么是文件上传漏洞&#xff1f; Web应用允许用户上传文件&#xff0c;但是没有对上传的文件进行严格的过滤和检测&#xff0c;导致网站执行了文件中包含的恶意代码。 漏洞的基本利用方式是&#xff1a; 成功上传包含恶意代码的文件&#xff0c;并在服务端成功执行该文件。 …...

快速入门Selenium自动化测试

一、背景与意义 Selenium是常用的Web自动化测试工具&#xff0c;前端开发工程师可以在完成每项开发任务之后&#xff0c;使用Selenuim做一下回归测试&#xff0c;以避免被提BUG太多导致后面做项目总结时太难看。测试工程师学习Selenium时需要掌握很多API接口&#xff0c;例如页…...

C++指针使用指南

指针 适合指针的情况 动态内存管理 C 语言中&#xff0c;malloc、calloc 和 free 等函数用于动态分配和释放内存&#xff0c;这些函数返回的都是指针类型。通过指针&#xff0c;可以动态创建和管理内存区域&#xff0c;尤其在需要动态数组或复杂数据结构&#xff08;如链表、…...

一文学会,利用LLaMA 3.2打造能“识图断字”的个人AI助理

人工智能最直接也是最普及的应用之一肯定是聊天机器人&#xff0c;或者叫个人 AI 助理。尽管聊天机器人以各种形式存在了30年&#xff0c;但在过去两年中&#xff0c;这些个人AI助理才真正成为热门应用。它们已经从前沿技术范畴落地到生活的各个方面、社交场合和商业场景中。 虽…...

idea的mapper.xml文件里写sql语句出现Tag name expected错误提示

原因如下&#xff1a; xml文件的某些特殊字符是自动转义的, xml解析器会忽视CDATA中的内容 解决方法&#xff1a; 使用下面的表达式表示对应符号。 小于(<)&#xff1a;<大于(>)&#xff1a;>和号(&)&#xff1a;&amp;单引号()&#xff1a;&apos;双引…...

EasyExcel 使用多线程按顺序导出数据

通过多线程读取数据&#xff0c;使用EasyExcel按顺序导出数据 导出时如果要保证顺序需要使用单线程&#xff0c;但是查询时可以用多线程&#xff0c;因为多线程查询后返回数据不是按照顺序排列的&#xff0c;所以我的思路是再循环时给每个线程打标识&#xff0c;通过标识来排序…...

数据驱动的投资分析:民锋科技的量化模型探索

在全球金融市场中&#xff0c;数据驱动的投资分析正在变革传统投资方式。民锋科技通过精密的量化模型和智能算法&#xff0c;为投资者提供更加科学的市场预测和投资分析工具&#xff0c;以帮助他们更好地理解市场波动、优化投资组合&#xff0c;实现风险管理。 #### 一、数据驱…...

cesium 设置相机视角 flyTo 参数destination,orientation

效果 // 监听相机的改变 用来设置相机飞行到哪里window.viewer.camera.changed.addEventListener(function () {// 当相机改变时&#xff0c;获取相机的参数let camera window.viewer.camera;// 获取当前摄像机的位置&#xff08;经纬度&#xff09;let cameraPosition wind…...

vue+Leaflet.PM插件实现创建和编辑几何图形(点、线、面、圆等)

场景 VueLeaflet实现加载OSM显示地图&#xff1a;https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/122317394在上面加载显示OSM的基础上&#xff0c;使用Leaflet.pm插件实现在页面上绘制、编辑、剪切、移动几何元素。Leaflet.pm插件 用于创建和编辑几何图层的插件可…...

Rust语言在系统编程中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 Rust语言在系统编程中的应用 Rust语言在系统编程中的应用 Rust语言在系统编程中的应用 引言 Rust 概述 定义与原理 发展历程 Ru…...

test 是 JavaScript 中正则表达式对象 (RegExp) 的一种方法,用于测试一个字符串是否匹配某个正则表达式

在你的代码中&#xff0c;test 方法用于验证扫描结果是否符合特定的格式要求。具体来说&#xff0c;/^[A-Za-z\d]{16}$/.test(res.result) 这一行代码用于检查扫描结果 res.result 是否是一个由16个字母或数字组成的字符串。 test 方法的作用 正则表达式匹配&#xff1a; ^ 表…...

大厂社招3年-力扣热点高频刷题记录(已更新100+道热点题)

前言&#xff1a; 最近从大厂出来看机会&#xff0c;大厂面试基本都考察算法&#xff0c;于是维护此文档&#xff0c;一是查缺补漏&#xff0c;确保整体热点算法题目的应知应会&#xff0c;与思路的灵活理解&#xff1b;二是分享出来给其他同学朋友做一个参考借鉴&#xff0c;共…...

6.2 对角化矩阵(2)

五、不能对角化的矩阵 假设 λ \lambda λ 是 A A A 的一个特征值&#xff0c;我们从两个方面发现这个事实&#xff1a; 特征向量&#xff08;几何的&#xff09;&#xff1a; A x λ x A\boldsymbol x\lambda\boldsymbol x Axλx 有非零解。特征值&#xff08;代数的&…...

ubuntu24.04播放语音视频

直接打开ubuntu自带的video播放.mp4文件&#xff0c;弹窗报错如下&#xff1a; 播放此影片需要插件 MPEG-4 AAC 编码器安装方式&#xff1a; sudo apt install gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly sudo apt install ffmpeg验证AA…...

GPT4的下一代Orion已经降速了?

嘿&#xff0c;大家好&#xff0c;我是小索奇&#xff01;说起AI&#xff0c;相信不少人都和我一样&#xff0c;总感觉这玩意儿发展得就像装了火箭&#xff0c;快得让人眼花缭乱。咱们从GPT-3到GPT-4&#xff0c;一路哇哦着过来&#xff0c;天天惊叹它越来越聪明&#xff0c;越…...

SpringCloud框架学习(第二部分:Consul、LoadBalancer和openFeign)

目录 六、Consul服务注册和发现 1.基本介绍 2.下载运行 3.服务注册与发现 &#xff08;1&#xff09;支付服务provider8001注册进consul &#xff08;2&#xff09;修改订单服务cloud-consumer-order80 4.CAP &#xff08;1&#xff09;CAP理论 &#xff08;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下如何直接向堆申请页为单位的大块内存&#xff1a; 感谢各位大佬对我的支持,如果我…...

【动手学电机驱动】 STM32-FOC(7)基于 MCSDK6.0 控制与调试速度环

STM32-FOC&#xff08;1&#xff09;STM32 电机控制的软件开发环境 STM32-FOC&#xff08;2&#xff09;STM32 导入和创建项目 STM32-FOC&#xff08;3&#xff09;STM32 三路互补 PWM 输出 STM32-FOC&#xff08;4&#xff09;IHM03 电机控制套件介绍 STM32-FOC&#xff08;5&…...

无人机飞手考证,地面站培训技术详解

无人机飞手考证及地面站培训技术涉及多个关键方面&#xff0c;以下是对这些方面的详细解析&#xff1a; 一、无人机飞手考证流程与要求 1. 证书类型 民用无人机驾驶员证书&#xff1a;这是国家民航局颁发的无人机操作人员资质证书&#xff0c;分为视距内驾驶员、超视距驾驶员…...

音视频入门基础:MPEG2-TS专题(3)——TS Header简介

注&#xff1a;本文有部分内容引用了维基百科&#xff1a;https://zh.wikipedia.org/wiki/MPEG2-TS 一、引言 本文对MPEG2-TS格式的TS Header进行简介。 进行简介之前&#xff0c;请各位先下载MPEG2-TS的官方文档。ITU-T和ISO/IEC都分别提供MPEG2-TS的官方文档。但是ITU提供的…...

Sam Altman:年底将有重磅更新,但不是GPT-5!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;专注于分享AI全维度知识&#xff0c;包括但不限于AI科普&#xff0c;AI工…...

基于物联网的智能超市快速结算系统

摘 要 当今社会的商品层出不穷&#xff0c;人们因为越来越多大型仓储超市的出现使得生活更加便利&#xff0c;但许多随之而来的新问题也给人们带来了许多的不便&#xff0c;例如商家一直被更换标签不及时、货物丢失、超市内物品更换处理不及时、超市内人流高峰期人流控制不得…...

241111.学习日志——[CSDIY] Cpp零基础速成 [00]

CSDIY&#xff1a;这是一个非科班学生的努力之路&#xff0c;从今天开始这个系列会长期更新&#xff0c;&#xff08;最好做到日更&#xff09;&#xff0c;我会慢慢把自己目前对CS的努力逐一上传&#xff0c;帮助那些和我一样有着梦想的玩家取得胜利&#xff01;&#xff01;&…...

湘潭大学软件工程算法设计与分析实验-模拟退火算法

文章目录 写在前面代码分析 写在前面 总共是要四份代码&#xff0c;好像都是实现背包问题&#xff0c;前面三个都比较简单直观&#xff0c;朋友上周在机房给我讲解了一下之后&#xff0c;我大概弄清楚了&#xff0c;这周好像是最后一次算法课了&#xff0c;所以明天我得把剩下…...

Three.js 零基础+概念理解

文章目录 一、Three.js基础概念&#xff08;一&#xff09;什么是Three.js&#xff08;二&#xff09;核心对象&#xff08;三&#xff09;几何体&#xff08;Geometries&#xff09;和材质&#xff08;Materials&#xff09; 二、基础实例应用&#xff08;一&#xff09;创建一…...

c#使用COM接口设置excel单元格宽高匹配图片,如何计算?

c#使用COM接口设置excel单元格宽高如何换算 在实际工作中&#xff0c;经常需要在excel中插入图片。并设置单元格与图片对齐。但是excel单元格的宽度和高度使用不同的单位。单元格的宽度以字符宽度为单位&#xff0c;而高度以点为单位。如果按照实际值来设置&#xff0c;例如设…...

Excel模板下载\数据导出

pom <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version> </dependency><build><resources><resource><!--将xlsx打包到jar--><director…...

Vite初始化Vue3+Typescrpt项目

初始化项目 安装 Vite 首先&#xff0c;确保你的 Node.js 版本 > 12.0.0。然后在命令行中运行以下命令来创建一个 Vite Vue 3 TypeScript 的项目模板&#xff1a; npm init vitelatest进入项目目录 创建完成后&#xff0c;进入项目目录&#xff1a; cd vue3-demo启动…...

深入剖析【C++继承】:单一继承与多重继承的策略与实践,解锁代码复用和多态的编程精髓,迈向高级C++编程之旅

​​​​​​​ &#x1f31f;个人主页&#xff1a;落叶 &#x1f31f;当前专栏: C专栏 目录 继承的概念及定义 继承的概念 继承定义 定义格式 继承基类成员访问⽅式的变化 继承类模板 基类和派⽣类间的转换 继承中的作⽤域 隐藏规则 成员函数的隐藏 考察继承【作⽤…...