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

ThinkAdmin后台文件上传漏洞实战:从配置修改到Getshell

1. ThinkAdmin后台文件上传漏洞初探第一次接触ThinkAdmin这个后台管理系统时我就被它简洁的界面和丰富的功能吸引了。但作为一名安全研究人员职业习惯让我更关注它的安全性。最近在测试过程中我发现了一个相当有意思的文件上传漏洞通过系统参数配置就能实现Getshell整个过程就像在玩解谜游戏一样有趣。ThinkAdmin的文件上传功能本意是为了方便管理员上传各类资源文件但系统参数配置中的几个关键选项如果设置不当就可能被攻击者利用。最危险的是这个漏洞不需要任何复杂的代码审计就能发现只要熟悉后台操作就能轻松利用。我在本地环境测试时从发现漏洞到最终拿到服务器权限整个过程不到10分钟。这个漏洞的核心在于系统对上传文件类型的校验机制。虽然默认配置已经禁止了php等危险文件的上传但通过修改系统参数我们可以添加其他可执行文件类型比如ini、htaccess等。更妙的是系统还提供了一个远程下载文件的功能这简直就是为攻击者量身定做的后门。2. 漏洞利用详细步骤2.1 修改系统参数配置要利用这个漏洞第一步就是登录ThinkAdmin后台。默认情况下你需要有管理员权限才能进行后续操作。进入后台后找到系统管理-系统参数配置-本地服务器存储这个路径。这里就是我们要操作的关键位置。在参数配置页面你会看到一个名为允许上传的文件类型的选项。默认情况下这里可能已经列出了一些安全的文件类型比如jpg、png、gif等图片格式以及pdf、doc等文档格式。但重点在于我们可以在这里添加新的文件类型。我测试时发现虽然系统明确禁止了php文件的上传但我们可以添加其他服务器可解析的文件类型比如.htaccess.ini.phtml.phar添加这些类型后保存配置系统就会允许上传这些文件了。这里有个小技巧最好一次只添加一个类型测试通过后再添加下一个这样可以避免触发系统的某些防护机制。2.2 构造恶意文件并上传有了允许上传的文件类型接下来就需要准备我们的恶意文件了。根据你添加的允许类型可以选择不同的攻击方式如果是.htaccess文件可以写入以下内容AddType application/x-httpd-php .jpg这样服务器就会把jpg文件当作php来解析之后我们只需要上传一个包含php代码的jpg文件就能执行任意代码了。如果是.ini文件可以尝试利用PHP的auto_prepend_file功能。例如auto_prepend_file data://text/plain;base64,PD9waHAgcGhwaW5mbygpOyA/Pg这段base64解码后就是会在每个php文件执行前先执行这段代码。准备好恶意文件后就可以通过系统的上传接口进行上传了。根据我的测试上传接口通常是/admin/api.upload/file使用Burp Suite或者Postman等工具可以直接调用这个接口。上传成功后系统会返回文件的存储路径这个信息非常重要是我们后续利用的关键。3. 远程文件下载功能利用3.1 发现远程下载功能ThinkAdmin还有一个隐藏得更深的功能就是可以通过系统参数配置中的浏览器小图标选项实现远程文件下载。这个功能本意可能是为了方便管理员更换网站图标但却可以被用来下载任意文件到服务器上。在系统参数配置页面找到浏览器小图标这个选项。正常情况下这里应该是上传一个本地图标文件但如果你仔细观察会发现这个字段其实可以填入一个远程URL。系统会定期检查这个URL并自动将文件下载到服务器上。3.2 计算文件存储路径下载的文件会存储在服务器的特定位置ThinkAdmin使用了一个有趣的算法来计算存储路径。根据我分析的代码路径生成逻辑大致如下function name(string $url, string $ext , string $pre , string $fun md5): string { [$hah, $ext] [$fun($url), trim($ext ?: pathinfo($url, 4), .\/)]; $attr [trim($pre, .\\/), substr($hah, 0, 2), substr($hah, 2, 30)]; return trim(join(/, $attr), /) . . . strtolower($ext ?: tmp); }举个例子如果你设置的远程URL是https://www.example.com/shell.php那么文件可能会被存储在/upload/down/4d/8e3b4d8e3b4d8e3b4d8e3b4d8e3b4d/shell.php知道这个路径计算规则后我们就可以精确预测我们的恶意文件会被放在服务器的什么位置这对后续的利用至关重要。3.3 结合两种攻击方式最理想的攻击方式是结合文件上传和远程下载两种功能。我通常会这样做先通过修改系统参数添加上传.htaccess文件的权限上传一个自定义的.htaccess文件让服务器把.jpg文件当作php解析然后在浏览器小图标处设置一个远程URL指向包含php代码的jpg文件系统会自动下载这个图片到可预测的位置由于.htaccess的作用这个jpg文件会被当作php执行这样即使系统有严格的文件内容检查也会因为文件扩展名是jpg而放行但实际上它会被当作php执行完美绕过各种防护。4. 漏洞防御与修复建议4.1 临时防护措施如果你正在使用ThinkAdmin且暂时无法升级可以采取以下临时防护措施首先检查系统参数配置中的允许上传的文件类型确保只包含必要的文件类型最好是只允许图片类格式。特别注意检查是否有.htaccess、.ini等危险类型被添加。其次在Nginx或Apache配置中添加规则禁止上传目录执行php代码。例如在Nginx中可以在server配置中添加location ~* ^/uploads/.*\.(php|php5|htaccess|ini)$ { deny all; }最后可以考虑禁用浏览器小图标的远程URL功能。修改系统代码将这个输入框改为只能上传本地文件或者完全移除远程下载的功能。4.2 长期解决方案从长远来看最好的解决方案是升级到最新版本的ThinkAdmin。开发者通常会在新版本中修复已知的安全漏洞。升级前记得备份重要数据并在测试环境验证无误后再应用到生产环境。对于开发者来说应该重新设计文件上传功能至少要做到以下几点文件类型检查应该使用MIME类型而不仅仅是文件扩展名上传的文件应该重命名为随机名称避免路径预测上传目录应该设置为不可执行脚本远程下载功能应该完全移除或者增加严格的白名单校验另外建议实现一个完善的文件内容检查机制可以使用开源的病毒扫描引擎或者至少对上传的文件进行简单的魔数校验确保文件类型与扩展名匹配。5. 漏洞利用的实战技巧在实际渗透测试中直接上传php文件往往会被各种安全机制拦截。这时候就需要一些技巧来绕过防护。我总结了几种在ThinkAdmin中比较有效的绕过方法第一种是使用大小写混淆。虽然系统禁止了.php但可能没有禁止.PhP或者.pHp这样的变种。在修改系统参数时可以尝试添加这些变体。第二种是使用空字节截断。在某些版本的系统中可以通过构造如shell.php.jpg这样的文件名配合空字节截断来绕过检查。上传时的文件名可以设置为shell.php%00.jpg。第三种是利用解析差异。比如上传一个.htaccess文件内容为FilesMatch shell SetHandler application/x-httpd-php /FilesMatch然后上传一个名为shell的文件虽然没有扩展名但会被当作php执行。第四种是使用图片马。先准备一个正常的图片文件然后用文本编辑器在文件末尾添加php代码。虽然看起来是图片但某些情况下服务器仍会执行其中的php代码。这种方法配合.htaccess的解析规则修改效果最好。在实际操作中这些方法可能需要组合使用并且要根据目标系统的具体配置进行调整。每次测试后都要仔细检查服务器响应从中寻找可能的突破口。

