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-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注入该如何理解”这一问题有一定的了解,快去动手实践吧,如果想了解更多相关知识点,可以关注亿速云网站!小编会继续为大家带来更好的文章!

文章标题:LDAP注入该如何理解,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/27470

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
亿速云的头像亿速云认证作者
上一篇 2022年9月20日 下午11:53
下一篇 2022年9月20日 下午11:53

相关推荐

  • 对混淆变形的Webshell分析是怎样的

    WebShell是什么? 在最初的时候,Webshell经常被用来作为Web服务器管理员对服务器进行远程管理的一类脚本的简称。后来,随着一些Webshell管理工具的诞生,使得获取Web权限的过程被很大程度地简易化,于是逐渐被称为Web入侵的工具脚本。 Webshell不同于漏洞,而是利用应用漏洞或…

    2022年9月22日
    55100
  • 如何使用CSS显示链接之后的URL

    使用CSS显示链接之后的URL a:after{content:” (” attr(href) “) “;} 什么是css css是一种用来表现HTML或XML等文件样式的计算机语言,主要是用来设计网页的样式,使网页更加美化。它也是一种定义样式结构如字体、颜色、位置等的语言,并且css样式可以直接存…

    2022年8月31日
    49100
  • ppt首行缩进怎么设置

    ppt首行缩进设置方法: 1、首先打开幻灯片文件,选择上面的“插入”。 2、之后去找到中间的“文本框设置”。 3、然后建立一些内容。 4、打开“段落样式”点击打开“属性设置”。 5、在段落下面的“缩进”中点击“特殊格式”选择“首行缩进”即可。 以上就是关于“ppt首行缩进怎么设置”这篇文章的内容,相…

    2022年8月31日
    1.1K00
  • usmt.ppkg文件有什么作用

    “usmt.ppkg”是windows自带的系统还原功能的系统备份文件;Windows系统还原是在不需要重新安装操作系统,也不会破坏数据文件的前提下使系统回到原有的工作状态,PBR恢复功能的备份文件就是“usmt.ppkg”。 本教程操作环境:windows10系统、DELL G3电脑。 usmt.…

    2022年9月10日
    5.1K00
  • 角色服务器什么意思

    角色服务器通常指的是在多人在线游戏、虚拟世界或其他网络环境中,专门为用户创建、存储和管理游戏角色信息的服务器。这种服务器对于维护游戏的持续性、玩家互动和个性化体验至关重要。它们通常负责保存角色的等级、物品、技能和其他个性化数据,确保玩家可以在任何时间访问自己的角色信息。此外,角色服务器还可以处理与角…

    2024年4月23日
    3500
  • 魔兽服务器什么服人多点

    摘要 在众多的魔兽世界服务器中,人气最旺的服通常包括1、怀旧服;2、官方推荐服。其中,怀旧服因其复刻了游戏初期的经典玩法和设定,吸引了大量情怀玩家和老玩家回归,这一点使得怀旧服在人气上有了显著的优势。怀旧服不仅重现了许多经典的任务和副本,还恢复了游戏早期的社交氛围,让很多玩家能在游戏里找回当年的感觉…

    2024年4月25日
    1700
  • mysql存储过程中的循环语句怎么写

    mysql存储过程中的循环语句有三种:1、WHILE循环语句,语法“WHILE 条件表达式 DO 循环语句 END WHILE”;2、REPEAT循环语句,语法“REPEAT 循环语句 UNTIL 条件表达式 END REPEAT”;3、LOOP循环语句,语法“[begin_label:] LOOP…

    2022年9月24日
    79600
  • Mysql中的Enum数据类型实例分析

    Mysql中的enum类型就是我们常说的枚举类型,它的取值范围需要在创建表时通过枚举方式(一个个的列出来)显式指定。对1至255个成员的枚举需要1个字节存储;对于255至65535个成员,需要2个字节存储。非常多允许有65535个成员。 enum底层存的是十进制整数,严格按顺序1,2,3,4,5…排…

    2022年9月13日
    89700
  • 服务器是什么系统类型的

    摘要 服务器系统类型涉及多种操作系统,主要包括1、Windows Server、2、Linux、和3、Unix。这些系统各自具有独特的功能和优势,适合不同的应用场景和工作负载。突出的是2、Linux,其特点为开源、高度可定制和安全性高。Linux服务器因其稳定性、性能以及安全性而被广泛应用于企业级应…

    2024年4月25日
    1300
  • 如何进行APT中的迂回渗透

    引言 随着信息安全行业发展,很多企业,政府以及互联网公司对网络安全越来越重视。习大大指出,没有网络安全就没有国家安全,没有信息化就没有现代化。 众所周知,现在的安全产品和设备以及对网络安全的重视,让我们用常规手段对目标渗透测试的成功率大大降低。当然,对于一些手握0day的团队或者个人来说,成功率还是…

    2022年9月21日
    59500
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部