LDAP 注入与防御

本文介绍了LDAP协议的基础知识,包括目录结构、语法以及环境搭建。重点讨论了LDAP注入的原理,通过bwapp实战展示了注入过程,并分析了ldap_connect.php和ldapi.php中的漏洞。最后,提出了防御LDAP注入的方法,强调过滤特殊字符的重要性。
摘要由CSDN通过智能技术生成

0x00:介绍

LDAP 全英文:Lightweight Directory Access Protocol,翻译过来就是轻量级的目录访问协议。其实就是访问目录,浏览目录。有很多企业存储一些数据信息,例如部门信息,部门里成员的信息,公司的可用设备信息等,这些信息单独放在类似于网站的那种数据库中的话,会显的有点大材小用,而把它们放在目录中,文本中最合适。好比在文档中搜索指定的内容,在目录中搜索指定的文件一样。

LDAP 也有自己指定的语法,也可理解为它是一个存储信息的数据库,为了搜索方便,很多网站提供了其查询的接口,和普通的搜索框无异,对于指定的搜索内容,在没有严格过滤的情况下,便可以造成 LDAP 注入。

0x01:语法

了解 LDAP 语法之前,应该先了解下它的目录树结构,LDAP 目录是以树状的层次结构来存储数据的,如下图所示。

请输入图片描述

dn 表示一条记录所处的位置。dc 表示一条记录所属的区域。ou 代表一条记录所属的组织。cn 表示一条记录的名字。这些理解起来也很容易,LDAP 就好比我们程序用的关系型数据库,关系型数据库我们一般用数据库名称、表名、行来定位一条数据记录,而 LDAP 首先要说明是哪一棵树 (dc),然后是从树根到目标所经过的所有分叉 (ou),最后就是目标的名字 (cn)。

了解 LDAP 的目录结构后,我们来简单看下语法,也就是用指定的语法在 LDAP 目录结构中查找指定的数据。

=:等于的作用,例如查找 Name 等于 weiketang 的对象:

(Name=weiketang)

&:多条件满足查询,例如 Name 等于 weiketang 的,同时性别为男的,这里用 1 表示:

(&(Name=weiketang)(sex=1))

|:或查询,例如 Name 等于 weiketang,或性别为男的:

(!(Name=weiketang)(sex=1))

!:非查询,用来排除对象,例如 Name 不等于 weiketang 的:

(!Name=weiketang)

*:星号代表通配符,可表示任何内容,例如查询 Name 有内容的,相当于不为空,基本上是查询所有:

(Name=*)

以上就是常用的语法,可相互结合使用,例如姓名以 wei 开头的:(Name=wei),再例如姓名以 wei 开头的,且家住北京或者上海的:(&(Name=wei)(|(addr=beijing)(addr=shanghai))).

0x02:环境

LDAP 环境不像 SQL 那么多,这里就简单的搭建一个做示例方便点,下载 OpenLDAP 后进行安装,默认一直下一步即可,安装好 OpenLDAP 后,可以使用 LDAP Admin 连接测试一下,然后新建几条记录,如下图。

请输入图片描述

这里结合上文中说的 LDAP 目录结构可以看一下,dn 树根就是 dc=maxcrc,dc=com,命名时一般都是域名来命名的,ou

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值