相关文章:

ThinkAdmin后台文件上传漏洞实战:从配置修改到Getshell

1. ThinkAdmin后台文件上传漏洞初探 第一次接触ThinkAdmin这个后台管理系统时,我就被它简洁的界面和丰富的功能吸引了。但作为一名安全研究人员,职业习惯让我更关注它的安全性。最近在测试过程中,我发现了一个相当有意思的文件上传漏洞&#…...

Mac文件总用错程序打开?教你一键永久设置默认应用(附常见问题解决)

Mac文件总用错程序打开?一键永久设置默认应用的终极指南 每次双击文档却弹出不想要的程序?Mac系统的默认应用设置逻辑其实藏着不少实用技巧。作为十年Mac老用户,我整理出这份覆盖90%使用场景的解决方案手册,从基础设置到疑难杂症一…...

开关电源拓扑结构全解析:从Buck到LLC的选型与设计要点

1. 电源逆变与开关变换器拓扑结构解析电源变换是电子系统能量管理的核心环节,其本质在于实现电能形式、电压等级、电流特性及电气隔离状态的可控转换。在工业控制、新能源发电、电动汽车、通信设备及消费类电子产品中,不同应用场景对效率、功率密度、动态…...

Qwen2.5-7B-Instruct保姆级教程:模型权重分片加载与显存峰值监控方法

