pyLDAPGui - 开发历程
背景起源
pyLDAPGui是我在过去几个月里一直在开发的一个应用程序,直到最近才决定以概念验证的形式发布,供大家试用。这个想法的诞生源于我在开发"无恶意软件对抗模拟(MAE)“课程时,需要寻找跨操作系统、可移植的有效工具,这让我深入研究了现有的各种选项。
如果你曾经进行过任何形式的渗透测试、红队行动或专注于Active Directory环境的审计,很可能使用过Active Directory Explorer(AD Explorer)。这是一个在Windows主机上连接LDAP服务器(通常是域控制器)并查看AD环境的优秀工具。但AD Explorer存在诸多限制:速度较慢、快照输出为.dat格式,并且仅限于Windows主机。
寻找替代方案
在寻找替代的LDAP浏览器过程中,我发现了一些有用的系统管理工具:
- GoDAP:终端用户界面工具
- ldap_shell:功能丰富的终端UI
- Softerra LDAP Browser:传统的C#应用程序
但这些工具要么缺乏图形界面,要么仍然依赖Windows平台。
技术选型
编程语言选择
在创建GUI应用程序时,我考虑过多种语言:
- Go
- Rust
- C
- Python
最终选择Python,因为它在多功能性和可用库方面最为均衡。
GUI库选择
评估了多个Python GUI库后:
- Tkinter
- PyQt
- Kivy
最终选择PyQt,因为其易用性、可扩展性和跨平台支持。
功能设计
工具核心功能设计参考AD Explorer:
- 通过树状视图连接LDAP
- 支持LDAP和LDAPS
- 导出为CSV和JSON格式(兼容BloodHound)
- 快速搜索和特定LDAP查询功能
开发挑战
GUI设计
在Python中设计GUI比预想的要复杂,特别是在确定导出文件结构和实现SOCKs功能时。通过大量谷歌搜索和试错,最终解决了这些问题。
操作安全考虑
在开发过程中加入了操作安全功能:
|
|
工具执行以下类型的LDAP查询:
- 树状导航(get_children):展开树节点时触发
- 条目详情(get_entry):选择项目时触发
- 批量导出(get_bloodhound_data):6个大型BloodHound查询
- 通用搜索(search):用于CSV导出和浏览
查询优化
为保持隐蔽性,添加了查询间随机延迟(0.5-2秒),并在每次运行时打乱查询顺序以规避标准签名检测。
GitHub Actions集成
使用GitHub Actions实现CI/CD,经过26+次尝试才正确配置。关键权限设置:
|
|
最终成果
完成后的GUI包含以下核心功能:
- 连接LDAP/LDAPS服务器并以树状视图显示
- 导出为CSV格式
- 导出为BloodHound格式
- 直接导入Neo4j(支持网络连接)
未来计划
计划进一步改进代码并添加更多功能:
- 使用OpenGraph支持BloodHound CE
- 导出特定详细信息
- ADCS分析功能
工具已在由Ludus生成的小型实验室中进行测试,但尚未在更广泛环境中进行性能测试。