搜索
首页运维安全LDAP注入该如何理解

LDAP注入该如何理解

May 22, 2023 pm 09:47 PM
ldap

1、LDAP 注入

LDAP (Light Directory Access Portocol) 是基于X.500标准的轻量级目录访问协议,提供访问目录数据库方法的服务和协议,常用于与目录数据库组成目录服务。其中目录是一个为查询、浏览和搜索而优化的专业分布式数据库,它呈树状结构组织数据,类似于Linux/Unix系统中的文件目录。适合将公用证书、安全密钥以及公司物理设备信息等不经常变更的数据存储于目录中。类似于SQL,LDAP是一种搜索协议,具有查询语法,并存在潜在的注入攻击风险。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-12689 phpLDAPadmin 1.2.2 允许通过 cmd.php?cmd = loginform 请求中精心设计的 serverid 参数或登录面板中精心设计的用户名和密码进行 LDAP 注入。
CVE-2018-5730 MIT krb5 1.6 或更高版本允许经过身份验证的 kadmin 将主体添加到 LDAP Kerberos 数据库,以通过提供 “linkdn” 和 “containerdn” 数据库参数来绕过DN容器检查,或者通过提供作为扩展的DN字符串来绕过 DN 容器检查。
CVE-2016-8750 4.0.8 之前的 Apache Karaf 使用 LDAPLoginModule 通过 LDAP 对用户进行身份验证。但是没有正确编码用户名,因此容易受到 LDAP 注入攻击,导致拒绝服务。
CVE-2011-4069 PacketFence 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缺陷代码

LDAP注入该如何理解LDAP注入该如何理解

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

对上文中的样例代码进行360代码卫士检测后,发现存在“LDAP注入”漏洞,安全等级评定为高。数据污染源以及数据流向可以通过跟踪路径分析得出并在代码的第120行报告缺陷,图1亦如是


LDAP注入该如何理解

图1:LDAP 注入的检测示例

3.2 修复代码


LDAP注入该如何理解

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

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


LDAP注入该如何理解

图2:修复后检测结果

4 、如何避免 LDAP 注入

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

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

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

以上是LDAP注入该如何理解的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:亿速云。如有侵权,请联系admin@php.cn删除

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。