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

文件上传漏洞一些笔记

一、文件上传漏洞介绍

文件上传是由于程序员未对上传的文件做严格的校验和过滤,然后导致用户可以越过其本身的权限,来向服务器上传一个可以执行的动态脚本文件

常见的文件上传由:上传图片,上传附件,上传头像等

如果说过滤不严格,恶意用户利用文件上传漏洞,上传有害的可以执行脚本文件到服务器中(上传webshell)可以获取服务器的权限,或进一步危害服务器

二、文件上传漏洞的危害

通过一个非法上传的恶意文件,例如上传一个webshell,上传 webshell 后门 很方便地查看服务器信息,查看目录,执行系统命令

三、文件上传漏洞的原理

核心原因在于服务器对用户上传的文件处理不当,未能进行充分、有效的安全验证和限制

四、webshell写法

我们通过文件上传漏洞,上传一个webshell,来获取服务器的信息,查看目录,执行命令等操作,那webshell如何去写?

常见的就是一句话木马,例如:<script language="php">Eval($_POST['a']);</script>

我们来分析一下这个木马:它是利用早期PHP支持的特殊标签格式进行伪装,其核心是利用eval()函数执行通过POST请求传入的任意代码,从而实现远程控制服务器的目的

其中eval()函数:这是PHP中一个极其强大但也极其危险的函数。它的作用是将传入的字符串作为PHP代码来执行。攻击者通过控制这个字符串的内容,就可以在服务器上执行任意PHP代码

$_POST['a']超全局变量:这是PHP用于接收HTTP POST请求中名为'a'的表单数据或参数的变量。这意味着攻击者可以通过向包含这段木马的网页发送一个HTTP POST请求,并在请求体中携带一个名为a的参数(例如a=echo 'hello world';a=system('whoami');),来控制eval()函数实际执行的代码内容

一句话木马的核心原理:利用服务器端语言执行动态传入的代码

操作步骤:

我们通过burp抓包后,通过修改文件的后缀名,例如.php,.phtml等,将一句话木马插入数据包中,点击sent,然后渲染一下,发现上传成功,在本地浏览器查看一下这个文件,发现文件是自己插入的文字或者php界面,那就是上传成功了

然后打开webshell管理工具,打开蚁剑,添加这个文件地址,例如ip/upload/1.php

然后我们尝试连接

如果连接成功,那么我们就可以通过蚁剑来获取对方文件目录,在上面执行命令操作

然而我们实际操作练习当中,会有不同的情况,那么webshell就会变得多样,有着不同的写法

第一种情况:后缀名限制与绕过

可以使用大小写绕过,例如Php

尝试特殊后缀:.phtml,.phar,.php3,.php4,.php5等历史遗留后缀,如果服务器配置允许解析它们为PHP。

或者尝试双写和重复后缀:尝试file.php.jpgfile.php.php,如果服务器仅检查最后一个后缀或存在逻辑漏洞

尝试其他脚本语言:如果服务器支持ASP、JSP等,编写相应语言的Webshell

第二种情况:内容类型 (MIME Type) 检查

服务器检查上传头部的文件类型:Content-Type或者image/jpeg

Webshell 编写方法:伪造MIME类型在Burp Suite等工具中拦截上传请求,将Content-Type修改为允许的类型(如image/jpeg),即使文件内容实际是PHP代码

编写图片马:将Webshell代码嵌入到真实的图片文件中

使用文件拼接方式,生成一个新文件,文件头部是图片数据,尾部是PHP代码。如果服务器只检查文件头部的魔数(Magic Bytes),可能被当作图片接受,但当访问该文件时,尾部的PHP代码会被执行

第三种情况:文件内容检测

