CS4.5粗略预防CVE-2022-39197 XSS RCE

CS4.5粗略预防CVE-2022-39197 XSS RCE

原创 酒零 NOVASEC 2022-09-21 22:29

△△△点击上方“蓝字”关注我们了解更多精彩

0x00 免责声明

在学习本文技术或工具使用前,请您务必审慎阅读、充分理解各条款内容。

1、本团队分享的任何类型技术、工具文章等文章仅面向合法授权的企业安全建设行为与个人学习行为,严禁任何组织或个人使用本团队技术或工具进行非法活动。

2、在使用本文相关工具及技术进行测试时,您应确保该行为符合当地的法律法规,并且已经取得了足够的授权。如您仅需要测试技术或工具的可行性,建议请自行搭建靶机环境,请勿对非授权目标进行扫描。

3、如您在使用本工具的过程中存在任何非法行为,您需自行承担相应后果,我们将不承担任何法律及连带责任。

4、本团队目前未发起任何对外公开培训项目和其他对外收费项目,严禁任何组织或个人使用本团队名义进行非法盈利。

5、本团队所有分享工具及技术文章,严禁不经过授权的公开分享。

如果发现上述禁止行为,我们将保留追究您法律责任的权利,并由您自身承担由禁止行为造成的任何后果。

0x01 前言

这两天项目上使用了CS4.5,本来好好的,beichen大佬


一个视频,CVE-2022-39197 CS <= 4.7.1 RCE。

用百度和谷歌搜索了一下,只有一些蛛丝马迹。

https://www.cobaltstrike.com/blog/out-of-band-update-cobalt-strike-4-7-1/

将允许攻击者在 Beacon 配置中设置格式错误的用户名,从而允许他们远程执行代码。

可能的关键字是:用户名|XSS|RCE

有点没想明白,CS jar文件里面都有XSS,还能RCE。 但是没有办法,该修还是得修,挣扎一下心安。

0x02 尝试修复方案

因为没有详细的POC和漏洞分析,只能草草进行猜测。

猜测是因为用户名字符串可以自定义设置,导致可以注入XSS,因此如果能对从beacon获得的信息都进行一次XSS过滤,就可以防御这个攻击。

说做就做,分析代码发现beacon属性都在common/BeaconEntry中进行定义,
因此对
BeaconEntry中定义的实体属性进行一次检查修改就可以。

 //新增xssFixed函数,检查字符串//需要导入正则包
 public static String xssFixed(String rawString)  {
  //String fix_flag_value = getFixed();
  if (rawString == null || rawString == ""){
     return rawString;
  } else {
     String regEx= "[`$%^&|(){}<>?\\/\'\"]";
     Pattern pattern   =   Pattern.compile(regEx);
     Matcher matcher   =   pattern.matcher(rawString);
     String newString = matcher.replaceAll("_").trim();
     return newString;
  }
}
 //新增xssFixedValue函数,检查需要修复的函数
public void xssFixedValue(){
  this.id = xssFixed(this.id);//可选
  this.pid = xssFixed(this.pid);//可选
  this.ver = xssFixed(this.ver);
  this.intz = xssFixed(this.intz);//可选
  this.comp = xssFixed(this.comp);
  this.user = xssFixed(this.user);
  this.ext = xssFixed(this.ext);
  this.pbid = xssFixed(this.pbid);
  this.note = xssFixed(this.note);
  this.barch = xssFixed(this.barch);//可选
  this.port = xssFixed(this.port); //可选
  this.chst = xssFixed(this.chst);
  this.proc = xssFixed(this.proc);
  this.accent = xssFixed(this.accent );
  this.lname = xssFixed(this.lname );
}

在调用BeaconEntry函数最后调用修改函数xssFixedValue();

public BeaconEntry(byte[] var1, String var2, String var3, String var4)
{
//省略大量代码...
  this.ext = var3;
  this.chst = var2;
  this.lname = var4;
  this.sane = this.sanity();
  xssFixedValue();
}

publicBeaconEntry(String var1) {
  this.id = var1;
  this.sane = this.sanity();
  xssFixedValue();
}

0x03 总结

毕竟
没有公开的POC,所以这是一个没用经过完善验证的修复访问。

以下是一个开玩笑的POC:

END

如您有任何
投稿、
问题、建议、需求、
合作、请
后台留言NOVASEC公众号!

或添
加NOVASEC-余生 
以便于及时回复。

感谢大哥们的对NOVASEC的支持点赞和关注

加入我们与萌新一起成长吧!

本团队任何技术及文件仅用于学习分享,请勿用于任何违法活动,感谢大家的支持!!