冰蝎3.0-分析系列 1-beta2-php
2020-8-20 16:20:59 Author: mp.weixin.qq.com(查看原文) 阅读量:1 收藏

文章目录
 
  1. 1. 前言

  2. 2. PHP-webshell分析

    1. 2.1. 错误密码通信过程

    2. 2.2. 正确密码通信过程

  3. 3. 特征分析

    1. 3.1. HTTP头部特征

    2. 3.2. 数据包长度

  4. 4. 小结

1
前言

本文主要针对冰蝎3.0beta2版本在php环境下进行分析。分析内容包括:建立连接开始过程以及可能特征分析提取。

2
PHP-Webshell分析

2.1.错误密码通信过程

首先分析错误密码情况
默认密码为rebeyond的32位md5值的前16位-“e45e329feb5d925b”。
这里首先模拟使用admin密码(错误密码),计算md5后的密码为“21232f297a57a5a7”。
由于冰蝎3.0版本取消了动态密钥协商机制,采用预共享密钥,以PHP说明。

php的webshell如下图,若不支持aes则使用异或的方式进行加解密。下面以AES加密通信进行分析。

首先输入错误密码admin,发送第一个连接的数据包。由于密码错误返回包的数据为空。


这里的数据包能够通过AES密码进行解密,后面在正确密码时演示解密过程。上述数据解密后主要代码如下,主要目的在于设置$content变量,其时通过UUID生成,用于后续做校验(见java代码)。

在使用预共享密钥进行解密失败后,则尝试进行常规密钥协商流程。发送密钥协商的第一个数据包如下图,get请求,url中格式中出现密钥admin等号后面跟数字。

通过代码逆向分析可知,通过异常处理的方式,在连接时,也就是第一个数据包,会生成随机的UUID字符串,如果比较相同则返回真(如果第一个包解密成功,这里是PHP,则会输出数据,进行比较),如果失败则进入异常处理流程-这里指密钥协商流程。

密钥协商过程,格式一般为“?password=随机数字”,随机数为1000以下的数字。以本次抓包过程吻合。由于密钥协商过程以2.0版本类似,因此具有明显特征,可以进行模糊匹配(不完全准确)。由于这里没有协商过程因此本次暂不分析。

2.2.正确密码通信过程

这里首先使用3.0beta2版本
正确密码情况,首先发送第一个认证数据包:

第一个认证数据包POST的内容大小为1112字节(PHP脚本),固定的。

逆向分析可知PHP脚本的AES加密方式为CBC模式,填充方式为PKCS5Padding,默认的IV值(固定值)为16个0x00。(beta2版本和beta3版本相同)

下面尝试解密第一个认证数据包,首先进行base64解密,然后使用aes的cbc模式进行解密,aes解密后出现2部分,以|分割,前面是assert后面是eval的base64的代码片段。(beta2版本)

再将base64的部分进行解码,如下图。如果密码正确则能够正常解密处下图的代码并运行,运行成功后会输出$content变量的加密数据。(beta2版本)

由于$content变量格式固定,因此其加密数据的长度为128字节。解密后数据格式为json格式,包括status字段和msg字段,如下图:(beta2版本)

若请求认证成功则status返回base64解码后为“success”,msg解开后为$content变量的值。

第一个认证数据包通过后,第二个数据包为获取基本信息,数据包如下图:

解密第二个数据包,与第一个数据包相同,以|分割。如下图:

解密后代码的主要功能为获取phpinfo信息、盘符信息、当前路径以及信息系统并加密后输出。


返回的基本信息解密后如下:

本次测试大小固定为2220字节,不同主机应该有差异。

通过逆向代码也能够找到,其是打包在payload下,PHP就是php目录下,其中获取第二个数据包的内容就是发送的BasicInfo.php的内容进行执行。

获取需要执行的php代码,如BasicInfo,然后进行加密。

同理其他功能模块调用方式类似。

3
特征分析

3.1.HTTP头部特征

http头部的特征暂时不具有唯一性
user-agent较老

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/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/13.0.782.41 Safari/535.1 QQBrowser/6.9.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.11079.201
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)" }
   

accept,Cache-Control,Pragma这几个值冰蝎3.0中不会进行设置,测试后发现使用的默认如下图(还需要在真实环境进行验证)

默认头部如下:

Cache-Control: no-cache
Pragma: no-cache
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
   

3.2.数据包长度

第一个认证数据包长度(POST数据长度,对应Content-Length字段)固定为1112字节;
发送认证数据包,认证成功后返回的加密数据大小为128字节,由于数据小可以再加上判断是否为base64编码字符集;
第二个数据包为获取基本信息的脚本数据,对应大小为2220字节,由于脚本固定和UUID长度固定所以最终加密数据长度固定。

4
小结

冰蝎3.0使用预共享密钥进行通信因此无密钥协商过程,但如果预共享密钥解密失败则自动进入密钥协商过程(这里是否可以通过某种降维方式-修改返回数据导致解密失败?然后变成预2.0版本相同的检测方式)。

目前分析看user-agent头部较老可以作为一般的研判依据,加上Pragma、Accept等默认头部进行联合判断,但仍可能有较大误报,需在实际环境测试。

认证数据包和获取基本信息的数据包的长度固定可作为检测依据,目前看beta2版本中php脚本具有较多bug,现在已经更新beta3修复了bug,因此可能beta2版本较大概率不会被攻击者使用。
beta3版本分析见下一篇报告。

版权声明:

本文由团队成员AI@MS509原创,转载请注明来源

MS509简介:
 
MS509是中国电子科技网络信息安全有限公司(简称“中国网安”)旗下从事安全漏洞挖掘及利用方法研究的纯技术研究团队,研究方向包括WEB安全、红蓝对抗、移动安全、逆向分析、二进制安全、智能硬件(IOT)安全、工控安全、无线安全、APT攻击追踪溯源、安全编程等。更多团队动态,尽在博客www.ms509.com;微博搜索 MS509。
加入我们:https://www.ms509.com/contact/

↓↓↓ 点击"阅读原文" 【查看更多信息】  


文章来源: https://mp.weixin.qq.com/s?__biz=MzAwODgxNTA2NA==&mid=2650935805&idx=2&sn=c455e366f3d387c00b3efdf183020262&chksm=809f994ab7e8105c40239b3f7b4675cfde4c823a2c417f89efffc14ff1e32b6081549f10f0d1&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh