哥斯拉Godzilla运行原理探寻 – 作者:nercis

前段时间在这里看到这个工具:哥斯拉Godzilla。团队小伙伴对称感兴趣,特意下载下来分析一下。

探寻原理

密码(pass)和密钥(key)

将jsp shell格式调整一下,分析。发现key取前16位md5值硬编码保存

1603438578_5f9287f22f0aaeeeaf5b8.png!small?1603438581758

1603438591_5f9287ffef926b55b40a4.png!small?1603438595539

生成密码(post参数)和密钥(key)的校验md5值

1603438602_5f92880a44965277193df.png!small?1603438605908

认证代码分析

使用“测试连接”功能,分析认证,返回为空

1603438618_5f92881a975a49f819350.png!small?1603438622123

对应代码,将post值进行b64解密后吗,使用x函数解密,再提取payload

1603438626_5f928822e55f286c4319a.png!small?1603438630625

x函数是aes的加解密功能,加解密密钥(xc)就是key的md5前16位

1603438635_5f92882b26bb530f28966.png!small?1603438638732

因此,正确的key就是正确的加解密密钥,try内代码执行不出错就表示认证通过

md5使用

根据分析发现返回时,先取校验MD5值的前16位返回,再返回shell的aes+b64数据,最后取校验后16位返回,猜测返回包解密是根据这个来的

1603438649_5f9288397cf64c9085eb6.png!small?1603438653646

某个返回包

1603438658_5f9288424d573d52bf6a7.png!small?1603438661887

拦截一下返回,将C改成A

1603438665_5f9288496da256ab88580.png!small?1603438669061

提示初始化失败

1603438673_5f928851b3c1e0a03508a.png!small?1603438677263

jar返回处理

使用jadx-gui打开一下工具jar包,在源码中找到返回包处理函数

1603438697_5f928869035fb4ade823f.png!small?1603438700669

查看一下jsp使用

1603438705_5f9288718546824d1dcd1.png!small?1603438709163

继续分析调用方式,随意查看一个,返回处理过的数据内容

1603438712_5f928878dbd26c8b67578.png!small?1603438716495

jar内加解密

搜索aes字符串,查找解密方法,发现在cryption下的javaaes中有解密函数

1603438723_5f9288832046c7a501b95.png!small?1603438727203

可以看到程序将shell配置按jsp shell代码流程生成的校验md5值,并且拆分成2个16位字符串,让本地加解密配置与jsp shell一一对应

1603438730_5f92888a6d751715cf691.png!small?1603438734019

关键函数

加解密函数和校验md5值查找函数

1603438740_5f928894c144fb81cb5aa.png!small?1603438744472

具体实现,从返回包中截取shell内容

1603438748_5f92889ced32c50e252db.png!small?1603438752556

到此发现前面总结错误,返回包内的md5值只用于认证密码和密钥,并不用于解密数据内容,程序解密是根据本地配置参数来的。

payload内容

修改jsp shell代码,使其输出base64编码的数据

1603438763_5f9288ab2d803b1397e97.png!small?1603438766819

“进入”功能的某个返回包

1603438770_5f9288b2e6af2f4106a27.png!small?1603438774533

base64解码一下

1603438777_5f9288b9b40aa8f9c5672.png!small?1603438781431

继续分析发现,在“进入”操作时post数据30多KB是在加载各个函数功能

1603438786_5f9288c260056c9f5d6ce.png!small?1603438790014

因为后续的操作是直接调用的函数,下图是调用“getBasicsInfo”函数

1603438796_5f9288cc7c09e0b2e97d4.png!small?1603438800026

jar内搜索一下

1603438803_5f9288d321f32d420066f.png!small?1603438806814

思考

参考哥斯拉利用

加密:AES

编码:Base64

认证:MD5

我们可以选择异或方式来处理

先异或再编码,使用md5认证:XOR+base64+MD5

先编码再异或,使用sha1认证:base64+XOR+sha1

其他只要是能还原的都行(哔哔:“凯撒位移”),也许能用gzip格式来处理数据?

过流量检测的方式很多,主要还是上传的shell不被查杀,使用的内存加载方式实现,tql。相关技术介绍可以看这个《浅谈哥斯拉内存Shell技术》。

来源:freebuf.com 2020-10-23 15:47:12 by: nercis

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论