Untitled
Last updated
Was this helpful?
Last updated
Was this helpful?
由于笔者在学习CS过程中,所看的教程使用的是3.x版本的CS,而我使用的是4.0版本的CS。因此域名配置实操部分是自己参考网上大量文章后自己多次尝试后的结果,所以难免出现错误之处,要是表哥发现文中错误的地方,欢迎留言指正。
DNS Beacon,顾名思义就是使用DNS请求将Beacon返回。这些 DNS 请求用于解析由你的 CS 团队服务器作为权威 DNS 服务器的域名。DNS 响应告诉 Beacon 休眠或是连接到团队服务器来下载任务。DNS 响应也告诉 Beacon 如何从你的团队服务器下载任务。
在CS 4.0及之后的版本中,DNS Beacon是一个仅DNS的Payload,在这个Payload中没有HTTP通信模式,这是与之前不同的地方。
以上内容摘自 A-TEAM 团队的 CS 4.0 用户手册
DNS Beacon的工作流程具体如下:
首先,CS服务器向目标发起攻击,将DNS Beacon传输器嵌入到目标主机内存中,然后在目标主机上的DNS Beacon传输器回连下载CS服务器上的DNS Beacon传输体,当DNS Beacon在内存中启动后就开始回连CS服务器,然后执行来自CS服务器的各种任务请求。
原本DNS Beacon可以使用两种方式进行传输,一种是使用HTTP来下载Payload,一种是使用DNS TXT记录来下载Payload,不过现在4.0版本中,已经没有了HTTP方式,CS4.0以及未来版本都只有DNS TXT记录这一种选择了,所以接下来重点学习使用DNS TXT记录的方式。
根据作者的介绍,DNS Beacon拥有更高的隐蔽性,但是速度相对于HTTP Beacon什么的会更慢。
既然是配置域名,所以就需要先有个域名,这里就用我的博客域名作为示例:添加一条A记录指向CS服务器的公网IP,再添加几条ns记录指向A记录域名即可。
添加一个监听器,DNS Hosts填写NS记录和A记录对应的名称,DNS Host填写A记录对应的名称
根据上一章的方法创建一个攻击脚本,放到目标主机中运行后,在CS客户端可以看到一个小黑框
然后经过漫长的等待,就可以发现已经上线了
SMB Beacon 使用命名管道通过一个父 Beacon 进行通信。这种对等通信对同一台主机上的 Beacon 和跨网络的 Beacon 都有效。Windows 将命名管道通信封装在 SMB 协议中。因此得名 SMB Beacon。
因为链接的Beacons使用Windows命名管道进行通信,此流量封装在SMB协议中,所以SMB Beacon相对隐蔽,绕防火墙时可能发挥奇效(系统防火墙默认是允许445的端口与外界通信的,其他端口可能会弹窗提醒,会导致远程命令行反弹shell失败)。
SMB Beacon监听器对“提升权限”和“横向渗透”中很有用。
首先需要一个上线的主机,这里我使用的HTTP Beacon,具体如何上线,可以参考之前第5节《如何建立Payload处理器》学习笔记中的内容,这里不过多赘述。
主机上线后,新建一个SMB Beacon,输入监听器名称,选择Beacon SMB,管道名称可以直接默认,也可以自定义。
接下来在Beacon中直接输入spawn SMB
,这里的SMB
指代的是创建的SMB Beacon的监听器名称,也可以直接右击session,在Spawn选项中选择刚添加的SMB Beacon。
等待一会儿,就可以看到派生的SMB Beacon,在external中可以看到IP后有个∞∞
字符。
接下来我这里将SMB Beacon插入到进程中,以vmtoolsed进程为例。
在vmtoolsed中插入SMB Beacon后,便能看到process为vmtoolsed.exe的派生SMB Beacon。
当上线主机较多的时候,只靠列表的方式去展现,就显得不太直观了,通过CS客户端中的透视图便能很好的展现。
在CS中,如果获取到目标的管理员权限,在用户名后会有*
号标注,通过这个区别,可以判断出当前上线的test用户为普通权限用户,因此这里给他提升一下权限。
由于下面与上面内容的笔记不是在同一天写的,因此截图中上线的主机会有所差异,这里主要是记录使用的方法。
下载之后,打开Cobalt Strike --> Script Manager
,之后点击Load
,选择自己刚才下载的文件中的elevate.cna
文件。
接着选择要提权的主机,右击选择Access --> Elevate
,Listener中选择刚才新建的SMB Beacon,这里的Exploit选择了ms14-058,如果使用ms14-058不能提权,就换一个Exploit进行尝试。
顺利的情况下,就可以看到提权后的管理员权限会话了,在管理员权限的会话中,不光用户名后有个*号,其Logo也是和其他会话不同的。
此时如果想断开某个会话的连接,可以使用unlink命令,比如如果想断开192.168.175.144,就可以在Beacon中输入unlink 192.168.175.144
如果想再次连上,就直接输入link 192.168.175.144
,想从当前主机连到其他主机也可以使用此命令。
1、在Beacon传输Payload到目标上执行任务时都会先验证团队服务器,以确保Beacon只接受并只运行来自其团队服务器的任务,并且结果也只能发送到其团队服务器。
2、在刚开始设置Beacon Payload时,CS会生成一个团队服务器专有的公私钥对,这个公钥嵌入在Beacon的Payload Stage中。Beacon使用团队服务器的公钥来加密传输的元数据,这个元数据中一般包含传输的进程ID、目标系统IP地址、目标主机名称等信息,这也意味着只有团队服务器才能解密这个元数据。
3、当Beacon从团队服务器下载任务或团队服务器接收Beacon输出时,团队服务器将会使用Beacon生成的会话秘钥来加密任务并解密输出。
4、值得注意的是,Payload Stagers 因为其体积很小,所以没有这些的安全特性。
什么是客户端攻击
客户端攻击根据教程直译过来就是一种依靠应用程序使用控制端来进行的可视化攻击。
原文:A client-side attack is an attack against an application used to view attacker controlled content.
为什么要进行客户端攻击
随着时代发展到了今天,在有各种WAF、防火墙的情况下,各种漏洞已经很难像过去那么好被利用了,攻击者想绕过防火墙发动攻击也不是那么容易的了。
而当我们发送一个钓鱼文件到客户端上,再由客户端打开这个文件,最后客户端穿过防火墙回连到我们,此时在客户端上我们就获得了一个立足点foothold
。这样的一个过程是相对而言是较为容易的,这也是为什么要进行客户端攻击。
1、尽可能多的了解目标环境,即做好信息收集工作
2、创建一个虚拟机,使它与目标环境尽可能的一致,比如操作系统、使用的浏览器版本等等都需要保证严格一致
3、攻击刚刚创建的虚拟机,这会是最好的攻击目标
4、精心策划攻击方法,达到使目标认为这些攻击行为都是正常行为的效果
5、将精心制作的钓鱼文件发送给目标,比如钓鱼邮件
如果这五步都非常细致精心的去准备,那么攻击成功的概率会大幅提升。
系统侦察System Profiler
是一个方便客户端攻击的侦察工具,这个工具将会在CS服务端上启动一个Web服务,这样当目标访问这个Web服务的时候,我们就能够看到目标使用的浏览器、操作系统等等指纹信息。
设置系统侦察需要首先在自己的VPS服务器上运行CS服务端,之后本地客户端进行连接,选择System Profiler
功能模块,配置待跳转的URL等信息即可。
如果勾选了Use Java Applet to get information
则可以发现目标的Java版本及内网IP地址,但是这样做被发现的风险就会提高,同时现在浏览器已经默认关闭了java执行权限,因此这个选项的作用也变得不大了。
配置完后,当用户打开配置后的链接,我们可以在三个地方进行观察none
目标用户打开链接时,我们在CS上就能够看到目标使用的浏览器版本、系统版本等信息了,知道了版本信息,就能够进一步知道目标上可能存在什么漏洞。
值得注意的一点是如果 Cobalt Strike 的 web 服务器收到了lynx、wget 或 curl 的请求,CS会自动返回一个 404 页面,这样做是为了防御蓝队的窥探。
用户驱动攻击User-Driven Attacks
需要欺骗用户产生交互才行,但也有许多的优点。
首先用户驱动攻击不包含恶意攻击代码,所以用户系统上的安全补丁是没用的;其次无论目标使用什么版本的程序,我们都可以创建相应的功能来执行;最后因为用户驱动攻击十分可靠,也使得它很完美。
当我们采取行动来追踪并需要攻击时,它就像用户本地执行程序一样,CS为我们提供了几个用户驱动攻击的选项,分别如下:
用户驱动攻击包User-Driven Attacks Packages
功能打开位置:Attacks --> Packages
HTML应用HTML Application
生成(executable/VBA/powershell)这3种原理不同的VBScript实现的evil.hta
文件。
Microsoft Office 宏文件Microsoft Office Document Macros
可以生成恶意宏放入office文件,非常经典的攻击手法。
Payload生成器Payload Generator
可以生成各种语言版本的Payload,便于进行免杀。
Windows 可执行文件Windows Executable
会生成一个Windows可执行文件或DLL文件。默认x86,勾选x64表示包含x64 payload stage生成了artifactX64.exe(17kb) artifactX64.dll(17kb)
Windows 可执行文件(Stageless)Windows Executable (Stageless)
会生成一个无进程的Windows可执行文件或DLL文件。其中的 Stageless 表示把包含payload在内的”全功能”被控端都放入生成的可执行文件beconX64.exe(313kb) beconX64.dll(313kb) becon.ps1(351kb)
用户驱动Web交付攻击User-Driven Web Drive-by Attacks
功能打开位置:Attacks --> Web Drive-by
java 签名 applet 攻击Java Signed Applet Attack
会启动一个Web服务以提供自签名Java Applet的运行环境,浏览器会要求用户授予applet运行权限,如果用户同意则实现控制,但目前该攻击方法已过时。
Java 智能 Applet 攻击Java Smart Applet Attack
会自动检测Java版本并利用已知的漏洞绕过安全沙箱,但CS官方称该攻击的实现已过时,在现在的环境中无效。
脚本化 Web 交付Scripted Web Delivery
为payload提供web服务以便于下载和执行,类似于MSF的Script Web Delivery
托管文件Host File
通过Attacks --> Web Drive-by --> Host File
进行配置,攻击者可以通过这个功能将文件上传到CS服务端上,从而进行文件托管。
如果想删除上传到CS服务端上的文件,可以到Attacks --> Web Drive-by --> Manage
下进行删除。
如果想查看谁访问了这些文件,可以到View --> Web Log
下进行查看。
首先来到Attacks --> Packages --> HTML Application
创建一个HTML应用,如果没有创建监听的话,还需要创建一个监听。
HTML应用文件生成好后,来到Attacks --> Web Drive-by --> Host File
,选择刚才生成的文件,最后点击Launch,复制CS创建的链接,在目标主机上打开此链接。
当在目标主机上提示是否运行时,点击运行。
当该文件在目标上运行后,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,创建过程不再赘述,具体操作过程可参见之前第5节的学习笔记。
1、在MSF中选择攻击模块,根据教程这里选择的adobe_flash_hacking_team_uaf
模块,不过个人感觉现在这个模块已经不太能被利用成功了。none
2、接着配置payload,这里选择revese_http payloadnone
3、之后,配置DisablePayloadHandler
、PrependMigrate
为 Truenone
4、最后,开始攻击。none
在向目标发送漏洞程序之前,我们将自己进行伪装一下,这样可以更好的保护自己,同时提高成功率。CS上有个克隆网站的功能,能够较好的帮助到我们。
首先,来到Attacks --> Web Drive-by --> Clone Site
下,打开克隆网站的功能,之后写入待克隆网站的URL,在Attack中写入MSF中生成的URL。
其中Log keystrokes on cloned site
选项如果勾选则可以获取目标的键盘记录,记录结果在Web Log中能够查看。
之后,浏览器打开克隆站点地址,如果目标存在漏洞,就可以被利用了,同时在CS中也会观察到主机上线。
用CS进行钓鱼需要四个步骤:
1、创建一个目标清单
2、制作一个邮件模板或者使用之前制作好的模板
3、选择一个用来发送邮件的邮件服务器
4、发送邮件
目标清单就是每行一个邮件地址的txt文件,即每行包含一个目标。
在一行中除了邮件地址也可以使用标签或一个名字。如果提供了名称,则有助于 Cobalt Strike 自定义每个网络钓鱼。
这里使用一些在线邮件接收平台的邮箱地址作为示例。
将以上内容保存为txt文本文件,就创建好了自己的目标清单。
使用模板的好处在于可以重复利用,制作钓鱼模板也很简单。
首先可以自己写一封邮件发给自己,或者直接从自己收件箱挑选一个合适的。有了合适的邮件之后,查看邮件原始信息,一般在邮件的选项里能找到这个功能。最后将邮件的原始信息保存为文件,一个模板就制作完成了。
有了目标和模板,然后选好自己的邮件服务器,之后就可以发送消息了。
在CS客户端中,点击Attacks --> Spear Phish
即可打开网络钓鱼模块。添加上目标、模板、钓鱼地址、邮箱服务、退回邮箱,其中Bounce To为退回邮件接收地址,注意要和配置邮件服务器时填的邮箱一致,否则会报错。
所有信息添加完成后,可以点击Preview查看。如果感觉效果不错,就可以点击send发送了。
当目标收到钓鱼邮件,并且点击钓鱼邮件中的链接后,如果钓鱼链接配置的没有问题,CS就能够上线了。
由于此处是仅作为测试用途,所以模板中的链接都是自己的本地内网CS服务器地址,如果是真实环境中,则自然需要使用公网的地址才行。
在真实环境中的钓鱼邮件也不会像这里这么浮夸,真实环境中的钓鱼邮件往往都伪装成和正经儿的邮件一模一样,单从表面上看很难看出区别,因此提高自己的安全意识还是很重要滴。
到目前为止,已经学过了如何在有漏洞的目标上获取立足点的方法,接下来将继续学习后渗透相关的知识,这一节就来学习学习 beacon 的管理、会话传递等。
在一个 Beacon 会话上右击 interact
(交互)即可打开 Beacon 控制台,如果想对多个会话进行控制,也只需选中多个会话,执行相关功能即可。
在 Beacon 的控制台中的输入与输出之间,是一个状态栏,状态栏上的信息分别是:目标 NetBIOS 名称、用户名、会话PID以及 Beacon 最近一次连接到 CS 团队服务器的时间。
Beacon 控制台是在使用 CS 的过程中,很经常用到的功能,向 Beacon 发出的每个命令,都可以在这里看到,如果队友发送了消息,在 Beacon 控制台同样能看到,消息前还会显示队友的名称。
Access:包含了一些对凭据的操作及提权的选项
Explore:包含了信息探测与目标交互的选项
Pivoting:包含了一些设置代理隧道的选项
Session:包含了对当前 Beacon 会话管理的选项
help:查看 Beacon 命令的帮助信息。使用 help + 待查看帮助的命令可查看该命令的帮助信息。
clear:清除 Beacon 命令队列。Beacon 是一个异步的 Payload,输入的命令并不会立即执行,而是当 Beacon 连接到团队服务器时再一一执行命令,因此当需要清除队列命令时就可以使用 clear 命令。
sleep:改变 Beacon 的休眠时间。输入 sleep 30
表示休眠30秒;输入sleep 60 50
表示,随机睡眠 30秒至60秒,其中30秒 = 60 x 50%;如果输入 sleep 0
则表示进入交互模式,任何输入的命令都会被立即执行,当输入一些命令,比如desktop
时, Beacon 会自动进入交互模式。
shell:通过受害主机的 cmd.exe 执行命令。比如运行ipconfig
,就需要输入shell ipconfig
run:不使用 cmd.exe 执行命令。该命令也是 run + 命令的形式运行,该命令会将执行结果回显。
execute:执行命令,但不回显结果。
cd:切换当前工作目录。
pwd:查看当前所在目录。
powershell:通过受害主机的 PowerShell 执行命令。比如想在 PowerShell 下运行 ipconfig
,就需要输入powershell ipconfig
powerpick:不使用 powershell.exe 执行 powershell 命令。这个命令依赖于由 Lee Christensen 开发的非托管 PowerShell 技术。powershell 和 powerpick 命令会使用当前令牌( token )。
psinject:将非托管的 PowerShell 注入到一个特定的进程中并从此位置运行命令。
powershell-import:导入 PowerShell 脚本到 Beacon 中。直接运行 powershell-import + 脚本文件路径即可,但是这个脚本导入命令一次仅能保留一个 PowerShell 脚本,再导入一个新脚本的时候,上一个脚本就被覆盖了,因此可以通过导入一个空文件来清空 Beacon 中导入的脚本。
powershell get-help:获取 PowerShell 命令的相关帮助信息。比如想获取 PowerShell 下 get-process 命令的帮助,就需要输入powershell get-help get-process
execute-assembly:将一个本地的 .NET 可执行文件作为 Beacon 的后渗透任务来运行。
setenv:设置一个环境变量。
0x02 会话传递
Beacon 被设计的最初目的就是向其他的 CS 监听器传递会话。
spawn
:进行会话的传递,也可直接右击会话选择spawn
命令进行会话的选择。默认情况下,spawn
命令会在 rundll32.exe 中派生一个会话。为了更好的隐蔽性,可以找到更合适的程序(如 Internet Explorer) 并使用spawnto
命令来说明在派生新会话时候会使用 Beacon 中的哪个程序。
spawnto
:该命令会要求指明架构(x86 还是 x64)和用于派生会话的程序的完整路径。单独输入spawnto
命令然后按 enter 会指示 Beacon 恢复至其默认行为。
inject
:输入inject + 进程 id + 监听器名
来把一个会话注入一个特定的进程中。使用 ps 命令来获取一个当前系统上的进程列表。使用inject [pid] x64
来将一个64位 Beacon 注入到一个 64位进程中。
spawn
和inject
命令都将一个 payload stage 注入进内存中。如果 payload stage 是 HTTP、HTTPS 或 DNS Beacon 并且它无法连接到你,那么将看不到一个会话。如果 payload stage 是一个绑定的 TCP 或 SMB 的 Beacon,这些命令会自动地尝试连接到并控制这些 payload。
dllinject
:dllinject + [pid]
来将一个反射性 DLL 注入到一个进程中。
shinject
:使用shinject [pid] [架构] [/路径/.../file.bin]
命令来从一个本地文件中注入 shellcode 到一个目标上的进程中。
shspawn
:使用shspawn [架构] [/路径/.../file.bin]
命令会先派生一个新进程(这个新进程是 spawn to 命令指定的可执行文件),然后把指定的 shellcode 文件( file.bin )注入到这个进程中。
dllload
:使用dllload [pid] [c:\路径\...\file.dll]
来在另一个进程中加载磁盘上的 DLL文件。
1、将当前会话传递至其他CS团队服务器中,直接右击spawn
选择要传递的监听器即可。
2、将当前会话传递至MSF中,这里简单做一下演示。
首先,在MSF中,为攻击载荷新建一个payloadnone
随后,在CS中新建一个外部Foreign
监听器,这里设置的监听IP与端口和MSF中的一致即可,随后在CS中利用spawn
选择刚新建的外部监听器,MSF中即可返回会话。
浏览会话系统文件位置在右击会话处,选择 Explore --> File Browser
即可打开。在这里可以对当前会话下的文件进行浏览、上传、下载、删除等操作。
在进行文件浏览时,如果 beacon 设置的 sleep 值较高,CS会因此而变得响应比较慢。
彩色文件夹表示该文件夹的内容位于此文件浏览器的缓存中;深灰色的文件夹表示该文件夹的内容不在此文件浏览器缓存中。
download
:下载请求的文件。Beacon 会下载它的任务要求获取的每一个文件的固定大小的块。这个块的大小取决于 Beacon 当前的数据通道。HTTP 和 HTTPS 通道会拉取 512kb 的数据块。
downloads
:查看当前 Beacon 正在进行的文件下载列表。
cancel
:该命令加上一个文件名来取消正在进行的一个下载任务。也可以在 cancel 命令中使用通配符来一次取消多个文件下载任务。
下载文件都将下载到CS团队服务器中,在View --> Download
下可看到下载文件的记录,选中文件后使用Sync Files
即可将文件下载到本地。
upload
:上传一个文件到目标主机上。
timestomp
:将一个文件的修改属性访问属性和创建时间数据与另一个文件相匹配。当上传一个文件时,有时会想改变此文件的时间戳来使其混入同一文件夹下的其他文件中,使用timestomp 命令就可以完成此工作。
由于CS自带的提权方式较少,因此这里就先加载一些网上的提权脚本,脚本下载地址为: