在内网渗透中拿到了域控就结束了吗?但实际上内网渗透中拿到域控才刚开始!如果是做 APT 需要对某个目标、某个部门、某个部门中的某个人进行渗透,这个时候就需要长时间去了解这个内网环境,对域内进行定向打击,需要花很长时间去熟悉一个内网框架的!所以说内网渗透的本质其实就是信息搜集。
一次小型红队持久性内网域渗透
前言
首先是拿到了一个 webshell
,目标当前机器无 AV
,然后上 powershell
弹到了 CobaltStrike
:
通过信息搜集发现是有域环境的:
令牌窃取拿到域控
在域渗透中有很多方式能够快速拿到域控,在本篇就写如何令牌窃取快速拿域控权限,以后有机会在写其他手段!
查询域管理员有两个用户:x10
、Administrator
:
1 | net group "domain admins" /domain |
查询域控制器发现有多台:xxxxx-PDM$
、xxxxx-SERVER$
、xxx-DC$
、 xx-SERVER$
:
1 | net group "domain controllers" /domain |
随后通过 ms16-075
提权到 SYSTEM
:
然后做了一个定时任务保持权限不丢失 :
1 | shell schtasks /create /RL HIGHEST /F /tn "Windows Server Update" /tr "c:\windows\Temp\Cha\64.exe" /sc DAILY /mo 1 /ST 09:00 /RU SYSTEM |
一般拿到一台机器的权限后立即做好权限维持,还有就是马上把当前机器里的各种文件、浏览器数据翻个底朝天(除了那些可能保存在浏览器中的账号密码,还有那些像浏览器收藏夹及历史记录里的一些内网铭感资产的链接也会对我们有所帮助)
通过把当前机器文件翻遍后找到了一些账号密码:
1 | Mssql: |
还可以通过 GPP
、查看核心机器共享文件里面有什么,这里主要是域控:
可以看到共享组策略目录中其实包含里很多东西,一些域管理员可能会利用它对域内用户登陆时进行一些初始化操作,所以我们在域渗透的过程中首先都会去看看这个地方,看看有没有什么敏感信息文件:
但是在本机器上没有翻到有价值的共享文件!之后通过查看当前机器有域管进程:
随即注入进程让域管上线:
域管和域控建立 IPC
:
1 | net use \\192.168.2.105 |
直接拿到四个域控:
1 | shell dir \\192.168.2.105\c$ |
通过扫描内网存活:
然后通过中转让域控上线把:
成功拿到域控:
域控权限维持
为了能够长时间控制到当前域控,我留下了两个后门:SSP
、Skeleton Key
。
SSP 权限维持
SSP
即 Security Support Provider
,通俗理解就是一个用于身份验证的 dll
, 系统在启动时 SSP
会被加载到 lsass.exe
进程中 , 由于 lsa
可扩展 , 导致在系统启动时我们完全可以加载一个自定义的 dll
, 比如 , 一个用于记录所有登录到当前系统的明文账号密码的 dll
。
通过拿到域控,我留了一个 SSP
后门:目标无需重启,立即记录密码信息,如果当前机器重启则失效!直接注入 ssp
,因为当前机器无杀软,实际情况下需要注意杀软情况:
1 | beacon> mimikatz privilege::debug |
等待了许久终于有人登陆当前机器成功获取到了密码:
Skeleton Key 万能钥匙
为了防止域控权限丢失,我还留下了一个 Skeleton Key
后门,这个也不算后门,只能算一个万能密码
,原理就是通过在 lsass
进程中创建了一个万能密码,通过这个万能密码我们可以随时访问到当前域控!
通过 mimikatz
在域控制器上安装 Skeleton Key
:
1 | beacon> mimikatz privilege::debug |
安装成功后我们可以通过其他域内主机的普通域用户,使用万能账号域管用户:a-xxxxx\administrator
密码 mimikatz
利用 IPC
连接域控:
1 | beacon> shell net use \\xxxxx-PDM\c$ /user:"a-xxxxx\administrator" "mimikatz" |
域内信息搜集整理
为了能够梳理当前域内的信息,我使用的是 BloodHound
分析当前域环境的各个关系!
先下载:https://neo4j.com/artifact.php?name=neo4j-community-3.4.4-windows.zip
在 cmd
下输入命令 neo4j.bat console
启动 Neo4j
服务:
这个时候访问本地 web
:http://127.0.0.1:7474/browser/
,默认账号密码为:neo4j
(然后会让你修改一次密码)
之后安装 Bloodhound
:https://github.com/BloodHoundAD/BloodHound/releases/download/1.5.2/BloodHound-win32-x64.zip
下载完成后解压,进入目录找到 BloodHound
并运行:
现在已经完成了安装!之后需要通过 SharpHound.exe
提权域内所有信息:
在这期间它会进行大量的 ldap
查询域内数据,等运行完后会在当前目录下生成一个 当前时间_BloodHound.zip
的文件!但是发现出问题了,一直不能运行:
通过分析才知道 2012
版本可以用这个,因为 .net
版本有问题.
没事,我们换种方法,通过 csvde
也能帮我们梳理域内信息,具体用法:
1 | csvde -setspn [域的名字] -f [文件名].csv |
LDAP的存储规则:一般存储的是域的信息
区分名(DN,Distinguished Name)一个条目的区分名称叫做“dn”或者叫做区分名。在一个目录中这个名称总是唯一的。
CN=Common Nmae 为用户名或服务器名,最长可以到80个字符,可以为中文。
OU=Organization Unit为组织单元,最多可以有四级,没级最长32个字符,可以为中文。
O=Organization为组织名,可以3-64个字符长度。
C=Country为国家名,可选,为2个字符长度。
还可以通过 spn
查询域内详细信息:
1 | 查看当前域内所有的SPN:setspn -Q */* |
之所以要获取目标域的完整 spn
记录,核心就是为了摸清目标域内所有敏感机器资产的具体分布情况,这样方便我们后续单独对这些机器进行逐个“重点突破”,我们还可以拿着这些获取到的机器名,来快速完整探测当前域内的所有存活主机!
第一种方法当然也可以通过 nbtscan
来快速发现内网机器存活,通过 nbtscan
跑出来的结果发现机器名和域名能够帮我们快速识别哪些机器可能是在域内,哪些机器是我们后期要重点关照的:
第二种方式可以通过 Metasploit
+ cs
的 socks
来帮我探测内网主机存活是否存在域还是工作组以及是什么系统,关于 Metasploit
的使用我之前也发过相关文章到公众号,这个就不再多阐述:
1 | msf6 > use auxiliary/scanner/smb/smb_version |
从上图可以看到,大部分系统都是 XP
这说明可以利用永恒之蓝,当然这都是后话了!
第三种方式可以通过 dnsdump
快速根据域内机器名获取到对应的 IP
是多少!dnsdump
下载地址是:https://github.com/dirkjanm/adidnsdump
大家可以根据实际情况可以把 py
文件打包成 exe
或者可以直接通过 proxychains
+ socks
也能运行!我这里就直接在当前机器运行 exe
:
1 | dnsdump.exe -u 域名\域用户 -p 域密码 域控制器名 -r |
records.csv
:这个时候对应的机器名
的对应 IP
就一目了然了!
当然还要去看看当前机器有哪些网段,ipconfig /all
是看不出到底还有哪些网段可以访问的,这个时候我们可以看看路由
,分析子网掩码
:
1 | route print |
还可以通过查看网络连接看看有没有和其他 IP
进行链接:
1 | netstat -ano |
这台机器很显然就只有 192
这个段!
域内定向打击
APT
需要对某个区、某个部门、某个人的电脑进行渗透,这个时候就需要长时间去了解这个内网环境,找到你要攻击的人的主机/服务器对应在内网的那个IP
,这是需要花很长时间去搜集信息的,所以说内网渗透的核心其实就是信息搜集!