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

记一次网站PHP后端应用的目录结构泄露引起的简单代码审计

审计发现

1. UEditor编辑器上传(核心风险点)

首先给大家奉上泄露的文件目录结构,主要就是以下几个文件

1.1 文件结构

public/static/ueditor/php/ ├── controller.php # 路由入口 ├── action_upload.php # 上传处理 ├── action_crawler.php # 远程图片抓取 ├── action_list.php # 文件列表 ├── Uploader.class.php # 核心上传类 └── config.json # 配置文件

1.2 路由入口 - 无条件包含漏洞

$action=$_GET['action'];switch($action){case'uploadimage':case'uploadscrawl':case'uploadvideo':case'uploadfile':$result=include("action_upload.php");break;case'listimage':case'listfile':$result=include("action_list.php");break;case'catchimage':$result=include("action_crawler.php");break;}


漏洞点:

没有白名单验证 $action 的值,直接包含文件,没有检查文件是否存在

即用户控制action → 无验证 → 直接include → 可能导致任意文件包含

1.3 上传处理 - 配置信任漏洞

switch(htmlspecialchars($_GET['action'])){case'uploadimage':$config=array("pathFormat"=>$CONFIG['imagePathFormat'],"maxSize"=>$CONFIG['imageMaxSize'],"allowFiles"=>$CONFIG['imageAllowFiles']);$fieldName=$CONFIG['imageFieldName'];break;case'uploadfile':default:$config=array("pathFormat"=>$CONFIG['filePathFormat'],"maxSize"=>$CONFIG['fileMaxSize'],"allowFiles"=>$CONFIG['fileAllowFiles']);$fieldName=$CONFIG['fileFieldName'];break;}


漏洞点:

1.无条件信任配置文件,不验证配置值是否合法

2.默认分支缺陷:任何未知action都走uploadfile逻辑

即配置文件被篡改 → 白名单包含危险扩展名 → 上传类允许上传危险文件

1.4 核心上传类 - 扩展名校验漏洞

privatefunctioncheckType(){returnin_array($this->getFileExt(),$this->config["allowFiles"]);}privatefunctiongetFileExt(){returnstrtolower(strrchr($this->oriName,'.'));}


漏洞点:仅检查扩展名(strrchr($name, '.')

  • 无 MIME 类型校验
  • 无 magic bytes 校验
  • 无文件内容检查
  • 客户端 JS 校验可完全绕过

即仅检查扩展名 → 可伪造扩展名 → 上传伪装文件 → Web服务器解析执行

整体攻击链分析:

步骤代码环节具体行为为什么成功
1路由入口action=uploadfile进入上传分支没有白名单验证,直接包含
2上传配置config.json读取fileAllowFiles信任配置,可能包含.jpg
3上传类-扩展名getFileExt()返回.jpgstrrchr只取最后一个点
4上传类-校验in_array('.jpg', $allowFiles)通过检查(白名单有.jpg)
5保存文件保存为shell.php;.jpg未重命名,使用原始文件名
6Web服务器Apache解析文件分号被忽略,当作PHP执行

其他上传端点

Action功能端点
uploadimage图片上传/static/ueditor/php/controller.php?action=uploadimage
uploadscrawl涂鸦上传/static/ueditor/php/controller.php?action=uploadscrawl
uploadvideo视频上传/static/ueditor/php/controller.php?action=uploadvideo
uploadfile文件上传/static/ueditor/php/controller.php?action=uploadfile
catchimage远程图片抓取/static/ueditor/php/controller.php?action=catchimage

一句话总结:

路由入口无条件信任用户输入,配置文件提供可被操纵的白名单,上传类仅做简单的扩展名检查(且提取逻辑存在缺陷),文件未重命名保存,这四个缺陷串联形成了完整的文件上传漏洞链,可上传伪装成图片的Webshell并执行任意代码。

1.5 配置文件

文件类型白名单:

类型允许扩展名
图片.png, .jpg, .jpeg, .gif, .bmp
视频.flv, .swf, .mkv, .avi, .rm, .rmvb, .mpeg, .mpg, .ogg, .ogv, .mov, .wmv, .mp4, .webm, .mp3, .wav, .mid
文件.png, .jpg, .jpeg, .gif, .bmp, .flv, .swf, .mkv, .avi, .rm, .rmvb, .mpeg, .mpg, .ogg, .ogv, .mov, .wmv, .mp4, .webm, .mp3, .wav, .mid, .rar, .zip, .tar, .gz, .7z, .bz2, .cab, .iso, .doc, .docx, .xls, .xlsx, .ppt, .pptx, .pdf, .txt, .md, .xml

经过几番周折也是理清楚了,最后也就简单两步,上传打了个xss


http://www.jsqmd.com/news/1346306/

相关文章:

  • 终极指南:在Windows 10上完美安装PL-2303驱动程序
  • AI绘画核心控制:随机种子原理与Stable Diffusion实战应用
  • 蜂鸣器原理
  • 用户画像记忆,让Agent记住用户偏好越用越懂你
  • MT40A512M16LY-062E:E数据手册解读:3200MT/s/96-ball FBGA封装的DDR4内存详解
  • Ubuntu 优化流程
  • 工业去毛刺方案:珂斯顿机器人抛磨系统解析 - 城刊速递
  • 2026年08月 抗老化防紫外线绿色透明塑钢带源头厂家实力解析 - 卓企推荐
  • Ubuntu 22.04手动部署RustDesk服务端:从原理到实战的完整指南
  • 游戏掉线重连实战:从TCP/IP原理到Unity网络同步优化
  • 能操作办公电脑的AI?2026桌面智能体选购指南与7款工具横评
  • 基于RT-Thread与GD32F527的嵌入式开发实战:从环境搭建到多线程系统设计
  • 从万能密码到参数化查询:深入解析SQL注入原理与防护实践
  • AssetStudio深度解析:从Unity资源提取到性能分析与自动化实战
  • 技术协作避坑指南:从无效沟通到高效交付的工程实践
  • 2026年重庆电缆桥架厂商选择梳理:渝腾电力核心优势与行业参考汇总 - 董不懂啊
  • 合肥新站高新区找信誉好的电缆回收优质公司?鼎觅物资回收 - 品牌优推
  • Gemini 一键导出Word文档,公式不乱码,科研神器 连夜下载了AI导出鸭,笑死
  • 流式输出实战,让Agent边想边说提升用户体验
  • UE5与Web双向通讯实战:基于WebUI插件实现游戏内嵌交互界面
  • 怎么让文心生成 excel:AI 导出鸭一站式搞定表格导出,多类转换方法横向对比解析
  • 如何用Montserrat免费字体打造专业设计:完整指南帮你节省数千元字体费用
  • 中药材分拣工岗位标准 + 中药材智能分拣产线Qt信创工控系统
  • WebMCP:让AI成为浏览器的“手”,开启AI原生Web应用新时代
  • LayerDivider:5分钟将单张图片智能转换为PSD分层文件的AI工具
  • Blender UV网格重塑终极指南:UvSquares插件快速入门与实战应用
  • UE5 RPG动态伤害公式:基于GAS Execution Calculations实现数据驱动计算
  • Visual Studio C++ DLL加载错误排查:从原理到实战解决“找不到”与“无法定位”
  • 【2026年百度暑期实习/秋招- 8月6日-算法岗-第一题- 波动贡献最大化】(题目+思路+JavaC++Python解析+在线测试)
  • 2026年重庆可定制钢丝骨架复合管挑选攻略:渝腾电力厂商信息及行业要点整理 - 董不懂啊