Behinder3 Protocol
之前写了一个扫描seeyon后门的nuclei template, 可以用来扫描一些Behinder、Godzilla、Cmdexec的websehll,但是还不能确定这些后门能不能用,所以这次就分析常见的Behinder3.0.11版本的流量。
Behinder 流量分析
部署WebShell
环境部署直接使用Vulhub中tomcat/tomcat8的docker镜像,通过部署WAR包在本地创建一个jsp的WebShell。
1 | docker-compose up -d |
为了了解Behinder过程,还需要对Behinder的jar包进行调试。
配置调试环境
首先使用idea创建一个项目,导入behinder.jar
配置远程调试
用远程调试的方式启动behinder.jar
java8 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar Behinder.jar
分析过程
源代码分析
先抓取请求响应流量。双击打开一个WebShell后会发送两个请求,分别是
Echo
与BasicInfo
。在
net.rebeyond.behinder.core.Shell.Service#doConnect
方法中,先生成一个3000以内随机长度的随机字符串,并传给echo
方法。跟进
net.rebeyond.behinder.core.ShellServeice#echo
方法。调用net.rebeyond.behinder.utils.Utils#getData
方法对Echo
类进行加密,之后调用net.rebeyond.behinder.utils.Utils#requestAndParse
方法发送请求。并从响应中获取Cookie用作后续请求时加入到Cookie中。跟进
net.rebeyond.behinder.utils.Utils#getData
方法,大致内容是对Echo
的class进行AES加密。在本地使用之前生成的随机字符串构造一个JSON字符串,并使用AES加密。将加密后的结果与
Echo
请求进行比较,计算出执行结果的插入偏移。对执行结果密文进行AES解密,
流量分析
根据对源代码执行流程分析,现在可以对 Echo
的请求内容进行解密。可以看到右下角的解密内容看起来非常像是一个class文件,上面一串随机字符猜测也是生成的随机字符串。
在CyberChef中构造本地的JSON字符串,并使用AES加密,与 Echo
response中的内容进行比较
密码暴力破解
有了以上的分析,密码暴力破解的方法也就出来了。我们可以先对一个请求进行解密,拿到bytes数据,并使用字典中的密码进行加密。发送请求去分析响应体中的内容是否满足。经过过个不同站点测试,发现只要发送相同的请求内容,则会返回相同长度的响应。根据这个特点编写密码暴力破解的脚本。
项目地址:BehinderBrute