Qwen2.5-7B-Instruct保姆级教程:模型权重分片加载与显存峰值监控方法 1. 引言:当7B大模型遇上有限显存 如果你尝试在个人电脑或显存不那么宽裕的服务器上运行Qwen2.5-7B-Instruct这样的“大家伙”,大概率会遇到一个令人头疼的报错&#xff…...

ST7781R驱动深度解析:Arduino TFT触摸屏嵌入式开发实战

1. TFT Touch Shield V1.0 嵌入式驱动技术深度解析 1.1 硬件架构与核心芯片选型逻辑 TFT Touch Shield V1.0 是一款面向Arduino UNO Rev3与Mega平台的2.8英寸彩色图形显示模组,其硬件设计体现了嵌入式显示子系统在资源约束下的典型权衡策略。该模组采用ST7781R作为…...

RISC-V嵌入式开发工具链选型与工程实践指南

1. RISC-V嵌入式开发工具链全景分析RISC-V指令集架构的兴起并非偶然,而是嵌入式系统发展到特定阶段的必然产物。当ARM架构授权费用持续攀升、定制化需求日益增长、开源协作模式趋于成熟,RISC-V以其精简、模块化、可扩展的特性迅速成为工业控制、物联网终…...

StructBERT模型提示词(Prompt)优化指南:提升相似度计算准确率

StructBERT模型提示词(Prompt)优化指南:提升相似度计算准确率 你是不是遇到过这样的情况:用StructBERT这类模型来计算两段文本的相似度,结果有时候准,有时候却差得离谱?比如,明明是…...

给老旧服务器加装SSD和内存后,再测深信服云桌面体验提升有多大?

老旧服务器升级SSD与内存后,云桌面性能提升实测指南 当我在会议室里第5次尝试通过云桌面打开一份20MB的PPT时,投影仪前的客户已经开始看手表——机械硬盘的读取声像老式打字机一样有节奏地响着,进度条却像被冻住了似的纹丝不动。这种场景恐怕…...

PyTorch CUDA版本不匹配?手把手教你解决std::bad_alloc内存错误(附版本对照表)

PyTorch CUDA版本不匹配?手把手教你解决std::bad_alloc内存错误 当你在PyTorch中看到terminate called after throwing an instance of std::bad_alloc这样的错误时,这通常意味着程序尝试分配的内存超过了系统可用内存。在深度学习环境中,这种…...

StructBERT零样本分类-中文-baseAI应用:嵌入低代码平台的文本分类组件封装

StructBERT零样本分类-中文-baseAI应用:嵌入低代码平台的文本分类组件封装 1. 引言:当零样本分类遇上低代码 想象一下这个场景:你正在为一个电商平台的后台系统开发一个功能,需要自动将用户提交的售后工单,按照“物流…...

【AI】强化学习(RL)和多智能体系统(MAS)