服务器不仅检查后缀和MIME,还会扫描文件内容是否包含危险关键词(如<?php,eval,system

1、我们可以进行代码混淆:使用base64_decode包裹执行代码

2、十六进制编码:直接拼接十六进制字符串

3、字符串拼接/反转/异或:将敏感函数名或关键词拆分成多个部分,在运行时拼接或运算还原

4、利用动态函数调用:如$_GET['f']($_GET['c']);,通过参数传递函数名和命令

第四种情况:文件重命名

服务器在上传后自动重命名文件(如使用时间戳+随机数),用户无法控制最终文件名

条件竞争:如果上传后文件会短暂保留原始名,或者重命名操作不是原子的,可以编写脚本快速、连续地访问上传目录下的潜在文件名(如shell.php,upload.php),在文件被重命名或删除前执行它

路径/文件名注入:尝试在文件名中包含目录遍历字符(如../)或特殊字符,试图控制文件保存的部分路径或影响重命名逻辑(较少成功)

利用文件包含:如果存在另一个文件包含漏洞(如LFI),并且知道上传文件的存储路径模式,可以尝试结合文件包含来执行被重命名的Webshell文件

第五种情况:文件大小限制

服务器限制了上传文件的最大尺寸

编写极其精简的Webshell,最经典的是一句话木马:<?php eval($_POST['cmd']);?>

或更短的:<?=`$_GET[1]`?>通过 ?1=whoami 执行命令

我们需要注意环境适应性:方法是否成功高度依赖于目标服务器配置(PHP版本、模块、中间件、权限)

五、文件上传的防御思路

  • 防御的核心就是在服务器端实施严格、多层、互补的安全检查
  • 1、使用白名单限制允许上传的文件扩展名。 (比黑名单更可靠)
  • 2、在服务器端检查文件真实的类型(Magic Number / 文件头)。
  • 3、对文件内容进行检测或过滤(如检查图片是否包含恶意代码)。
  • 4、对上传的文件进行重命名(使用随机字符串)。
  • 5、对图片等文件进行二次渲染(最彻底但成本较高)。
  • 6、限制上传文件的大小
  • 7、及时更新服务器软件,修复已知的解析漏洞

六、修复方案

在网站中需要存在上传模块,需要做好权限认证,不能让匿名用户可访问。

文件上传目录设置为禁止脚本文件执行。这样设置即使被上传后门的动态脚本也不能解析,导致攻击者放弃这个攻击途径

设置上传白名单,白名单只允许图片上传,如除了jpg, png, gif 其他文件均不允许上传

上传的后缀名,一定要设置成图片格式如 jpg png gif

http://www.zskr.cn/news/1399553.html

相关文章:

  • 论文AI查重免费查重软件有哪些?6款实用工具整理
  • 从‘改个颜色’到‘抓个Bug’:手把手教你用Chrome Elements面板完整排查一个前端样式问题
  • 多智能体共识机制全解析:从Paxos到区块链的工程选型指南
  • Java中线程的6种状态详解(NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED)
  • 2609.告别低效铺货!小红书千帆自动铺货助手的核心功能与运营提效逻辑
  • Qt 文件与路径处理笔记
  • AI工具演进临界点已至(2030倒计时3年预警):基于IEEE 2024技术成熟度曲线的深度推演
  • ctf show web 入门255
  • 深度日志审计:从后见之明到先见之明的系统化实践
  • 小鹏汽车团队打造了一个专门测试AI“耳朵“的考场
  • AI编程Agent:职场新宠还是代码刺客?
  • 别再只调sklearn的KMeans了!手把手教你从零实现K-means聚类(含欧式、曼哈顿、余弦距离对比)
  • AI智能体规模化落地:从流程重设计到人机协作合约
  • 2026年比较好的贵州环氧彩砂自流平/贵州液体卷材推荐品牌厂家 - 品牌宣传支持者
  • Springboot接口如何接收多个文件?如何将其保存到服务器?一文详解
  • 基于RAG与LangChain构建防幻觉股票研究智能体:从数据管道到工程实践
  • AI应用可观测性实战:Opik开源工具助力MLOps全链路监控与优化
  • 2026年质量好的刷式自清洗过滤器/上海前置过滤器/保安过滤器多家厂家对比分析 - 品牌宣传支持者
  • 从零构建本地语音AI助手:架构设计、模型选型与实战优化
  • IBM和南卡罗来纳大学的实验让答题准确率飙升28个百分点
  • 主动学习数据集划分
  • 【高录用|线上召开|国家级人才主讲】2026年航空航天与智能制造国际学术会议(ICoAIM 2026)
  • 从PCF到K8s:企业级PaaS平台迁移实战与架构演进
  • 从《最后生还者Online》取消看游戏开发项目管理与技术决策
  • OpenAI 这个模型推翻离散几何猜想,说明 AI 已经开始碰基础数学的硬问题
  • 548个免费浏览器工具集:纯前端实现、零成本运维与开发者生产力实践
  • 解决 TensorBoard 启动报错:ModuleNotFoundError: No module named ‘pkg_resources‘
  • 影像技术实战21:视频关键帧提取重复、黑屏、模糊?FFmpeg + OpenCV 构建可解释的关键帧筛选方案
  • 大模型PII保护实战:5种方法109次测试,量化隐私与性能的权衡
  • 2026年靠谱的自动化精密工业设备零部件/精密工业设备零部件公司哪家好 - 行业平台推荐