在teamserver通信调试中,记录一下遇到的问题。
环境搭建
- 所有打断点的java文件都必须放到src目录下,不然不会跳到断点处。
src目录下需要放的文件,大概如下
- 对于teamserver的调试可能出问题的地方,vmoptions参数
1 | -XX:ParallelGCThreads=4 -Dcobaltstrike.server_port=22222 -Dcobaltstrike.server_bindto=0.0.0.0 -Djavax.net.ssl.keyStore="E:\cs4.4\CobaltScrike_4.1_reverse\out\artifacts\CobaltScrike_4_1_reverse_jar\cobaltstrike.store" -Djavax.net.ssl.keyStorePassword=111111 -server -XX:+AggressiveHeap -XX:+UseParallelGC -Duser.language=en |
- 生成证书
1 | keytool -keystore ./cobaltstrike.store -storepass 111111 -keypass 111111 -genkey -keyalg RSA -alias cobaltstrike -dname "CN=Major Cobalt Strike, OU=AdvancedPenTesting, O=cobaltstrike, L=Somewhere, S=Cyberspace, C=Earth" |
- 命令行启动teamserver或者client命令
1 | - client |
cs 登陆通信分析
teamserver端
入口函数server.TeamServer.Authorization()
,这个还没看懂,感觉是cobaltstrike.auth
有关,这个文件是干嘛的我也不清楚
1 | public Authorization() { |
1 | public static void Setup(byte[] array) { |
- 进入到
server.TeamServer.go
1 | public void go() { |
- 可以在Debug的Console窗口看到输出的信息,和平时在命令行运行temserver的结果一样,之后进入登陆认证
var3.acceptAndAuthenticate()
-
1 | public Socket acceptAndAuthenticate(final String var1, final PostAuthentication var2) { |
final Socket var4 = this.server.accept(); //client端Connect
到达这里需要登陆,然后teamserver端会对连接的host,port,password等进行认证,进入authenticate
认证
1 | java -XX:ParallelGCThreads=4 -XX:+AggressiveHeap -XX:+UseParallelGC -Duser.language=en -jar CobaltScrike_4.1_reverse.ja |
- 在点击Connect后,会发现Teamserver可以调试了,但是Client端报
Read timed out
,但是我一直忽略这个,在teamserver端进行调试,想走完登陆验证的过程,
然后就会 teamserver端出现,Connect reset
Read timed out
和 Connect reset
错误原因
从Read timed out
连接超时看,
因为此时teamserver端我正在缓慢调试client端的连接信息,认证账号密码等是否正确,但是teamserver端认证太慢,所以client端 timed out 超时,而teamserver端又由于client端已经关闭,所以后面也报错,或者不能继续调试了。
- 可以试试在client端点击connect后,迅速再teamserver端点击step over,一直点,然后client端就登陆成功了。
这认证了我的想法