首页 > 其他分享 >CobaltStrike WebServer 4.4 特征分析

CobaltStrike WebServer 4.4 特征分析

时间:2023-03-08 09:36:03浏览次数:40  
标签:profile 4.4 匹配 checksum8 WebServer uri beacon stager 特征分析

WebServer特征

本文简单介绍了Cobalt Stike 4.4版本的一些特征以及缓解措施。

webserver处理逻辑漏洞

请求状态码异常

正常的服务器对于uri的开头不为/的情况,一般都会产生400的状态。

而teamserver在处理的时候,返回了404,

在处理OPTIONS请求时候,更是uri都不看,直接返回200,并且在后面会加上Allow: OPTIONS,GET,HEAD,POST

正常的网站感觉还是干不出来这种事情的。

beacon&stager uri异常访问

对于更特殊的请求,类似的情况如下,更是直接暴露了profile的http配置以及beacon。

profile的流量情况:

beacon:

uri匹配问题

可以看到对于beacon.http-get、beacon.http-post的uri后面可以随意增加的,profile很灵活导致了webserver没办法做精准的匹配。

checksum8特征

checksum8算法可以匹配多个值,如aaa9等,个人理解本意是在profile没有设置uri的时候,具有一定的随机性,多个uri都可以获取beacon,但是问题在于profile中 set uri之后,该算法依然可用(可能为了兼容msf的请求),配合默认解密方法可以获取完整的配置。

WebServer流程、特征分析

UA校验

我们对核心逻辑_serve进行简单的分析。可以看到先经过了一个UA的黑白名单,可以在profile中进行配置。默认黑名单有curl* lynx* wget*。

如果不符合UA检测,则返回404,并在console中输出。

处理OPTIONS请求

这块发现teamserver是没有对uri做校验的,直接返回200,并添加了一个Allow的header。

webserver核心逻辑

Webserver封装了一个名字叫hook的Map,里面push了多个WebService的实现,Map的key为uri,在监听创建的时候,默认会push上述4个WebService进去。

beacon.http-get
stager
stager64
beacon.http-post

其中beacon*类型为MalleableHOOK,负责处理beacon的通讯,如心跳,命令执行等,stager*类型为MalleableStager,负责推送beacon。

当通过UA检测后区分了7种情况:

1.匹配响应一般的uri,用于host file,powershell script等一些情况 (beacon&stager uri异常访问的原因)
2.匹配响应用户配置的beacon.post/get,stager/stagerx64的请求
3.匹配响应目录的uri,自动补全结尾的/,没有找到场景
4.匹配以http://开始的uri,没有找到场景
5.匹配stager64的uri,主要用于响应64位场景下checksum8算法生成的uri(uri长度有限制,checksum8特征的原因)
6.匹配stager的uri,主要用于响应32位场景下checksum8算法生成的uri(uri长度有限制,checksum8特征的原因)
7.所有条件轮空的处理

当第匹配到uri为hooks的key时,就会返回对应的响应,也就产生了beacon&stager uri异常访问的问题。

当所有条件轮空时,也就是第7种情况,会再次通过checksum8算法匹配uri是否返回beacon的响应,与上文相比,去掉了uri长度的限制。此外,也会判断是否stager关闭导致异常。如果i遍历完成,返回404,由于对uri有特殊的情况,没有判断uri是否需要以/开头。因此产生了一系列的特征。

这里比较有趣的是,while的条件是startsWith与isFuzzy判断,通过对WebService所有实现类进行分析。MalleableHook的isFuzzy为true。也就是说WebServer对于beacon的交互的uri在后面随便加东西都可以匹配、响应profile配置。个人感觉这也算是teamserver的特征吧。

特征修改

主要处理了/的问题和checksum8的问题,其他问题暂时不处理了,头大。

webserver处理逻辑漏洞

请求状态码异常、beacon&stager uri异常访问都是由于没有校验/的问题导致的,由于我使用的是javaagent,对于大段的代码修改比较麻烦,我选择在WebServer中serve进行修改。增加了一个/的检验,不过http://开头的请求可能会收到影响,目前还清楚是什么功能,还需要进一步测试一下。

checksum8特征

checksum8特征有很多缓解的方法。

1.修改checkSum8的92L与93L为非默认的值(可破解)
2.更换算法(成本较高)
3.固定URI(容易形成新的特征)
4.kill stager(依赖客户端操作)
5.设置host_stage(无法使用stager)

