Kali Linux 加入 Windows 域:完整的域渗透测试环境搭建指南
摘要
在企业内网渗透测试中,将攻击机成功加入目标域是至关重要的一步。本文详细记录了如何将 Kali Linux 虚拟机完整集成到 Windows Active Directory 域环境中,包括 DNS 配置、Kerberos 认证、SSSD 服务配置等关键步骤,并提供了完整的域信息枚举和渗透测试技术指南。
1. 环境概述
1.1 网络拓扑
域控制器 (DC):
- IP: 1.1.1.129/24 (主网卡)
- IP: 192.168.1.42/24 (副网卡)
- 域名: hacker.testlab
- 操作系统: Windows Server 2012 R2
Kali Linux:
- IP: 1.1.1.134/24
- 主机名: kali
- 目标: 加入 hacker.testlab 域
1.2 域环境信息
- 域名称: hacker.testlab
- 域功能级别: Windows Server 2012 R2
- 关键账户: Administrator (域管理员)
- 域成员: 多个 Windows 系统和我们的 Kali Linux
2. 初始问题诊断
2.1 域发现失败
# 初始尝试发现域
realm discover hacker.testlab
# 输出: realm: No such realm found: hacker.testlab
kinit administrator@hacker.testlab
# 输出: kinit: Cannot find KDC for realm "hacker.testlab"
2.2 根本原因分析
通过检查网络配置发现关键问题:
# 检查网络接口
ip addr show
# 输出显示双网卡配置,但DNS指向错误
nslookup hacker.testlab
# 输出: server can't find hacker.testlab: NXDOMAIN
问题根源: DNS 配置错误,指向路由器而非域控制器。
3. 完整的域加入过程
3.1 DNS 配置修正
# 配置正确的 DNS 服务器
sudo nmcli connection modify "Wired connection 1" ipv4.dns "1.1.1.129"
sudo nmcli connection modify "Wired connection 1" ipv4.dns-search "hacker.testlab"
sudo nmcli connection modify "Wired connection 1" ipv4.ignore-auto-dns yes
# 重新应用网络配置
sudo nmcli connection down "Wired connection 1"
sudo nmcli connection up "Wired connection 1"
# 验证 DNS 解析
nslookup hacker.testlab
nslookup -type=SRV _ldap._tcp.hacker.testlab
3.2 安装必要软件包
# 更新系统并安装域加入工具
sudo apt update && sudo apt upgrade -y
sudo apt install realmd sssd sssd-tools libnss-sss libpam-sss \
adcli samba-common-bin oddjob oddjob-mkhomedir packagekit krb5-user -y
3.3 Kerberos 配置
# 手动配置 Kerberos
sudo nano /etc/krb5.conf
配置内容:
[libdefaults]
default_realm = HACKER.TESTLAB
dns_lookup_realm = false
dns_lookup_kdc = true
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
[realms]
HACKER.TESTLAB = {
kdc = 1.1.1.129
admin_server = 1.1.1.129
default_domain = hacker.testlab
}
[domain_realm]
.hacker.testlab = HACKER.TESTLAB
hacker.testlab = HACKER.TESTLAB
3.4 测试 Kerberos 认证
# 获取 Kerberos ticket
kinit administrator@HACKER.TESTLAB
# 验证 ticket
klist
# 输出显示成功获取 ticket
3.5 使用 adcli 加入域
当 realm join 因软件包检测问题失败时,我们使用 adcli:
# 使用 adcli 手动加入域
sudo adcli join --domain=hacker.testlab --domain-realm=HACKER.TESTLAB \
--user=administrator --verbose
关键输出确认:
- ✅ 成功认证为 administrator@HACKER.TESTLAB
- ✅ 创建计算机账户: CN=KALI,CN=Computers,DC=hacker,DC=testlab
- ✅ 设置计算机密码并更新 Kerberos keytab
3.6 SSSD 服务配置
# 创建 SSSD 配置
sudo nano /etc/sssd/sssd.conf
配置内容:
[sssd]
services = nss, pam
config_file_version = 2
domains = hacker.testlab
[domain/hacker.testlab]
id_provider = ad
auth_provider = ad
access_provider = ad
chpass_provider = ad
ad_domain = hacker.testlab
ad_server = dc.hacker.testlab
krb5_realm = HACKER.TESTLAB
default_shell = /bin/bash
fallback_homedir = /home/%u@%d
use_fully_qualified_names = True
cache_credentials = True
krb5_store_password_if_offline = True
设置权限并启动服务:
sudo chmod 600 /etc/sssd/sssd.conf
sudo systemctl start sssd
sudo systemctl enable sssd
3.7 PAM 和 NSS 配置
# 配置自动创建家目录
sudo nano /etc/pam.d/common-session
# 添加: session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
# 确保 NSS 包含 sss
sudo nano /etc/nsswitch.conf
# 验证包含: passwd: files systemd sss
4. 域集成验证
4.1 基础功能验证
#!/bin/bash
echo "=== 域集成状态验证 ==="
# 检查 SSSD 服务
echo "SSSD 服务状态: $(systemctl is-active sssd)"
# 测试域用户认证
echo "域用户认证: $(id administrator@hacker.testlab >/dev/null 2>&1 && echo '✓' || echo '✗')"
# 测试域组认证
echo "域组认证: $(getent group 'domain users@hacker.testlab' >/dev/null 2>&1 && echo '✓' || echo '✗')"
# 验证 Kerberos
echo "Kerberos: $(klist 2>/dev/null | grep -q 'Default principal' && echo '✓' || echo '✗')"
# 检查家目录
echo "家目录: $(ls -d /home/administrator@hacker.testlab >/dev/null 2>&1 && echo '✓' || echo '✗')"
4.2 高级验证
# 验证域加入状态
sudo realm list
sudo adcli show-computer --domain-controller=dc.hacker.testlab
# 测试域用户登录
su - administrator@hacker.testlab
5. 域信息枚举技术
5.1 LDAP 域枚举
# 枚举所有域用户
ldapsearch -H ldap://dc.hacker.testlab -x -D "administrator@hacker.testlab" \
-W -b "DC=hacker,DC=testlab" "(objectClass=user)" sAMAccountName
# 枚举计算机账户
ldapsearch -H ldap://dc.hacker.testlab -x -D "administrator@hacker.testlab" \
-W -b "DC=hacker,DC=testlab" "(objectClass=computer)"
# 枚举域组
ldapsearch -H ldap://dc.hacker.testlab -x -D "administrator@hacker.testlab" \
-W -b "DC=hacker,DC=testlab" "(objectClass=group)"
枚举结果摘要:
- 域用户: 10个账户(包括 Administrator、Guest、krbtgt 等)
- 计算机账户: 4个系统(DC、WIN2008、CISP-PTE-PC、KALI)
- 域组: 46个安全组
5.2 SMB 共享枚举
# 枚举域共享
smbclient -U administrator -L //dc.hacker.testlab
# 访问关键共享
smbclient -U administrator //dc.hacker.testlab/SYSVOL
smbclient -U administrator //dc.hacker.testlab/NETLOGON
5.3 获取的域关键信息
域控制器信息:
- 主机名: DC.hacker.testlab
- 操作系统: Windows Server 2012 R2 Datacenter
- SPN: 多个服务主体名称
域用户信息:
- Administrator: 域管理员,属于多个特权组
- krbtgt: Kerberos 服务账户
- 多个普通用户账户
安全组架构:
- Domain Admins: 域管理员组
- Enterprise Admins: 企业管理员组
- Schema Admins: 架构管理员组
- 多个内置特权组
6. 渗透测试技术应用
6.1 BloodHound 数据收集
# 在 BloodHound Python 环境中
bloodhound-python -d hacker.testlab -u administrator -p '密码' \
-ns dc.hacker.testlab -c All
6.2 CrackMapExec 枚举
# 枚举域用户
crackmapexec smb dc.hacker.testlab -u administrator -p '密码' --users
# 枚举域组
crackmapexec smb dc.hacker.testlab -u administrator -p '密码' --groups
# 枚举共享
crackmapexec smb dc.hacker.testlab -u administrator -p '密码' --shares
6.3 横向移动测试
# 使用域凭据扫描其他系统
nmap -sS 1.1.1.0/24 --script smb-brute --script-args userdb=domain_users.txt
# 测试 WinRM 访问
evil-winrm -i 1.1.1.129 -u administrator -p '密码'
6.4 组策略分析
# 下载组策略文件分析
smbclient -U administrator -c "recurse; prompt; mget *" "//dc.hacker.testlab/SYSVOL"
# 分析组策略首选项中的密码
gpp-decrypt <加密的密码>
7. 故障排除和优化
7.1 常见问题解决
问题 1: SSSD 服务无法启动
# 检查配置文件权限
sudo chmod 600 /etc/sssd/sssd.conf
sudo chown root:root /etc/sssd/sssd.conf
# 查看详细日志
sudo tail -f /var/log/sssd/sssd.log
问题 2: Kerberos 认证失败
# 清除并重新获取 ticket
kdestroy
kinit administrator@HACKER.TESTLAB
# 检查时间同步
timedatectl status
sudo ntpdate -s dc.hacker.testlab
问题 3: 域用户无法登录
# 检查 PAM 配置
sudo pam-auth-update
# 手动创建家目录
sudo mkdir /home/administrator@hacker.testlab
sudo chown administrator@hacker.testlab:domain\ users@hacker.testlab /home/administrator@hacker.testlab
7.2 性能优化配置
# 在 /etc/sssd/sssd.conf 中添加性能优化
[domain/hacker.testlab]
# 启用枚举
enumerate = true
# 缓存优化
entry_cache_timeout = 600
entry_cache_user_timeout = 5400
entry_cache_group_timeout = 5400
# 调试设置
debug_level = 0 # 生产环境设置为 0
8. 安全考虑和最佳实践
8.1 安全配置
# 配置域管理员 sudo 权限(谨慎使用)
sudo nano /etc/sudoers.d/domain_admins
# 内容: %domain\ admins@hacker.testlab ALL=(ALL:ALL) ALL
# 设置正确权限
sudo chmod 440 /etc/sudoers.d/domain_admins
8.2 监控和日志
# 监控 SSSD 活动
sudo tail -f /var/log/sssd/sssd.log
sudo tail -f /var/log/sssd/sssd_hacker.testlab.log
# 监控认证日志
sudo tail -f /var/log/auth.log
8.3 清理操作
# 离开域
sudo realm leave hacker.testlab
# 清理配置
sudo systemctl stop sssd
sudo apt remove --purge sssd sssd-tools adcli
sudo rm -rf /etc/sssd/ /var/lib/sss/
9. 技术总结
9.1 成功实现的功能
✅ 完整的域集成:
- 计算机账户成功加入 Active Directory
- Kerberos 认证正常工作
- 域用户登录和家目录自动创建
- SSSD 服务稳定运行
✅ 完整的域信息访问:
- LDAP 查询获取完整域架构
- 枚举所有用户、计算机和组
- 访问域共享资源
- 使用域凭据进行网络认证
✅ 渗透测试就绪:
- 支持 BloodHound 数据收集
- 兼容主流域渗透工具
- 具备横向移动能力
9.2 关键技术要点
- DNS 配置是关键 - 必须正确指向域控制器
- 时间同步很重要 - Kerberos 对时间敏感
- 多工具备选方案 - realm、adcli、net ads 的灵活使用
- SSSD 配置优化 - 影响性能和稳定性
9.3 实际应用价值
本文提供的技术方案:
- 为红队演练提供真实的域成员攻击平台
- 为企业安全测试提供标准的域集成方法
- 为渗透测试学习提供完整的实践环境
- 为 AD 安全研究提供可靠的技术基础
10. 结论
通过本文的详细步骤,我们成功将 Kali Linux 完整集成到 Windows Active Directory 域环境中。这个过程不仅解决了常见的域加入问题,还提供了完整的域信息枚举和渗透测试技术栈。
这种集成使得 Kali Linux 成为域环境的正式成员,为后续的域渗透测试、横向移动、权限提升等高级攻击技术提供了坚实的基础平台。所有步骤都经过实际环境验证,确保技术的可靠性和实用性。
最终状态确认: 🎉 Kali Linux 已 100% 成功加入 hacker.testlab 域,所有域功能正常工作,准备就绪进行高级域渗透测试。
注意:本文所有技术仅限在授权环境中使用,遵守相关法律法规和道德准则。