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包进行调试。

配置调试环境

  1. 首先使用idea创建一个项目,导入behinder.jar

    1675243132483

  2. 配置远程调试

    1675243199396

  3. 用远程调试的方式启动behinder.jar

    • java8 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar Behinder.jar

分析过程

源代码分析

  1. 先抓取请求响应流量。双击打开一个WebShell后会发送两个请求,分别是EchoBasicInfo

    1675243753228
    1675243803250

  2. net.rebeyond.behinder.core.Shell.Service#doConnect方法中,先生成一个3000以内随机长度的随机字符串,并传给 echo方法。

    1675245037858

  3. 跟进 net.rebeyond.behinder.core.ShellServeice#echo方法。调用 net.rebeyond.behinder.utils.Utils#getData方法对 Echo类进行加密,之后调用 net.rebeyond.behinder.utils.Utils#requestAndParse方法发送请求。并从响应中获取Cookie用作后续请求时加入到Cookie中。

    1675244588387

  4. 跟进 net.rebeyond.behinder.utils.Utils#getData方法,大致内容是对 Echo的class进行AES加密。

    1675246190179

  5. 在本地使用之前生成的随机字符串构造一个JSON字符串,并使用AES加密。将加密后的结果与 Echo请求进行比较,计算出执行结果的插入偏移。

    1675246034986

  6. 对执行结果密文进行AES解密,

    1675245957497

流量分析

根据对源代码执行流程分析,现在可以对 Echo的请求内容进行解密。可以看到右下角的解密内容看起来非常像是一个class文件,上面一串随机字符猜测也是生成的随机字符串。

1675246438739

CyberChef中构造本地的JSON字符串,并使用AES加密,与 Echoresponse中的内容进行比较

密码暴力破解

有了以上的分析,密码暴力破解的方法也就出来了。我们可以先对一个请求进行解密,拿到bytes数据,并使用字典中的密码进行加密。发送请求去分析响应体中的内容是否满足。经过过个不同站点测试,发现只要发送相同的请求内容,则会返回相同长度的响应。根据这个特点编写密码暴力破解的脚本。

项目地址:BehinderBrute