记一次解密wireshark抓取的冰蝎通信流量
一、关于冰蝎
1.1 简单介绍
冰蝎是一款基于Java开发的动态加密通信流量的新型Webshell客户端。老牌 Webshell 管理神器——中国菜刀的攻击流量特征明显,容易被各类安全设备检测,实际场景中越来越少使用,加密 Webshell 正变得日趋流行。
由于通信流量被加密,传统的 WAF、IDS 设备难以检测,给威胁狩猎带来较大挑战。冰蝎其最大特点就是对交互流量进行对称加密,且加密秘钥是由随机数函数动态生成,因此该客户端的流量几乎无法检测。
1.2 关于冰蝎通信
冰蝎通信大致分为两个阶段
第一阶段:
Attacker通过GET方法或者POST方法形如下图这样请求服务器密钥

服务器使用随机数MD5的高16位作为密钥,存储到会话的SESSIONID中,并返回密钥给attacker。密钥可通过wireshark抓包看到,见下图。

第二阶段:
1.客户端把待执行命令作为输入,利用AES算法或XOR运算进行加密,并发送至服务端;
2.服务端接受密文后进行AES解密或者XOR运算解密,执行解密后的命令
3.执行结果通过AES加密后返回给attacker
关于上述内容和抓包详情和可绕过字段的具体详情可看下面链接大佬写的文章,本人在此就不CV了
https://cloud.tencent.com/developer/article/1621021
1.3 解密思路
在服务器开启 PHP OpenSSL 扩展脚本的情况下,冰蝎密文采用对称加密算法AES加密,加密后还会进行 base64 编码。在客户端发起密钥协商后,会返回16位明文随机密钥。在安全监控设备采集流量较全的情况下,可截获密文流量和密钥,通过解密解码平台即可获取冰蝎密文详情。
大体也是根据shell.php代码审计得出来的,关于冰蝎简单的协商加密部分代码审计可以看下面的链接
https://www.freesion.com/article/2118538292/
二、冰蝎解密详细步骤
这次主要还是奔着解密数据包内容去的,之前有一次搞了好久没搞出来就搁置了,这次正好又看到了两个大佬的文章就抓回来重新搞一次,详细的解密还原报文步骤如下
2.1 环境
物理机 作为attacker使用冰蝎连接shell.php
Win2003 server 作为 attacked 在DVWA-master目录下提前放置了shell.php
2.2 总体步骤
打开wireshark 监听虚拟网卡(我用的NAT模式也就是VM8)
首先attacker连接了http://192.168.124.139:81/DVWA-master/shell.php
并随意执行两个命令
打开wireshark页面停止监听 在头部就可以看到4个http的包 追踪流查看
因为冰蝎是动态二进制协商加密 数据包可看作被进行了2次加密
第一层加密为AES128加密
AES解密时需要一个16位的key,而冰蝎的脚本会进行与attacked协商一个key保存在SESSIONID中,如下图这个16位的数据就是解密所需的key

接下来需要一个在线解密AES的网站。(一开始我用的是CaptfEncoder这个工具,但是在AES解密时总是报错不知道为什么,通过查阅网上大佬的资料get了这个站)
http://tools.bugscaner.com/cryptoaes/
PS:本人之前也找过很多的站包括CaptfEncoder这个工具,只有用上面这个站解密成功了。(不知道是本人操作问题还是脸黑 Orz)
请求密文就是类似于下图的红字部分

进行解密:

将解密之后base64_decode()中的内容丢去base64解密就好了,可以网上找个在线的站。我用的是CaptfEncoder

这时就可以看到冰蝎加密前的内容是什么了
同样响应内容也可以进行解密:

将响应密文丢到刚才AES解密的站,还是原先的16位key

{"status":"c3VjY2Vzcw==","msg":"DQ0KV2luZG93cyBJUCBDb25maWd1cmF0aW9uDQ0KDQ0KDQ0KRXRoZXJuZXQgYWRhcHRlciDmnKzlnLDov57mjqUgMjoNDQoNDQogICBDb25uZWN0aW9uLXNwZWNpZmljIEROUyBTdWZmaXggIC4gOiBsb2NhbGRvbWFpbg0NCiAgIElQIEFkZHJlc3MuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiA6IDE5Mi4xNjguMTI0LjEzOQ0NCiAgIFN1Ym5ldCBNYXNrIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiA6IDI1NS4yNTUuMjU1LjANDQogICBEZWZhdWx0IEdhdGV3YXkgLiAuIC4gLiAuIC4gLiAuIC4gOiAxOTIuMTY4LjEyNC4yDQ0KDQ0KRXRoZXJuZXQgYWRhcHRlciDmnKzlnLDov57mjqU6DQ0KDQ0KICAgQ29ubmVjdGlvbi1zcGVjaWZpYyBETlMgU3VmZml4ICAuIDogREhDUCBIT1NUDQ0KICAgSVAgQWRkcmVzcy4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIDogMTkyLjE2OC4wLjEwNQ0NCiAgIFN1Ym5ldCBNYXNrIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiA6IDI1NS4yNTUuMjU1LjANDQogICBEZWZhdWx0IEdhdGV3YXkgLiAuIC4gLiAuIC4gLiAuIC4gOiAxOTIuMTY4LjAuMQ0NCg=="}
上面经过AES解密后的红体字还需要丢到base64解密一下

成功获得响应报文

记一次解密wireshark抓取的冰蝎通信流量的更多相关文章
- 使用wireshark 抓取 http https tcp ip 协议进行学习
使用wireshark 抓取 http https tcp ip 协议进行学习 前言 本节使用wireshark工具抓包学习tcp ip http 协议 1. tcp 1.1 tcp三次握手在wire ...
- 使用Wireshark 抓取数据包
Wireshark 是一个网络封包分析软件.网络封包分析软件的功能是获取网络封包,并尽可能显示出最为详细的网络封包资料.Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换. 一 ...
- 利用wireshark抓取Telnet的用户名和密码
使用wireshark抓取Telnet 目标ip地址(telnet 192.168.88.1 ) 1,首先打开wireshark,然后选择网卡,点击开始. 2,为了在filter中输入telne ...
- Android利用tcpdump和wireshark抓取网络数据包
Android利用tcpdump和wireshark抓取网络数据包 主要介绍如何利用tcpdump抓取andorid手机上网络数据请求,利用Wireshark可以清晰的查看到网络请求的各个过程包括三次 ...
- 使用wireshark抓取TCP包分析1
使用wireshark抓取TCP包分析1 前言 介绍 目的 准备工作 传输 创建连接 握手 生成密钥 发送数据 断开连接 结论 前言 介绍 本篇文章是使用wireshrak对某个https请求的tcp ...
- 通过WireShark抓取iPhone联网数据方法
通过WireShark抓取iPhone联网数据方法 命令行 rvictl -s <UDID> 然后再wireshark选择rvi0进行抓包即可 抓包完后,移除用命令 rvictl -x & ...
- 利用wireshark抓取远程linux上的数据包
原文发表在我的博客主页,转载请注明出处. 前言 因为出差,前后准备总结了一周多,所以博客有所搁置.出差真是累人的活计,不过确实可以学习到很多东西,跟着老板学习做人,学习交流的技巧.入正题~ wires ...
- TCP三次握手和四次挥手及wireshark抓取
TCP的三次握手与四次挥手的详细介绍: 三次握手: 第一次握手(SYN=1, seq=x): 客户端发送客户端发送一个 TCP 的 SYN 标志位置1的,指明客户端打算连接的服务器的端口,以及初始序号 ...
- 抓取“矢量”的实时交通流量数据
1. 引言 最近老师有一个需求,就是想要抓取实时的矢量交通流量数据来做分析,类似于百度地图,高德地图的"实时路况"那种.平时的网络抓取工作一般是抓取网页上现成的数据,但是交通流量数 ...
随机推荐
- Java实现 计蒜客 1251 仙岛求药
仙岛求药 少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶.叛逆但孝顺的李逍遥闯进了仙灵岛,克服了千险万难来到岛的中心,发现仙药摆在了迷阵的深处.迷阵由 M \times NM× ...
- Java实现 蓝桥杯VIP 算法提高 笨小猴
算法提高 笨小猴 时间限制:1.0s 内存限制:256.0MB 问题描述 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼.但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率 ...
- 第五届蓝桥杯JavaC组省赛真题
解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.猜年龄 题目描述 小明带两个妹妹参加元宵灯会.别人问她们多大了,她们调皮地说:"我们俩的年龄之积是年龄之和的6倍" ...
- Java实现第九届蓝桥杯快速排序
快速排序 以下代码可以从数组a[]中找出第k小的元素. 它使用了类似快速排序中的分治算法,期望时间复杂度是O(N)的. 请仔细阅读分析源码,填写划线部分缺失的内容. package bb; impor ...
- 小波学ItDay01--开始学习Servlet
曾经想过许多的开场白,有热血的,有励志的,最后思前想后还是用这句话开篇吧! 生活不会亏待每一个愿意努力的人-------<摘自某微信群的语录> 今天第一天,结合自己的进度开始学习Servl ...
- github常用的协同开发流程
github的实用之处 对于刚刚工作的小白来说,顺利完成工作任务是首要考虑的事情,业余时间多了解了解其他的技术将有利于自己对该领域的熟悉,比如我们都拥有的github,除了在网站里查看优秀的代码,其还 ...
- SpringMVC处理json的四个步骤
导入相关的pom依赖 在springMVC的配置文件中开启MVC驱动,<mvc:annotation-driven /> 在处理ajax请求的方法上加上注解@ResponseBody 将要 ...
- HttpClient 常用方法封装
简介 在平时写代码中,经常需要对接口进行访问,对于 http 协议 rest 风格的接口请求,大多使用 HttpClient 工具进行编写,想着方便就寻思着把一些常用的方法进行封装,便于平时快速的使用 ...
- PE文件介绍 (2)-DOS头,DOS存根,NT头
PE头 PE头由许多结构体组成,现在开始逐一学习各结构体 0X00 DOS头 微软创建PE文件格式时,人们正广泛使用DOS文件,所以微软充分考虑了PE文件对DOS文件的兼容性.其结果是在PE头的最前面 ...
- 安装并配置Samba
1. 安装 samba ~$sudo apt-get install samba 2. 修改 samba 的配置文件 ~$sudo gedit /etc/samba/smb.conf 添加如下内容 [ ...