pyLDAPGui 开发历程:跨平台 LDAP 图形化工具诞生记
pyLDAPGui - 开发历程
背景起源
pyLDAPGui 是我在过去几个月里一直在开发的一个应用程序,直到最近才决定以概念验证的形式发布,供大家试用。这个想法的诞生源于我在开发"无恶意软件对抗模拟"课程时,需要寻找能够在不同操作系统中有效进行"就地取材"的工具,这让我开始深入研究可移植的可用选项。
如果你曾经进行过任何形式的渗透测试、红队行动或专注于 Active Directory 环境的审计,很可能使用过 Active Directory Explorer。这是一个在 Windows 主机上连接 LDAP 服务器(通常是域控制器)并查看 AD 环境的优秀工具。但它的最大限制是只能在 Windows 上使用,如果你希望在 Linux 虚拟机或 Mac 上操作,就无法使用它。
寻找替代方案
在寻找具有用户界面的替代 LDAP 浏览器时,我发现了一些有用的系统管理工具:
GoDAP:终端用户界面工具
ldap_shell:具有各种功能的优秀终端 UI
Softerra LDAP 浏览器:类似老式 C#应用程序的界面
但这些工具要么缺乏图形界面,要么仍然依赖 Windows 平台。
技术选型
编程语言选择
在创建 GUI 应用程序时,我考虑过多种语言:
Go 和 Rust:最初尝试但学习曲线较陡峭
Python:最终选择,因其多功能性和易用性
GUI 库选择
评估了多个 Python GUI 库后,我选择了 PyQt:
Tkinter
PyQt ✓
Kivy
选择 PyQt 主要是因为其易用性、可扩展性和跨平台支持。
功能设计
工具的核心设计目标是与 ADExplorer 类似的功能:
通过树状视图连接到 LDAP
支持 LDAP 和 LDAPS
能够导出为合理格式(主要是 CSV 和 JSON,支持 BloodHound 兼容性)
快速搜索功能,支持运行特定的 LDAP 查询
开发挑战
GUI 设计
在 Python 中设计 GUI 比我想象的要复杂,特别是在确定导出文件的结构方面。
SOCKs 支持
实现 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 分析按钮功能开发
这个 PoC 工具是我过去几个月开发工作的成果,希望能对大家有所帮助。更多精彩内容 请关注我的个人公众号 公众号(办公 AI 智能小助手)对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)
公众号二维码
公众号二维码







评论