我同样在serve函数中进行了patch,废掉了checksum的匹配,缺点是必须配置profile的,可能也会有其他的问题,待测试。

    set uri_x86 "xx";
    set uri_x64 "xx";

javaagent实现

             else if(className.equals("cloudstrike/WebServer")){
                    ClassPool classPool = ClassPool.getDefault();
                    CtClass cls = classPool.get(className.replace("/","."));
                    CtMethod readResource = cls.getDeclaredMethod("serve");
                    readResource.setBody(
                            "{"+
                            "   if(!$1.startsWith(\"/\")) {" +
                            "       return $0.processResponse($1, $2, $3, $4, false, null, new cloudstrike.Response(\"400 Bad Request\", \"text/plain\", \"\"));" +
                            "   }" +
                            "   if(isStager($1)||isStagerX64($1)){" +
                            "       return $0.processResponse($1, $2, $3, $4, false, null, new cloudstrike.Response(\"404 Not Found\", \"text/plain\", \"\"));" +
                            "   }" +
                            "   return handleRanges($2, $3, $0._serve($1, $2, $3, $4));" +
                            "}");
                    return cls.toBytecode();
                }

效果

stager不会带出了

异常的404也顺带解决了

aaa9已经无法请求

其他特征

本文主要分析了webserver的几个特征,内存特征就不再这里提了,javaagent也是可以缓解的。4.5虽然对javaagent做了检查,但是依然很好绕过。4.6貌似server和client分开了,可能就比较麻烦了。

参考:

https://cloud.tencent.com/developer/article/1967094?from=article.detail.1818330
https://github.com/Like0x/0xagent/blob/main/PreMain.java
http://cn-sec.com/archives/300922.html checksum8

标签:profile,4.4,匹配,checksum8,WebServer,uri,beacon,stager,特征分析
From: https://www.cnblogs.com/Fluorescence-tjy/p/17190773.html

相关文章

  • 特征分析之SVD
    引言前面我们分享降维分析之PCA分析及实现,说PCA除了应用在数据降维上,还可用于特征分析。今天我们就来分享个新的特征分析的方法,叫做奇异值分解(SingularValueDecompo......
  • OpenGL 4.4 pipeline
    svg版本见:https://raw.githubusercontent.com/g-truc/website/d17f404f103caf537564fd1dc5a3b9b71f1d6070/doc/OpenGL%204.4%20Pipeline%20Map.svg 更多请参考:https://g......
  • 轻量级服务器 TinyWebServer--参考理解下的笔记(声明:该项目非本人原创,仅作为练习,如有
    轻量级服务器TinyWebServer目录1.什么是WebServer(网络服务器)2.用户如何与你的Web服务器进行通信3.Web服务器如何接收客户端发来的HTTP请求报文4.Web服务器如何处理......
  • 网页js版音频数字信号处理:H5录音+特定频率信号的特征分析和识别提取
    目录一、网页中的音频数据源二、FFT:时域转频域三、信号的特征分析四、信号的识别提取附录音频数字信号处理AudioDSP(DigitalSignalProcessing)是一个复杂又专业的话......
  • 4.4-动态存储器的工作原理
    SRAM存储单元的不足晶体管过多存储密度低功耗大DRAM存储单元的基本结构解决SRAM不足采取的方法:去掉两个负载管:T3,T4提升存储密度降低功耗降低成本利用栅极分布......
  • 4.4可变长数组类实现
    #include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;classcarray{intsize;int*ptr;//指向数组的指针public:carray(......
  • Android短信监听实现,及Android4.4之后短信机制变更
    Android短信监听实现,及Android4.4之后短信机制变更 前阵子公司有一个项目,简单的监听短信应用,功能只有如下两个:1.监听短信并获取短信内容上传服务器;2.从服务器获取短......
  • 4.4数组是高效使用内存的基础
       数组是指多个同样数据类型的数据在内存中连续排列的形式。作为数组元素的各个数据会通过连续的编号被区分开来,这个编号称为索引(index)。指定索引后,就可以对该索引......
  • 4.4 数组是高效使用内存的基础
    数组是指多个同样数据类型的数据在内存中连续排列的形式。作为数组元素的各个数据会通过连续的编号被区分开来,这个编号称为索引(index)。指定索引后,就可以对该索引所对应地......
  • ubuntu20安装open4.4带扩展库
      0查看当前版本安装opencv_version   已经装了3.49再装个4.4共存1安装依赖库sudoadd-apt-repository"debhttp://security.ubuntu.com/ubuntu......