Untitled
11、用户驱动溢出攻击
0x00 前言
Beacon 运行任务的方式是以jobs
去运行的,比如键盘记录、PowerShell 脚本、端口扫描等,这些任务都是在 beacon check in 之间于后台运行的。
jobs
:查看当前 Beacon 中的任务
jobkill
:加上任务 ID,对指定任务进行停止
0x01 屏幕截图和键盘记录
屏幕截图
screenshot
:获取屏幕截图,使用screenshot pid
来将截屏工具注入到一个 x86 的进程中,使用screenshot pid x64
注入到一个 x64 进程中,explorer.exe 是一个好的候选程序。
使用screenshot [pid] [x86|x64] [time]
来请求截屏工具运行指定的秒数,并在每一次 Beacon 连接到团队服务器的时候报告一张屏幕截图,这是查看用户桌面的一种简便方法。要查看截屏的具体信息,通过View --> Screenshots
来浏览从所有 Beacon 会话中获取的截屏。
键盘记录
keylogger
:键盘记录器,使用keylogger pid
来注入一个 x86 程序。使用keylogger pid x64
来注入一个 x64 程序,explorer.exe 是一个好的候选程序。
使用单独的 keylogger 命令来将键盘记录器注入一个临时程序。键盘记录器会监视从被注入的程序中的键盘记录并将结果报告给 Beacon,直到程序终止或者自己杀死了这个键盘记录后渗透任务。要查看键盘记录的结果,可以到View --> Keystrokes
中进行查看。
其他
除了上述使用命令的方式进行屏幕截图和键盘记录,也可以来到Explore --> Process List
下选择要注入的进程,再直接点击屏幕截图或键盘记录的功能按钮。
从使用上,具体注入那个程序都是可以的,只是注入 explorer.exe 会比较稳定与持久。值得注意的是,多个键盘记录器可能相互冲突,每个桌面会话只应使用一个键盘记录器。
0x02 浏览器转发
浏览器转发是指在已经攻击成功的目标中,利用目标的信息登录网站进行会话劫持,但是目前只支持目标正在使用IE浏览器的前提下。关于如何判断当前用户是否使用IE浏览器,则可以通过屏幕截图来判断。如下图中,通过屏幕截图可以看到目标正在使用IE浏览器登陆着当前网站的admin账户。
找到目前正在使用IE浏览器的目标后,右击该会话,选择Explore --> Browser Pivot
,随后选择要注入的进程,CS 会在它认为可以注入的进程右边显示一个对勾,设置好端口后,点击运行即可。
此时,在浏览器中配置代理,代理配置为http代理,IP为CS团队服务器IP,端口为刚设置的端口。
代理配置好后,在浏览器中打开目标当前正在打开的网址,即可绕过登录界面。
0x03 端口扫描
portscan
:进行端口扫描,使用参数为:portscan [targets] [ports] [discovery method]
。
目标发现discovery method
有三种方法,分别是:arp、icmp、none
,arp
方法使用 ARP 请求来发现一个主机是否存活。icmp
方法发送一个 ICMP echo 请求来检查一个目标是否存活。none
选项让端口扫描工具假设所有的主机都是存活的。
端口扫描会在 Beacon 和团队服务器通讯的这个过程中不停运行。当它有可以报告的结果,它会把结果发送到 Beacon 控制台。Cobalt Strike 会处理这个信息并使用发现的主机更新目标模型。
右击 Beacon会话,在Explore --> Port Scan
中即可打开端口扫描的图形窗口,CS会自动填充扫描地址,确认扫描地址、端口、扫描方式等无误后,开始扫描即可。扫描结束后,在 target table页面中可看到扫描结果,右击会话,选择 Services 可查看详细的扫描结果。
12、特权提升
0x00 用户账户控制
自 Windows vista 开始,Windows 系统引进了用户账户控制机制,即 UACUser Account Control
机制,UAC 机制在 Win 7中得到了完善。UAC 与 UNIX 中的 sudo 工作机制十分相似,平时用户以普通权限工作,当用户需要执行特权操作时,系统会询问他们是否要提升权限。
此时系统用户可分为以下三种等级:
高:管理员权限
中:一般用户权限
低:受限制的权限
使用whoami /groups
命令可以看到当前用户所在的组以及权限,使用net localgroup administrators
可以查看当前在管理员组里的用户名。
0x01 提升权限
当某些操作需要管理员权限,而当前用户权限只有一般用户权限时,就需要提权操作了。
在 CS 中有以下几种提权操作:
bypassuac
:将本地中级管理员权限提升至本地高级管理员权限,适用于Win 7 及以上的系统。
elevate
:将任意用户的权限提升至系统权限,适用于2018年11月更新之前的 Win 7 和 Win 10 系统。
getsystem
:将本地高级管理员权限提升至系统权限。
runas
:使用其他用户的凭证来以其他用户身份运行一个命令,该命令不会返回任何输出。
spawnas
:使用其他用户的凭证来以其他用户身份派生一个会话,这个命令派生一个临时的进程并将 payload stage 注入进那个进程。
0x03 Spawn As 的使用
首先,右击待提权的会话,选择Access --> Spawn As
,输入目标系统用户身份信息,其中域信息填写一个“点”代表本地用户,监听器这里选择的 SMB 监听器,之后点击运行就能看到对应的用户上线了。
13、bypassuac
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 为高权限的会话便会上线了。
14、powerup提权的方法
0x00 介绍
PowerUp 所做的事是寻找可能存在弱点的地方,从而帮助提权。
利用 PowerUp 进行提权需要首先导入 ps1 文件powershell-import PowerUp.ps1
,再执行powershell Invoke-AllChecks
命令,使用 PowerUp 脚本可以快速的帮助我们发现系统弱点,从而实现提权的目的。
0x01 PowerUp 的使用
执行以下命令:将 ps1 文件上传到目标主机,并执行所有弱点检查。none
详细运行过程:none
如果在自己的靶机上发现导入ps1文件失败,这可能是因为系统不允许执行不信任的脚本文件导致的。
这时为了复现成功可以来到靶机下,以管理员权限打开 Powershell,运行set-ExecutionPolicy RemoteSigned
,输入Y
回车,此时系统便能导入 PowerUp.ps1
文件了。none
在运行Invoke-AllChecks
后,便会列出当前系统中可被提权的弱点之处,之后再执行检查结果中AbuseFunction
下的命令便能开始提权操作了。
但是我在自己本地环境中并未复现成功,执行AbuseFunction
后的命令只能创建一个与当前登录用户相同权限的账户,没能达到提权的目的。
参考网上相关文章后也未果,这也是为什么这一节拖更这么久的原因,因此 PowerUp 的复现过程暂时就没法记录了。
如果正在看本篇文章的你有过使用 PowerUp 提权成功的经历,欢迎留言分享。
0x02 获取凭证和哈希
想要获取凭证信息,可以在管理员权限的会话处右击选择Access --> Dump Hashes
,或者在控制台中使用hashdump
命令。
想获取当前用户的密码,可以运行mimikatz
,右击管理员权限会话选择Access --> Run Mimikatz
,或在控制台运行logonpasswords
命令。
在View --> Credentials
下可以查看到hashdump
与mimikatz
获取的数据。
0x03 Mimikatz
在 Beacon 中集成了 mimikatz ,mimikatz 执行命令有三种形式:
mimikatz [module::command] <args>
运行 mimikatz 命令
mimikatz [!module::command] <args>
强制提升到 SYSTEM 权限再运行命令,因为一些命令只有在 SYSTEM 身份下才能被运行。
mimikatz [@module::command] <args>
使用当前 Beacon 的访问令牌运行 mimikatz 命令
下面是一些mimikatz
命令。
!lsadump::cache
获取缓存凭证,默认情况下 Windows 会缓存最近10个密码哈希
!lsadump::sam
获取本地账户密码哈希,该命令与 hashdump 比较类似
misc::cmd
如果注册表中禁用了 CMD ,就重新启用它
!misc::memssp
注入恶意的 Windows SSP 来记录本地身份验证凭据,这个凭证存储在“C:\windows\system32\mimilsa.log”中
misc::skeleton
该命令仅限域内使用。该命令会给所有域内用户添加一个相同的密码,域内所有的用户都可以使用这个密码进行认证,同时原始密码也可以使用,其原理是对 lsass.exe 进行注入,重启后会失效。
process::suspend [pid]
挂起某个进程,但是不结束它
process::resume [pid]
恢复挂起的进程
以上的这些只是mimikatz
能做事情的一小部分,下面看看!misc::memssp
的使用。
详细运行过程:
首先运行mimikatz !misc::memssp
接下来来到C:\Windows\system32
目录
可以看到是存在mimilsa.log
文件的,此时待目标主机重新登录,比如电脑锁屏后用户进行登录。
查看mimilsa.log
文件内容。
成功获取到当前登录用户的明文密码。
15、枚举的命令和方法
0x00 Windows 企业局域网环境介绍
1、活动目录
活动目录Active Directory
是一种能够集中管理用户、系统和策略的技术,活动目录的一个重要概念就是域
。
Active Directory 存储有关网络上对象的信息,并让管理员和用户可以更容易地使用这些信息。例如 Active Directory 域服务即 AD DS 存储着有关用户账户的信息,并且使同一网络下的其他授权用户可以访问此信息。
2、域
域Domain
即是一个管理员或者说是网络边界,在域里的用户和系统都是通过 AD进行管理的。
在域里,如果想控制服务器进行操作就需要取得域的信任。
3、域控制器
域控制器Domain Controller
顾名思义就是一个对域里的用户和系统进行身份验证的一个系统。
4、本地用户
本地用户Local User
就是系统上的一个标准用户。
当我们想在 Windows 命令行下指定一个本地的用户时,可以通过输入 .\本地用户名
或者 计算机名\本地用户名
来指定本地的用户账户,其中.
表示计算机名。
5、域用户
域用户Domain User
是指域控制器下的用户,如果想指定域用户,可以输入域名\域用户名
6、本地管理员
本地管理员Local Administrator
即是指在本地系统有管理权限的用户。
7、域管理员
域管理员Domain Administrator
是指在域控制器上有管理权限的用户。
注意:以下命令是在主机中运行的结果,在 Cobalt Strike 中运行只需要根据命令类型在命令前加上 shell 或者 powershell 即可。
0x01 枚举主机和域信任
1、一些问题
当进入目标局域网时,需要弄清楚几个问题。
1、我正处在那个域上?
2、域信任关系是什么样的?
3、可以登陆哪些域?这些域上有哪些系统?目标是什么?可以获取什么?
4、系统上存放共享数据的地方在哪里?
2、一些枚举的命令
net view /domain
枚举出当前域
net view /domain:[domain]
、net group "domain computers" /domain
net view /domain:[domain]
枚举域上一个主机的列表,但不是所有主机,这个也就是在网上邻居中可以看到的内容。net group "domain computers" /domain
可以获得加入到这个域中的电脑账户列表。
nltest /dclist:[domain]
如果想找到那个主机是域的域控服务器,可以使用
nltest
命令
当使用 32 位的 payload 运行在 64 位的系统上,并且 nltest 路径不对的时候,可能会提示没有 nltest 这个命令,这时可以尝试使用下面的命令为其指定路径。
nslookup [name]
、ping -n 1 -4 [name]
有时在 Cobalt Strike 里,我们只需要使用目标的 NetBIOS 名称,而不用在意使用 IPv4 地址或者 IPv6 地址,NetBIOS 名称是在域上每台机器的完整名称。
但是如果想通过一个 IPv4 地址转换为一个 NetBIOS 名称,可以使用 nslookup 命令,或者使用 ping 发送一个包来获得主机返回的 IP 地址。
nltest /domain_trusts
、nltest /server:[address] /domain_trusts
如果想取得域上的信任关系,可以使用 nltest 命令来实现。
net view \\[name]
如果想列出主机上的共享列表,只需输入
net view \\[name]
即可
0x02 PowerView
在渗透进入内网后,如果直接使用 Windows 的内置命令,比如 net view、net user
等,可能就会被管理人员或者各种安全监控设备所发现。因此较为安全的办法就是使用 Powershell 和 VMI 来进行躲避态势感知的检测。
PowerView 是由 Will Schroeder 开发的 PowerShell 脚本,该脚本完全依赖于 Powershell 和 VMI ,使用 PowerView 可以更好的收集内网中的信息,在使用之前,与上一节 PowerUp 的一样需要先 import 导入 ps1 文件。
一些 PowerView 的命令:
Get-NetDomain
查询本地域的信息
Invoke-ShareFinder
查找网络上是否存在共享
Invoke-MapDomainTrust
显示当前域的信任关系
其他更多用法可以查看参考链接,或者参考 PowerView 项目上的 ReadMe 部分。
0X03 Net 模块
Cobalt Strike 中有自己的 net 模块,net 模块是 beacon 后渗透攻击模块,它通过 windows 的网络管理 api 函数来执行命令,想使用 net 命令,只需要在 beacon 的控制中心输入 net + 要执行的命令即可。
在 beacon 控制台中输入这些命令很类似输入一个本地的 net 命令,但是有一些些许的不同,比如下面一个是在主机上运行 net view 的结果一个是在 beacon 控制台下运行 net view 的结果。不难看出,beacon 下输出的结果更为丰富。
Last updated
Was this helpful?