freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

如何使用LDAPX动态检查和转换LDAP数据包
2025-01-17 13:26:11
所属地 广西

关于LDAPX

LDAPX是一款功能强大且灵活的LDAP代理,可以帮助广大研究人员动态检查和转换其他工具生成的所有 LDAP 数据包。

工具要求

Golang

工具安装

由于该工具基于Go开发,因此我们首先需要在本地设备上安装并配置好最新版本的Go环境。

接下来,广大研究人员可以直接使用下列命令将该项目源码克隆至本地:

git clone github.com/Macmod/ldapx

然后切换到项目目录中,使用下列命令完成工具代码的安装和构建:

cd ldapx

go install .

发布版本

我们还可以直接访问该项目的【Releases页面】下载预编译版本的LDAPX。

工具使用

$ ldapx -t LDAPSERVER:389 [-f MIDDLEWARECHAIN] [-a MIDDLEWARECHAIN] [-b MIDDLEWARECHAIN] [-l LOCALADDR:LOCALPORT] [-o MIDDLEWAREOPTION=VALUE] [...]

参数命令

-f:将对所有适用的请求应用过滤中间件;

-a:将把 AttrList 中间件应用于所有适用的请求;

-b:将对所有适用的请求应用 BaseDN 中间件;

-e:将把 AttrEntries 中间件应用于所有适用的请求;

-o:可以多次指定,用于指定中间件的选项;

-F:指定转发数据包(请求)的详细程度;

-R:指定反向数据包(响应)的详细程度;

-x:可用于指定用于连接目标的 SOCKS 代理;

工具使用样例

在过滤器、属性列表和 baseDN 中应用多个中间件

$ ldapx -t 192.168.117.2:389 -f OGDR -a Owp -b OX

使用 shell

我们还可以使用构建 shell 来动态更改中间件(set命令)或模拟 LDAP 查询(test命令):

输出统计数据

要查看数据包统计信息,包括每个 LDAP 操作通过代理传递的数据包数量,请使用show stats命令:

ldapx> show stats

[Client -> Target]

  Packets Received: 14

  Packets Sent: 14

  Bytes Received: 1464

  Bytes Sent: 1464

  Counts by Type:

    Bind Request: 1

    Search Request: 12

    Modify Request: 1

 

[Client <- Target]

  Packets Received: 149

  Packets Sent: 149

  Bytes Received: 177045

  Bytes Sent: 177045

  Counts by Type:

    Bind Response: 1

    Search Result Entry: 129

    Search Result Done: 12

    Search Result Reference: 6

Modify Response: 1

以代码库形式使用

package main

 

import (

    "fmt"

 

    filtermid "github.com/Macmod/ldapx/middlewares/filter"

    "github.com/Macmod/ldapx/parser"

)

 

func main() {

    query := "(&(cn=john)(sn=doe))"

    fmt.Printf("Original Query: %s\n", query)

 

    myFilter, err := parser.QueryToFilter(query)

 

    if err != nil {

            fmt.Errorf("error parsing query")

    }

 

    // FilterToString can be used to show

    // the internal representation of the parsed filter

    fmt.Println(parser.FilterToString(myFilter, 0))

 

    // Applying the OID middleware

    obfuscator := filtermid.OIDAttributeFilterObf(3, false)

    newFilter := obfuscator(myFilter)

 

    newQuery, err := parser.FilterToQuery(newFilter)

    if err != nil {

            fmt.Errorf("error converting filter to query")

    }

 

    fmt.Printf("Changed Query: %s\n", newQuery)

}

输出结果:

Original Query: (&(cn=john)(sn=doe))

Filter Type: 0

AND Filter with 2 sub-filters:

  Filter Type: 3

  Equality Match - Attribute: cn, Value: john

  Filter Type: 3

  Equality Match - Attribute: sn, Value: doe

 

Changed Query: (&(2.005.4.03=john)(2.005.04.004=doe))

中间件开发

过滤器

func YourFilterMiddleware(args) func(parser.Filter) parser.Filter

BaseDN

func YourBaseDNMiddleware(args) func(string) string

属性列表

func YourAttrListMiddleware(args) func([]string) []string

属性条目

func YourAttrEntriesMiddleware(args) func(parser.AttrEntries) parser.AttrEntries

中间件代码样例

func EqExtensibleFilterObf(dn bool) func(parser.Filter) parser.Filter {

  // For every leaf in the filter...

  return LeafApplierFilterMiddleware(func(filter parser.Filter) parser.Filter {

    switch f := filter.(type) {

    // If the leaf is an EqualityMatch

    case *parser.FilterEqualityMatch:

      // Replace it with an ExtensibleMatch with an empty MatchingRule

      // optionally adding a DNAttributes (Active Directory ignores DNAttributes)

      return &parser.FilterExtensibleMatch{

        MatchingRule:  "",

        AttributeDesc: f.AttributeDesc,

        MatchValue:    f.AssertionValue,

        DNAttributes:  dn,

      }

    }

 

    return filter

  })

}

然后在以下位置注册config.go即可:

var filterMidFlags map[rune]string = map[rune]string{

  ...

  'x': "EqExtensible",

  ...

}

 

// In SetupMiddlewaresMap:

filterMidMap = map[string]filtermid.FilterMiddleware{

  ...

  "EqExtensible": filtermid.EqualityToExtensibleFilterObf(false),

  ...

}

许可证协议

本项目的开发与发布遵循MIT开源许可协议。

项目地址

LDAPX:【GitHub传送门

参考资料

https://x.com/danielhbohannon

https://x.com/sabi_elezi

https://github.com/go-ldap/ldap

https://ldap.com/

# 数据安全 # LDAP # 动态分析 # 数据包安全
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录