吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11720|回复: 33
收起左侧

[PC样本分析] 魔改CobaltStrike:命由己造(上)

  [复制链接]
mai1zhi2 发表于 2021-5-27 09:13
使用论坛附件上传样本压缩包时必须使用压缩密码保护,压缩密码:52pojie,否则会导致论坛被杀毒软件等误报,论坛有权随时删除相关附件和帖子!
病毒分析分区附件样本、网址谨慎下载点击,可能对计算机产生破坏,仅供安全人员在法律允许范围内研究,禁止非法用途!
禁止求非法渗透测试、非法网络攻击、获取隐私等违法内容,即使对方是非法内容,也应向警方求助!
本帖最后由 mai1zhi2 于 2021-5-28 07:33 编辑

一、 概述
这次我们来探究beacon里每个功能点是如何实现的,以便日后更好的实现自定义beacon。因为有近百个相关功能点,所以文章分了上下部分。
项目地址如下:https://github.com/mai1zhi2/CobaltstrikeSource

二、 前情提要
我们从上篇协议剖析得文章中知道当beacon发送心跳包后,teamserver会返回相应得任务号,并返回相应得任务信息,beacon接收到任务信息后,会进入循环处理:
1_.png
在AllCase_10007F19()里面就是beacon得全部命令功能,我们按反编译循环中的case号从低向高写,case号与发送数据包的任务号是大同小异的。
三、 主要功能
spawn(x86)
case 1,派生会话,原理是挂起方式启动rundll32并注入dll
图片1.png

以挂起方式启动rundll32.exe:
图片2.png
图片3.png
图片4.png

使用VirtualAllocEx()在目标rundll32进程申请内存空间:

图片5.png
图片6.png

WriteProcessMemory()在申请的内存空间写入dll:
图片7.png

注意输入的标志0x00000004  CREATE_SUSPENDED:
图片8.png 使用VirtualProtectEx()设置内存属性,PAGE_EXECUTE_READWRITE
图片9.png
图片10.png

设置context上下文,并恢复线程:
图片11.png 图片12.png
图片13.png
图片14.png

exit
退出case 3,Exit退出功能,修改dwMilliseconds时间为0:
图片15.png

如果为0就调用sub_10009BB0()退出程序:
图片16.png

Sleep
case 4,设置beacon睡眠时间接收数据包,取得修改的时间并进行修改dwMilliseconds
图片17.png
图片18.png


Cd
切换目录case  5,切换目录使用SetCurrentDirectory切换当前进程的当前工作目录。
图片19.png
图片20.png

Inject (x86)
case 9,指定已打开进程来注入会话,原理就是远程线程注入,dllinject、shinject之类也会走这个case 。先用openprocess()打开目标进程:
图片21.png
目标申请空间后写入dll文件:
图片22.png

最后调用CreateRemoteThread()进行远程线程注入:
图片23.png
图片24.png

Upload
上传文件case 10 ,upload上传文件,
图片25.png
首先分割teamserver回传的数据,得到上传的文件名,然后wb模式打开文件:
图片26.png

然后获得数据长度和内容,调用fwrite写入:
图片27.png


download 下载文件
case 11,download 下载文件,先分割数据包获得需要下载的文件名,然后打开文件,不断读取文件内容,然后加密返回给teamserver:
图片28.png
图片29.png

execute
执行程序case 12 ,execute 执行程序,但不回显
图片30.png
直接使用createprocess()启动相应进程:
图片31.png

Spawnto (x86)
case 13,spawnto,设置Beacon派生会话时使用的程序
图片32.png
当再执行spawn时,会判断启用哪个程序进行注入,而不是再注入默认的rundll32.exe:
图片33.png
图片34.png
图片35.png
图片36.png

端口转发数据回传(没有命令参数) case 15,case 16,是没有命令参数,是与rportfwd端口转发相关的case ,首先接收到访问目标机器的请求信息:
图片37.png

然后发送给目标机器,然后中转机通过select模型等待信息返回,最后把rportfwd端口转发的信息返回:
图片38.png
图片39.png

  desktop VNC
case 18,远程桌面,x86 desktopVNC远程桌面(不注入进程),需要由vnc的dll,不建议用,有点卡
图片40.png

download_cancel
case 19,取消相关下载文件,命令beacon取消相关的文件下载:
图片41.png   

中转子beacon所发送的数据(没有相关命令参数)
case 22,没有相关命令行,负责中转子beacon的传输数据:
图片42.png 图片43.png
图片44.png

  Unlink
case 23,调用shutdow()断开与子Beacon的连接
图片45.png
图片46.png

Getuid
case27,获取当前令牌关联的用户ID使用GetTokenInformation检索令牌信息和LookuoAccountSid获取令牌SID:
图片47.png
最后拼接输出:
图片48.png

