注入———LDAP注入讲解

LDAP注入

LDAP(Lightweight Directory Access Protocol):轻量级目录访问协议,是一种在线目录访问协议。LDAP主要用于目录中资源的搜索和查询,是X.500的一种简便的实现,是运行于TCP/IP之上的协议,端口号为:389, 加密636(SSL)

使用场景
实战中能遇到的主要是 大厂 和 内网
LDAP服务是许多公司和机构日常操作的关键组成部分,目录服务如微软的Microsoft Active Directory,Novell E-Directory和RedHat Directory服务都基于LDAP协议。不过也有其他的应用和服务会利用LDAP服务,简单是说Windows下在Server 服务器上常用AD,在Linux系统常用的服务是Openldap。

在这里插入图片描述

属性解释
dn(Distinguished Name)一条记录的位置 ,如上图,我们要想描述baby这个节点,描述如下
cn=baby,ou=marketing,ou=pepple,dc=mydomain,dc=org
dc (domain compoent)一条记录所属区域 域名部分
ou (Organization Unit)一条记录所属组织
cn/uid(Common Name)一条记录的名字/ID
Entry条目记录数

ldap语法

search语法:attribute operator value
search filter options:( "&" or "|" (filter1) (filter2) (filter3) ...) ("!" (filter))

详细解释

=(等于)

查找"name"属性值为"zhangshan"的所有对象

(name=zhangsan)

&(逻辑与)

如果多个条件需要同时满足;如:查询所有叫"zhangsan"且为女性的人。

(&(name=zhangsan)(gender=girl))

!(逻辑非)

此操作用来排除具有特定属性的对象;如查找name不为zhangsan的其他人

(!name=zhangsan)

通配符*

可以用来表示等于任何内容,如查找所有name以zhang开头的人

(name=zhang*)

LDAP注入原因

LDAP注入和SQL注入比较类似,不过没有SQL注入中那么多华丽花哨的东西,要简单一些。二者都是没有对用户输入的合法性进行验证,而是直接将数据发送给服务器进行查询,因此攻击者可以注入任意恶意代码。

LDAP过滤器

Fileter = (filtercomp)
Filtercomp = and / or / not / item
And = & filterlist
Or = | filterlist
Not = ! filter
Filterlist = 1*filter
Item = simple / present / substring
Simple = “=” / “~=” / ”>=” / “<=”
Present = attr =*
Substring = attr “=” [initial]*[final]
Initial = assertion value
Final = assertion value
LDAP枚举注入

AND LDAP注入

当后端的代码如下:

(&(parameter1=value1)(parameter2=value2))
这里value1和value2都会被查询,其中value1和value2是用户可控的,如果过滤不完善,就会存在LDAP注入的可能。

比如一个用户登录的场景,用户输入username和password,应用会构造一个过滤器并发给LDAP服务器进行查询。

(&(username=uname)(password=pwd))
当用户输入一个有效的用户名,例如admin,那么就有可能在username字段后面进行注入,从而在不知道密码的情况下进行登陆。

payload: admin)(&))
result: (&(username=admin)(&))(password=123))
LDAP服务器只会处理第一个过滤器,而第一个过滤器永真,因此绕过了登录框

or ldap注入

当后端代码如下:

(|(parameter1=value1)(parameter2=value2))
一个典型的OR LDAP注入的场景就是:

假设一个资源管理器允许用户了解系统中可用的资源(打印机、扫描器、存储系统等)。用于展示可用资源的查询为:

(|(type=Rsc1)(type=Rsc2))
Rsc1和Rsc2表示系统中不同种类的资源,例如,Rsc1=printer,Rsc2=scanner用于列出系统中所以可用的打印机和扫描器。

payload: Rsc1=printer)(uid=*)
result: (|(type=printer)(uid=*))(type=scanner))
LDAP服务器会响应所有的打印机和用户对象

一、无密码登录
尝试构造(先正常闭合,然后再截断后面)

(&(name=hacker))%00)(passwd=hacker))
服务器在对这个条件判定时,只会执行,永为真,即无密码直接登陆,密码随便输,效果如下:(&(name=hacker))

二、用户遍历
通过上方的结果,我们已经能无密码登陆用户了,但是如果该用户权限不足需要新的用户怎么办呢?

构造语句如下(其中, 为通配符)*

(&(name=h*))%00)(passwd=xxx))

如上图,构造的payload可直接登录账号hacker

尝试对首字母进行遍历,可成功获取 账户admin

LDAP注入防御
LDAP注入的防御和SQL注入的防御类似,主要是对用户的输入进行合法性验证,只要守好数据的入口和出口,就能有效的防御攻击。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值