强化学习(Reinforcement Learning, RL)和多智能体系统(Multi-Agent Systems, MAS)是目前人工智能领域最活跃、最具潜力的两个方向。当它们结合时(即多智能体强化学习,MARL),就能解决…...

PVNet位姿估计实战:从数据集准备到模型训练(基于PyTorch1.5.1+CUDA10.2)

PVNet位姿估计实战指南:从环境搭建到模型部署全流程解析 在计算机视觉领域,物体位姿估计一直是工业检测、增强现实和机器人抓取等应用的核心技术。PVNet作为一种基于关键点投票的位姿估计方法,因其对遮挡场景的鲁棒性而备受关注。本文将带您从…...

掌握英雄联盟效率革命:LeagueAkari 本地工具全攻略

掌握英雄联盟效率革命:LeagueAkari 本地工具全攻略 【免费下载链接】LeagueAkari ✨兴趣使然的,功能全面的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/LeagueAkari 你是否曾在英…...

Pixel Dimension Fissioner一文详解:16-bit像素UI设计原理与交互逻辑

Pixel Dimension Fissioner一文详解:16-bit像素UI设计原理与交互逻辑 1. 16-bit像素UI设计概述 16-bit像素风格是一种独特的视觉设计语言,它将现代UI设计与复古游戏美学完美融合。Pixel Dimension Fissioner采用这种设计风格,不仅是为了唤起…...

Web开发基础:在深度学习项目训练环境中学习前后端技术

Web开发基础:在深度学习项目训练环境中学习前后端技术 用AI研究者的视角,轻松掌握Web开发核心技能 1. 引言:为什么AI研究者需要学习Web开发? 作为一名深度学习研究者,你可能已经习惯了在Jupyter Notebook中训练模型、…...

财务个税代扣怕出错?AI自动算金额+代扣,员工不用自己报

财务个税代扣的自动化解决方案AI自动计算个税金额 利用智能财税软件或企业ERP系统内置的个税计算模块,自动根据员工薪资、专项扣除、累计预扣法等规则实时计算应纳税额。系统自动同步最新个税政策(如起征点、税率表),避免人工计算…...

GLM-OCR在办公场景中的应用:快速提取图片文字,提升工作效率

GLM-OCR在办公场景中的应用:快速提取图片文字,提升工作效率 1. 办公场景中的文字识别痛点 在日常办公中,我们经常需要处理各种包含文字的图片文件:会议白板照片、扫描的合同文档、手机拍摄的名片、PDF转存的图片等。传统处理方式…...

运放自激振荡的5种实战解决方案:从原理到调试技巧(附Multisim仿真文件)

运放自激振荡的5种实战解决方案:从原理到调试技巧(附Multisim仿真文件) 引言:为什么你的运放电路会"唱歌"? 当你精心设计的运算放大器电路突然开始输出不需要的正弦波时,那种感觉就像精心准备的演…...

Qwen3.5-9B惊艳效果:食品包装图片→成分表识别→过敏原标记→健康评分生成

Qwen3.5-9B惊艳效果:食品包装图片→成分表识别→过敏原标记→健康评分生成 1. 模型能力概览 Qwen3.5-9B作为新一代多模态大模型,在食品健康领域展现出令人惊艳的端到端处理能力。它能从一张简单的食品包装照片开始,自动完成成分表识别、过敏…...

StructBERT模型Transformer架构深度解析:从原理到相似度计算实践

StructBERT模型Transformer架构深度解析:从原理到相似度计算实践 1. 引言 如果你对自然语言处理(NLP)感兴趣,一定听说过BERT、GPT这些名字。它们背后的核心引擎,就是Transformer。今天我们要聊的StructBERT&#xff…...

Proteus与Keil联调避坑指南:解决51单片机仿真常见问题

Proteus与Keil联调实战:51单片机仿真问题深度解析 当你在深夜调试一个51单片机项目时,Proteus仿真结果与Keil中的预期完全不符,这种挫败感可能让任何开发者抓狂。作为嵌入式开发领域的黄金组合,Proteus和Keil的联调问题一直是工程…...

