Author:AI@TOD

1.前言

由于beta3版本jsp无法连接。所以这里对beta4,5版本进行分析。
beta3、beta4以及beta4版本jsp默认网马相同
关于jsp的小马运行加载原理可以参考:

https://blog.csdn.net/weixin_34364071/article/details/94607054

2.jsp-webshell分析

jsp的webshell如下图:

beta3版本直接忽略,程序bug导致无法连接成功。
还是来张图,好像只有密码协商过程,由于bug根本无法连接,因此这里数据包暂不具有参考价值。

使用beta4和beta5版本进行测试分析工作。

通过代码逆向可以知,jsp流程和php相同,均是首先通过预置的AES密码进行加解密,如果失败再进行密钥协商过程。如下图:

2.1.错误密码通信过程

和php类似首先使用预置的密钥进行解密,失败后则尝试进行密钥协商过程。

由于jsp的网马没做容错,加上测试服务器默认没有配置,所以解密失败后运行就会报错。

2.2.正确密码通信过程

连接成功后获取基本信息如下图:

支持metepreter反弹,如下图:

发送第一个数据包,如下图:

通过逆向分析可知,第一个请求的数据包是获取的payload中的Echo.class,因此上述第一个数据包这里称为Echo数据包。

获取class数据流,进行编码和加密后发送,如下图:

读取payload中的echo.class文件。

jsp的加密方式为AES的ECB模式与PHP不同。

第一个数据包解密后为echo.class文件。解密结果如下图,由于数据中包含了随机字符串,因此数据包长度不固定。

解密后动态二进制加载class,然后运行equals。

返回数据包将数据编码然后形成json格式,最终进行AES加密(返回数据没有再进行base64编码,与php稍有不同)。

构造返回数据如下图:

对测试流量进行解密如下图,其中status为状态,msg要么为content字符串,那么为异常信息,这里msg为随机字符串,和php一样是为了规避长度固定被检测。

发送第二个数据包,通过解密后确认其为BasicInfo.class文件,这里称为basic数据包。解密结果如下图:

获取基本信息,如下图:

解密后即为基本信息


再进行base64即可,如下图:

目前beta4和beta5版本的jsp脚本第二个数据包-basic数据包定义了whatever的字段,不过并没有在返回数据中使用,后面作者应该会在返回数据中加入该字段。

发送第3个数据包为paylod的FileOperation.class文件。该文件主要是实现文件管理功能。解密数据如下图:

返回数据包解密后如下图:

测试执行cmd命令whoami,发送payload中的Cmd.class文件,解密后如下图:

3.特征分析

3.1.HTTP头部特征

和PHP相近,Content-Type变为application/octet-stream。

1
2
Accept : ext/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Language : zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7

User-Agent如下:

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
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.2 Safari/605.1.15
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36
Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36
Mozilla/5.0 (iPhone; CPU iPhone OS 13_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/84.0.4147.122 Mobile/15E148 Safari/604.1
Mozilla/5.0 (iPad; CPU OS 13_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/84.0.4147.122 Mobile/15E148 Safari/604.1
Mozilla/5.0 (iPod; CPU iPhone OS 13_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/84.0.4147.122 Mobile/15E148 Safari/604.1
Mozilla/5.0 (Linux; Android 10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Mobile Safari/537.36
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36
Mozilla/5.0 (iPhone; CPU iPhone OS 13_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/84.0.4147.122 Mobile/15E148 Safari/604.1
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:79.0) Gecko/20100101 Firefox/79.0
Mozilla/5.0 (X11; Linux i686; rv:79.0) Gecko/20100101 Firefox/79.0
Mozilla/5.0 (Linux x86_64; rv:79.0) Gecko/20100101 Firefox/79.0
Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:79.0) Gecko/20100101 Firefox/79.0
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:79.0) Gecko/20100101 Firefox/79.0
Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:79.0) Gecko/20100101 Firefox/79.0
Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)
Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2)
Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko
Mozilla/5.0 (Windows NT 6.2; Trident/7.0; rv:11.0) like Gecko
Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko

3.2.流量特征

检测BASE64格式,以及返回数据为二进制格式。通过机器学习可进行尝试。

4.小结

jsp版本的冰蝎的HTTP头部Content-Type字段不同;和php版本类似均加入随机字符串使流量中的长度不固定。