千家信息网

LDAP注入该如何理解

发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,这篇文章的内容主要围绕LDAP注入该如何理解进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!1、LDAP 注入
千家信息网最后更新 2025年12月01日LDAP注入该如何理解

这篇文章的内容主要围绕LDAP注入该如何理解进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!

1、LDAP 注入

LDAP (Light Directory Access Portocol) 是基于X.500标准的轻量级目录访问协议,提供访问目录数据库方法的服务和协议,常用于与目录数据库组成目录服务。其中目录是一个为查询、浏览和搜索而优化的专业分布式数据库,它呈树状结构组织数据,类似于Linux/Unix系统中的文件目录。公用证书、安全密钥、公司的物理设备信息等修改并不频繁的数据适合存储在目录中。可以将LDAP理解为一种搜索协议,它类似于SQL,拥有查询语法,也存在被注入攻击的风险。LDAP注入是指客户端发送查询请求时,输入的字符串中含有一些特殊字符,导致修改了LDAP本来的查询结构,从而使得可以访问更多的未授权数据的一种攻击方式。

本篇文章以 JAVA 语言源代码为例,分析CWE ID 90:Improper Neutralization of Special Elementsused in an LDAP Query ('LDAP Injection')样本中LDAP注入漏洞产生的原因以及修复方法。详细请参见:

  • CWE ID 90: Improper Neutralization of Special Elements used in an LDAP Query ('LDAP Injection')

    http://cwe.mitre.org/data/definitions/90.html

  • CWE ID 639:Authorization Bypass ThroughUser-Controlled Key

    http://cwe.mitre.org/data/definitions/639.html

2. LDAP 注入的危害

LDAP 注入是利用用户引入的参数生成恶意 LDAP 查询,通过构造 LDAP 过滤器来绕过访问控制、用户权限提升。在维持正常过滤器的情况下构造出 AND、OR 操作注入来获得敏感信息。

从2018年1月至2019年1月,CVE中共有4条漏洞信息与其相关。部分漏洞如下:

CVE 编号概述
CVE-2018-12689phpLDAPadmin 1.2.2 允许通过 cmd.php?cmd = loginform 请求中精心设计的 serverid 参数或登录面板中精心设计的用户名和密码进行 LDAP 注入。
CVE-2018-5730MIT krb5 1.6 或更高版本允许经过身份验证的 kadmin 将主体添加到 LDAP Kerberos 数据库,以通过提供 "linkdn" 和 "containerdn" 数据库参数来绕过DN容器检查,或者通过提供作为扩展的DN字符串来绕过 DN 容器检查。
CVE-2016-87504.0.8 之前的 Apache Karaf 使用 LDAPLoginModule 通过 LDAP 对用户进行身份验证。但是没有正确编码用户名,因此容易受到 LDAP 注入攻击,导致拒绝服务。
CVE-2011-4069PacketFence 3.0.2 之前的 html / admin / login.php 允许远程攻击者进行 LDAP 注入攻击,从而通过精心设计的用户名绕过身份验证。

3、示例代码

示例源于 Samate Juliet Test Suite for Java v1.3 (https://samate.nist.gov/SARD/testsuite.php),源文件名:CWE90_LDAP_Injection__connect_tcp_01.java。

3.1缺陷代码

上述示例代码 39-61 行,程序进行 TCP 连接并读取Socket的数据并赋值给变量 data,在118 行动态构造一个 LDAP 查询语句,119 行对其加以执行。LDAP 为人员组织机构封装了常见的对象类,比如人员(person)含有姓(sn)、名(cn)、电话(telephoneNumber)、密码 (userPassword) 等属性。该查询为了验证是否存在名为变量 data 的员工,但并未对变量 data 的内容做任何过滤。使用最简单的注入方式,令传入参数的值为"*",则构造的动态查询条件为 "(cn=*)",这样可以查询到所有员工的信息,导致信息泄露。

使用360代码卫士对上述示例代码进行检测,可以检出"LDAP 注入"缺陷,显示等级为高。从跟踪路径中可以分析出数据的污染源以及数据流向,在代码行第120行报出缺陷,如图1所示:


图1:LDAP 注入的检测示例

3.2 修复代码


在上述修复代码中,第119行使用 javax.naming.ldap 包下扩展类 BaseControl 接收需要被处理的参数,第120行 control 对象调用 getEncodedValue() 方法将接收的参数 data 进行编码,编码后的值为字符对应的 ASN.1BER 编码值。编码后的字节数组不存在参与命令解析的特殊字符,可以构造结构、内容正常的 LDAP 查询语句,这样就避免了 LDAP 注入的发生。

使用360代码卫士对修复后的代码进行检测,可以看到已不存在"LDAP注入"缺陷。如图2:


图2:修复后检测结果

4 、如何避免 LDAP 注入

LDAP注入产生的根本原因是攻击者提供了可以改变LDAP查询含义的 LDAP元字符。构造LDAP筛选器时,程序员应清楚哪些字符应作为命令解析,而哪些字符应作为数据解析。为了防止攻击者侵犯程序员的各种预设情况,应使用白名单的方法,确保LDAP查询中由用户控制的数值完全来自于预定的字符集合,应不包含任何LDAP元字符。如果由用户控制的数值范围要求必须包含 LDAP元字符,则应使用相应的编码机制转义这些元字符在LDAP查询中的意义。

  • 如&、!、|、=、<、>、,、+、-、"、'、;这些字符正常情况下不会用到,如果用户的输入中出现了,需要用反斜杠转义处理。

  • 还有些字符如(、)、\、*、/、NUL这些字符不仅需要用反斜杠处理,还要将字符变成相应的ASCII码值。

感谢你的阅读,相信你对"LDAP注入该如何理解"这一问题有一定的了解,快去动手实践吧,如果想了解更多相关知识点,可以关注网站!小编会继续为大家带来更好的文章!

查询 字符 数据 代码 用户 目录 攻击 参数 编码 信息 数据库 示例 元字符 内容 方法 缺陷 检测 验证 变量 情况 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 2019北京网络安全大会图片 数据库乘以 服务器中都有哪些类型的板卡 如何查邮箱的服务器地址 毕业论文使用别人的数据库 上海对日软件开发哪个公司好 福建私有云空间部署服务器 网络安全工程师简笔画简单 四川千成网络技术 从零学习网络技术 搭建nds服务器和管理解析 安卓控制软件开发流程 分布式文件服务器怎么做权限控制 与艾尔登法环服务器断开连接 铜仁网络安全系统怎么做 用dell的服务器管理软件 页面反向显示数据库数据 网络安全教育系统活动 阿里巴巴的网络安全顾问 服务器运营管理员日常工作 静安区个人数据库服务有哪些 navicat与数据库 手机怎么实现远程服务器 数据库切换面板6 福州大学万德数据库 数据库技术试题文库 汕头app软件开发收费 完美世界怎么退出服务器 美电贝尔服务器修改ip怎么操作 服务器运营管理员日常工作
0