Cogito-v1-preview-llama-3B部署教程:Kubernetes集群中Cogito服务编排方案

Cogito-v1-preview-llama-3B部署教程:Kubernetes集群中Cogito服务编排方案 1. 认识Cogito模型:为什么选择它 Cogito v1预览版是Deep Cogito推出的混合推理模型系列,这个3B参数的模型在大多数标准基准测试中都表现出色,超越了同等…...

RoboFi ESP32机器人主控板:四轮差速驱动与传感器融合开发指南

1. RoboFi项目概述RoboFi 是一款基于 ESP32 的专用机器人主控板,面向四轮差速驱动移动机器人设计,集成了电机驱动、传感器采集、无线通信与实时控制能力于一体。其核心定位并非通用开发板,而是“开箱即控”的嵌入式机器人控制单元——硬件层已…...

Nginx(1.13.7)安装依赖缺失导致【make: *** 没有规则可以创建“default”需要的目标“build”】问题排查与修复

1. 问题背景与现象分析 最近在Linux系统上手动编译安装Nginx 1.13.7版本时,遇到了一个典型的编译错误:"make: *** 没有规则可以创建default需要的目标build"。这个错误让很多初次接触Nginx编译安装的朋友感到困惑,我也是在踩了这个…...

Nunchaku FLUX.1-dev参数详解:文本编码器截断长度影响分析

Nunchaku FLUX.1-dev参数详解:文本编码器截断长度影响分析 1. 引言:从一次失败的生成说起 最近在玩Nunchaku FLUX.1-dev模型时,我遇到了一个挺有意思的问题。当时想生成一张“一个穿着华丽礼服、站在城堡阳台上的公主,远处是夕阳…...

Fish Speech-1.5多语种语音合成效果展示:阿拉伯语/俄语/韩语真实发音样例

Fish Speech-1.5多语种语音合成效果展示:阿拉伯语/俄语/韩语真实发音样例 1. 引言:多语言语音合成的突破 想象一下,只需要一段文字,就能让AI用纯正的阿拉伯语、俄语或韩语为你朗读出来。这不是科幻电影的场景,而是Fi…...

STM32CubeIDE实战:FMC驱动8080接口LCD的避坑指南与性能优化

STM32CubeIDE实战:FMC驱动8080接口LCD的避坑指南与性能优化 在嵌入式系统开发中,LCD显示模块作为人机交互的重要窗口,其驱动性能直接影响用户体验。本文将深入探讨STM32CubeIDE环境下使用FMC外设驱动8080接口LCD的全流程实战经验,…...

AI虚拟房地产架构技术选型:云服务 vs 自建,架构师该怎么选?

AI虚拟房地产架构技术选型:云服务 vs 自建的第一性原理决策框架 元数据框架 标题 AI虚拟房地产架构技术选型:云服务 vs 自建的第一性原理决策框架 关键词 AI虚拟房地产、云服务架构、自建IDC、技术选型、弹性计算、实时渲染、成本优化 摘要 AI虚拟…...

Qwen3-32B-Chat部署教程:适配Ubuntu22.04+Docker环境,开箱即用无依赖冲突

Qwen3-32B-Chat部署教程:适配Ubuntu22.04Docker环境,开箱即用无依赖冲突 1. 环境准备与快速部署 1.1 硬件要求检查 在开始部署前,请确保您的硬件配置满足以下最低要求: 显卡:NVIDIA RTX 4090/4090D(24G…...

OpenCV实战:手把手教你用传统图像算法搞定路标检测(附完整代码)

OpenCV实战:传统图像算法在路标检测中的工程化实践 路标检测作为计算机视觉的基础应用场景,一直是检验传统图像处理技术实用性的试金石。虽然深度学习已在目标检测领域占据主导地位,但掌握传统算法的实现逻辑与优化技巧,对于理解计…...