rev2self
case 28,恢复Beacon原始令牌调用RevertToSelf()终止当前用户标识的模拟并返回原始线程标记:
图片49.png
图片50.png


steal_token
case 31,从目标进程中窃取访问令牌先打开进程,获取指定进程的句柄令牌,再用ImpersonateLoggedOnUser模拟一个登陆用户的访问令牌的安全上下文,最后用DuplicateTokenEx拷贝一个当前令牌相同权限的令牌
图片51.png
ps
case 32,显示进程列表使用CreateToolhelp32Snapshot()、Process32Next()相关函数遍历系统进程信息,然后进行发送给服务器:
图片52.png
图片53.png

Kill
case 33,结束指定进程调用TerminateProcess()结束指定进程:
图片54.png
powershell-import
case 37,导入Powershell脚本导入相关的ps脚本(如nishang)以便后续调用
_55.png 图片56.png
Runas
case 38,以其他用户权限执行程序调用CreateProcessWithLogonW()函数,以某用户身份执行指定程序
图片57.png
图片58.png
Pwd
case 39,显示当前所在目录直接用GetCurrentDirectoryA()得到当前目录并返回:
图片59.png
Job执行后数据的回传(没有相关命令)
执行后数据的回传case 40,当job执行后产生数据会用管道回传给beacon:
图片60.png 图片61.png
Createfile()创建管道:
图片62.png
SetNamedPipeHandleState()设置管道PIPE_READMODE_BYTE模式:
图片63.png
调用PeekNamedPipe()读取管道内的数据:
图片64.png
图片65.png

Jobs
case 41,查看Beacon中的所有任务,在list读取后台进行中的任务
图片66.png
jobkill
case 42,结束一个在后台运行调用DisconnectNamedPipe()与后台进程终止链接:
图片67.png

Inject(x64)
case 43,指定已打开进程来注入会话,原理就是远程线程注入,dllinject、shinject之类也会走这个case ,流程与case 9一样。


Spawn (x64)
case 44,派生会话 (x64),原理也是挂起线程rundll32线程注入dll,流程都是一样的,只是在不同文件夹在rundll32.exe
图片68.png
X64注入进程的desktop
case 45,x64 desktopVNC远程桌面(注入进程),需要由vnc的dll,不建议用,有点卡
图片69.png
X86 注入进程的desktop
case 46,x86 desktopVNC远程桌面(注入进程),需要由vnc的dll,不建议用,有点卡
图片70.png
Pause
case 47,暂停,当执行到某些任务(如注入扫描dll)时beacon会主动暂停一秒左右:
图片71.png
Make_token
case 49, 创建令牌使用GetTokenInformation检索令牌信息和LookuoAccountSid获取令牌SID:
图片72.png
图片73.png
三、 小结
在这里我们分析beacon的约前50项功能,一探其相关功能的实现,为日后重写beacon有所帮助,下次我们继续分析后50项功能。最后谢谢大家观看。
图片55.png
图片66.png

免费评分

参与人数 13威望 +1 吾爱币 +31 热心值 +10 收起 理由
eway + 1 谢谢@Thanks!
2snfks29fais + 1 + 1 好硬核啊,老哥牛逼
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
TXKJ + 1 + 1 谢谢@Thanks!
末氵祉铭 + 1 我很赞同!
zerzul + 1 + 1 谢谢@Thanks!
L剑仙 + 2 + 1 我很赞同!
painstaking1 + 1 + 1 我很赞同!
lgc81034 + 1 热心回复!
无名氏xxx + 1 热心回复!
lyslxx + 1 + 1 我很赞同!
舒默哦 + 1 + 1 热心回复!
着迷59 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

hacksky 发表于 2021-8-19 18:23
case 46 和case 45的配图一样,case18也是描述为x86 desktopVNC远程桌面(注入进程),需要由vnc的dll,所以这几个是没有错的吗?
dadapa 发表于 2021-5-27 09:19
stanba 发表于 2021-5-27 09:29
舒默哦 发表于 2021-5-27 10:16
我跟不上节奏了,鸡哥你慢点不行吗
liangshen95 发表于 2021-5-27 10:21
谢谢楼主分享,支持一下。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
cq2002 发表于 2021-5-27 10:57
除了膜拜真的是无法用任何语言表达我的心情
EzioTang 发表于 2021-5-27 10:58
懂了 打算自己试试
akhuoji 发表于 2021-5-27 11:00
鸡哥牛逼!!!
Lluna 发表于 2021-5-27 11:21
aaa太多啦呀,菜鸡都看不进去了。。
LG606 发表于 2021-5-27 11:31
感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 10:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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