欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Web for pentester_writeup之LDAP attacks篇

程序员文章站 2022-06-06 17:50:22
...

Web for pentester_writeup之LDAP attacks篇

LDAP attacks(LDAP 攻击)

LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。它是基于X.500标准的,但是简单多了并且可以根据需要定制。

LDAP目录以树状的层次结构来存储数据。如果你对自顶向下的DNS树或UNIX文件的目录树比较熟悉,也就很容易掌握LDAP目录树这个概念了。

可以把他和数据库类比,LDAP是一个为查询、浏览、搜索而优化的专业分布式数据库,它成树状结构组织数据,就好像Linux/Unix系统中的文件目录一样。目录数据库和关系数据库不同,它有优异的读性能,但写性能差,并且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据。所以LDAP天生是用来查询的。

LDAP的两次绑定认证方法,分为下面五步:

1. 从客户端得到登陆名和密码。注意这里的登陆名和密码一开始并没有被用到。
2. 先匿名绑定到LDAP服务器,如果LDAP服务器没有启用匿名绑定,一般会提供一个默认的用户,用这个用户进行绑定即可。
3. 之前输入的登陆名在这里就有用了,当上一步绑定成功以后,需要执行一个搜索,而filter就是用登陆名来构造形如:`“(|(uid=$login)(mail=$login))”` ,这里的login就是登陆名。搜索执行完毕后,需要对结果进行判断,如果只返回一个entry,这个就是包含了该用户信息的entry,可以得到该entry的DN,后面使用。如果返回不止一个或者没有返回,说明用户名输入有误,应该退出验证并返回错误信息。
4. 如果能进行到这一步,说明用相应的用户,而上一步执行时得到了用户信息所在的entry的DN,这里就需要用这个DN和第一步中得到的password重新绑定LDAP服务器。
5. 执行完上一步,验证的主要过程就结束了,如果能成功绑定,那么就说明验证成功,如果不行,则应该返回密码错误的信息。

Example 1

Web for pentester_writeup之LDAP attacks篇

根据LDAP的两次绑定认证步骤,我们构造默认参数提交
payload http://192.168.219.136/ldap/example1.php?username=&password=

Web for pentester_writeup之LDAP attacks篇

可以看还是显示认证失败,我们全部去掉,测试提交空认证成功,有些LDAP服务器授权空绑定,如果发送的数据为空,LDAP服务器会绑定空连接,php代码会认为这样的认证时正确的。

Payload
http://192.168.219.136/ldap/example1.php

Web for pentester_writeup之LDAP attacks篇

Example 2

Web for pentester_writeup之LDAP attacks篇

查看授权认证判断的代码

$filter = “(&(cn=”.$_GET['name'].”)(userPassword=”.$pass.”))”;

我们可以构造出一个恒为真的语句
name = hacker)(cn=*))%00 实际上执行 $filter = (&(cn=hacker)(cn=*))
password不管传什么值都会显示被认证,也就是说你现在可以以任何密码登陆

Payload
http://192.168.219.136/ldap/example2.php?name=a*)(cn=*))%00&password=

Web for pentester_writeup之LDAP attacks篇