pyLDAPGui开发历程:跨平台LDAP图形化工具诞生记

本文详细介绍了pyLDAPGui工具的开发历程,这是一个基于Python的跨平台LDAP图形化浏览工具,支持LDAP/LDAPS连接、树状视图展示、数据导出和BloodHound兼容等功能,旨在解决Windows平台限制问题。

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功能时。通过大量谷歌搜索和试错,最终解决了这些问题。

操作安全考虑

在开发过程中加入了操作安全功能:

1
2
3
4
5
self.attribute_variations = {
    'samaccountname': ['sAMAccountName', 'samAccountName', 'SAMACCOUNTNAME', 'sAmAcCoUnTnAmE'],
    'objectclass': ['objectClass', 'OBJECTCLASS', 'ObjectClass', 'oBjEcTcLaSs'],
    # ... 更多属性变体
}

工具执行以下类型的LDAP查询:

  • 树状导航(get_children):展开树节点时触发
  • 条目详情(get_entry):选择项目时触发
  • 批量导出(get_bloodhound_data):6个大型BloodHound查询
  • 通用搜索(search):用于CSV导出和浏览

查询优化

为保持隐蔽性,添加了查询间随机延迟(0.5-2秒),并在每次运行时打乱查询顺序以规避标准签名检测。

GitHub Actions集成

使用GitHub Actions实现CI/CD,经过26+次尝试才正确配置。关键权限设置:

1
2
3
permissions:
  contents: write
  packages: write

最终成果

完成后的GUI包含以下核心功能:

  • 连接LDAP/LDAPS服务器并以树状视图显示
  • 导出为CSV格式
  • 导出为BloodHound格式
  • 直接导入Neo4j(支持网络连接)

未来计划

计划进一步改进代码并添加更多功能:

  • 使用OpenGraph支持BloodHound CE
  • 导出特定详细信息
  • ADCS分析功能

工具已在由Ludus生成的小型实验室中进行测试,但尚未在更广泛环境中进行性能测试。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计