当前位置: 首页 > 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.jsqmd.com/news/894847/

相关文章:

  • 游戏手柄+AI编程:用Wispr Flow打造免提式代码生成工作流
  • 量子材料表征的物理信息学习框架与合成数据技术
  • Windows Server 2012上装SQL Server 2012,第一步.NET 3.5就卡住了?保姆级避坑指南
  • 2026年靠谱的上海前置过滤器/篮式过滤器批量采购厂家推荐 - 品牌宣传支持者
  • 从定时调度到事件驱动:AI流水线编排的范式转变与实践
  • Java中线程的6种状态详解(NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED)
  • AI语音智能体后端架构实战:从事件驱动到高并发优化
  • Unity游戏开发:用Dotween实现材质透明度动画的暂停、倒放与精准控制(附完整代码)
  • Qt 文件与路径处理笔记
  • 企业级智能体工作流:从MCP协议到工程化落地的架构实践
  • Keil C51调试器DLL加载问题解决方案
  • AI工具演进临界点已至(2030倒计时3年预警):基于IEEE 2024技术成熟度曲线的深度推演
  • 艾多美非传销不靠“概念”,只凭“品质”
  • 从零构建本地语音AI助手:架构设计、模型选型与实战优化
  • 从“恨”到“爱”:构建自动化、规范化的高效发布说明工作流
  • 2026年靠谱的艺术漆/贵州玉石漆/贵州夯土漆/贵州树皮漆厂家精选合集 - 行业平台推荐
  • 2026 年 6月钢材钢管实体厂家采购推荐
  • 深度日志审计:从后见之明到先见之明的系统化实践
  • 小鹏汽车团队打造了一个专门测试AI“耳朵“的考场
  • OpenClaw从入门到应用——工具(Tools):Brave Search
  • 别再只会用主相机了!Unity多相机玩法实战:小地图、分屏、画中画一次搞定
  • LLM如何赋能Terraform:四大核心场景与实战工作流解析
  • AI智能体规模化落地:从流程重设计到人机协作合约
  • 人脸识别KYC验证如何提升30%用户通过率?揭秘旷视FaceID核心架构
  • 2026年质量好的贵州肌理漆/贵州瓷砖背胶稳定供货厂家推荐 - 行业平台推荐
  • 揭秘ATS简历筛选:构建模拟器拆解自动化招聘黑盒
  • 2026年比较好的贵州环氧彩砂自流平/贵州液体卷材推荐品牌厂家 - 品牌宣传支持者
  • 利用亮数据网络解锁API进行数据采集
  • Springboot接口如何接收多个文件?如何将其保存到服务器?一文详解
  • AI应用可观测性实战:Opik开源工具助力MLOps全链路监控与优化