CS4.5修改checksum后无法上线MSF问题
2022-9-26 12:32:52 Author: NOVASEC(查看原文) 阅读量:17 收藏

酒零 NOVASEC

△△△点击上方“蓝字”关注我们了解更多精彩
0x00 免责声明

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

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

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

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

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

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

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

0x01 前言
使用foreign/reverse_http(s)进行spawn时候会发生报错,基本报错及修复方案如下参考臭豆腐大佬的github原文:
https://github.com/lovechoudoufu/cobaltstrike4.5_cdf
原文描述节选:
使用windows/foreign/reverse_http(s)进行spawn时候报错该版本在ScListener中增加了相关Custom的getScalar操作,但未考虑到foreign的情况,导致var1.customDLL、customFileName为空报错暂时的修复方式是通过判断payload为foreign时候,直接返回shellcode,修复后可正常使用。
本来觉得这是一个小的BUG,后来发现还有更大的坑需要挖掘。
0x02 派生报错原因查找
尝试已修改的CS进行派生,发现提示以下错误:

开始以为是代码反编译时出错了,一步一步还原调试修改才发现这个报错原因是由于:
修改了checksum8的值,会导致该请求不被MSF6接受。
即:MSF6不允许自定义URI值,只认checksum8的默认值(92L).
进一步分析代码原因发现:
stagers/ForeignHTTPStagerX86.javastagers/ForeignHTTPSStagerX86.java
由于我修改了MSFURI()函数,而Foreign HTTP/HTTPS函数以下文件中调用了MSFURI()函数,导致生成的URI值的checksum8值不再是92L,因此导致MSF6不能够接受从CS派生出会话。
0x03 派生报错问题修复
找到问题的原因后,修复起来就简单了,拷贝一份原始的MSFURI()函数,并稍作修改,支持传递长度和sum值。
//common/CommonUtils.java 修改
public static String MSFURI(int var0, long sum) { String[] var1 = toArray("a, b, c, d, e, f, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9"); StringBuffer var2; do { var2 = new StringBuffer(var0 + 1); var2.append("/");
for(int var3 = 0; var3 < var0; ++var3) { var2.append(pick(var1)); } } while(checksum8(var2.toString()) != sum);
return var2.toString();}

再在ForeignHTTPStagerX86和ForeignHTTPSStagerX86文件中调用修改后的MSFURI函数:
//修改stagers/ForeignHTTPStagerX86.java
public String getURI() { return CommonUtils.MSFURI(32,92L); }
//修改stagers/ForeignHTTPSStagerX86.java
public String getURI() { return CommonUtils.MSFURI(32,92L); }


0x04 修复后派生测试

终于知道为什么这个函数叫MSFURI了,原来是MSF的URI呀。。。

END

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

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

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

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

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


文章来源: http://mp.weixin.qq.com/s?__biz=MzUzODU3ODA0MA==&mid=2247488219&idx=1&sn=6172291c134dd0d328b7f89c3c4a0121&chksm=fad4cfcccda346da5cb879362c60138f8dfd989185aa96b0a1e8174a999cf97724a33358f8a6#rd
如有侵权请联系:admin#unsafe.sh