目录
php连接LDAP函数详解
LDAP查询结果的php文件介绍
LDAP注入拼接语法的简单介绍
首页 运维 安全 如何进行bee-box LDAP注入的靶场练习

如何进行bee-box LDAP注入的靶场练习

May 13, 2023 am 09:49 AM
ldap bee-box

如果说sql注入的本质是拼接字符串的话,那么一切可以注入的本质都是拼接字符串,LDAP注入作为注入的一种也不例外,更有趣一点的说它是在拼接圆括号(sql注入也拼接圆括号,但是更习惯性的是说它拼接字符串)。

在环境配置篇里面已经很详细的说了bee-box中ldap环境的配置,靶场练习篇更多的是php与ldap的连接过程,中间使用的特殊函数介绍以及圆括号拼接的一些技巧。

下面先说一下bwapp中ldap靶场的登录过程:

如何进行bee-box LDAP注入的靶场练习

首先这是一个LDAP的登录界面,URL是http://192.168.3.184/bWAPP/ldap_connect.php,直接看下这个php的文件中都写了什么。

php连接LDAP函数详解

如何进行bee-box LDAP注入的靶场练习

从ldap_connect.php 文件的133的代码开始看,五个变量依次是$message,$login, $password,$server,$dn。

这五个变量中第一个是么有啥用的,第二个登录ldap服务器的用户名,第三个密码,第四个服务器地址,第五个区分名(描述一条完整的LDAP路径)。

第一个if语句是清空登录LDAP的表单,第二个if语句是判断这五个变量是不是空值,这都是小事,重点是后面的这个else,从这个else里面开始看,又有了多个if和else语句,一个个来吧。

如何进行bee-box LDAP注入的靶场练习

首先看第一个if之前的三个函数ldap_connect,ldap_set_option,ldap_bind,依次说明一下这三个函数的作用。

ldap_connect:用来连接ldap数据库,格式如下

$server = “localhost”

$LDAPCONN=LDAP_Connect($server)

如果$LDAPCONN的返回值为数值型当返回结果为0时连接失败,其他值时连接成功。

ldap_set_option($link_identifier ,$option , &$retval):接收三个参数

$link_identifier

ldap_connect()函数返回的LDAP连接标识符(判断LDAP是否连接成功)

$option可接收的值如下:

LDAP_OPT_DEREF(int):搜索的时候如何处理别名,取值范围如下:LDAP_DEREF_NEVER(0,默认值),LDAP_DEREF_SEARCHING(1), LDAP_DEREF_FINDING(2), LDAP_DEREF_ALWAYS(3)

LDAP_OPT_NETWORK_TIMEOUT(int):网络超时秒数,LDAP_NO_LIMIT(0,默认值)表示永不超时。

LDAP_OPT_PROTOCOL_VERSION(int):指定使用的LDAP协议版本,取值范围如下:LDAP_VERSION2(2,默认值), LDAP_VERSION3 (3)。

LDAP_OPT_REFERRALS(bool):LDAP库是否自动追随LDAP服务器返回的引用,取值范围如下:TRUE(1,默认值), FALSE(0)。

&$retval接受选项值的变量

比如bwapp中的代码:

ldap_set_option($ds,LDAP_OPT_PROTOCOL_VERSION, 3);

这句代码的意思就是说,如果ldap连接成功了,那么就指定LDAP使用的协议为版本3。(此处不必深究,都为套用格式)

ldap_bind($link_identifier,$bind_rdn,$bind_password)

$link_identifier:ldap_connect()函数返回的LDAP连接标识符(判断LDAP是否连接成功)

$bind_rdn:使用指定的rdn即登录路径比如cn=admin,dc=bwapp,dc=local

$bind_password:指定登录的密码。

ldap_search($link_identifier, $dn,$filter):LDAP目录搜索函数,成功返回一个结果集的资源描述符,通常被其他函数以$result_identifier引用,失败返回FALSE。

$link_identifier:ldap_connect()函数返回的LDAP连接标识符(判断是否连接成功)

$dn:将要被搜索的目录的DN

$filter:搜索过滤器。比如"(objectClass=*)"表示搜索所有条目(对于read函数则表示所有属性)。

bwapp中的源码:ldap_search($ds, $dn,$filter),其中$ds=ldap_connect(),

$dn=”DC=bwapp,DC=local”,$filter=(cn=*)(即所有范围的cn),这三个参数说明ldap_search函数说明查询的是当前服务器的所有目录(相对于bwapp来说)。

ldap_count_entries($link_identifier,$search):返回查询的结果的数量

$link_identifier:dap_connect()函数返回的LDAP连接标识符(判断是否连接成功)

$search:= ldap_search($link_identifier, $dn, $filter)返回查询的结果集。

此时函数已经分析的差不多了,让我们捋一下这个连接文件的大概思路。

如何进行bee-box LDAP注入的靶场练习

从149行至163行,代码都是判断得到的各种值是不是为空,如果为空,抛出提示信息。

如何进行bee-box LDAP注入的靶场练习

从第165行到198行是判断登录是否成功的,其中165行到184行是判断存不存在ldap服务,187行到198行是判断是否存在区分名(相当于数据库名)。

如何进行bee-box LDAP注入的靶场练习

从200行到236行是判断是否存在相应的dn,即是否存在相应的ldap路径,如果不存在,抛出相应的提示信息,如果存在调用ldapi.php,即ldap查询。在ldapi中得到查询结果后输出为表格。

LDAP查询结果的php文件介绍

输出表格的地方在ldapi.php文件中,接下来看ldapi.php中的代码。

直接从第231行开始看,从第231行到第240行都是上文中说过的,绑定LDAP目录,代码如下,不懂的可以看看上文中的LDAP绑定的部分

如何进行bee-box LDAP注入的靶场练习

如果绑定成功LDAP目录的话,开始进行查询,查询的代码从242行开始

如何进行bee-box LDAP注入的靶场练习

从接收POST参数user的值到,建立别名($search_field_1, $search_field_2,$search_field_3),规定过滤器($filter)(过滤器就是一个查询语句,类似于sql语句),语法规则如下:

运算符   字符   用途  
等号   =   创建一个要求某一字段必须拥有给定值的过滤器。  
任何   *   代表可以等于除 NULL 以外任何值的字段。  
括号   ( )   分离过滤器,以让其他逻辑运算符发挥作用。  
与   &   结合过滤器。相应系列的所有条件都必须为真。  
或   |   结合过滤器。相应系列中必须至少有一个条件为真。  
非   !   排除符合过滤条件的所有对象。  

返回可能会造成加载问题的所有对象:

objectClass=*

返回被指定为“person”的所有用户对象:

(&(objectClass=user)(objectCategory=person))

仅返回邮寄名单:

(objectCategory=group)

仅返回公开的文件夹:

(objectCategory=publicfolder)

返回所有用户对象,但排除主电子邮件地址已“test”开头的用户对象:

(&(&(objectClass=user)(objectCategory=person))(!(mail=test*)))

返回所有用户对象,但排除主电子邮件地址以“test”结尾的用户对象:

(&(&(objectClass=user)(objectCategory=person))(!(mail=*test)))

返回所有用户对象,但排除主电子邮件地址中包含字词“test”的用户对象:

(&(&(objectClass=user)(objectCategory=person))(!(mail=*test*)))

返回所有被指定为“person”,且属于某个群组或分配列表的所有用户对象和别名对象:

(|(&(objectClass=user)(objectCategory=person))(objectCategory=group))

返回所有被指定为“person”的用户对象、所有群组对象,以及所有联系人,但排除任意值被定义为“extensionAttribute9”的对象:

(&(|(|(&(objectClass=user)(objectCategory=person))(objectCategory=group))(objectClass=contact))(!(extensionAttribute9=*)))

返回所有 DN (CN=GRoup,OU=Users,DC=Domain,DC) 识别为群组成员的用户:

(&(objectClass=user)(objectCategory=person)(memberof=CN=Group,CN=Users,DC=Domain,DC=com))

返回所有用户:

Microsoft®Active Directory® LDAP 服务器:(&(objectCategory=person)(objectClass=user))

OpenLDAP™ 服务器:(objectClass=inetOrgPerson)

IBM® Notes®Domino LDAP 服务器:(objectClass=dominoPerson)

在 IBM Notes Domino LDAP 中搜索邮件地址被定义为“person”或“group”的所有对象:

(&(|(objectClass=dominoPerson)(objectClass=dominoGroup)(objectClass=dominoServerMailInDatabase))(mail=*))

ActiveDirectory:返回所有拥有电子邮件地址的有效(未停用)用户:

(&(objectCategory=person)(objectClass=user)(mail=*)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))

返回所有群组 DN 识别为 Group_1 或Group_2 成员的用户。

(&(objectClass=user)(objectCategory=person)(|(memberof=CN=Group_1,cn=Users,DC=Domain,DC=com)(memberof=CN=Group_2,cn=Users,DC=Domain,DC=com)))

返回 extensionAttribute1 值为“Engineering”或“Sales”的所有用户

(&(objectCategory=user)(|(extensionAttribute1=Engineering)(extensionAttribute1=Sales)))

语法规则介绍完毕,接着分析从267开始的代码

如何进行bee-box LDAP注入的靶场练习

$ldap_fields_to_find定义一个数组,便于打印输出表格,和接收ldap查询到的结果,将$ldap_fields_to_find作为ldap_search函数的第四个参数,表示用这个别名保存接收到的结果,即键值对形式,接着将结果返回到$info这个数组中,最后将各个键对应到从287行到291行的各个变量,最后循环输出,打印表格,至此,查询完毕。

LDAP注入拼接语法的简单介绍

既然LDAP过滤器类似于sql查询语句,那么直接看bwapp中的过滤器如何写就行了。直接看ldapi.php文件中的$filter变量:

$filter="(|($search_field_1=$search_for)($search_field_2=$search_for)($search_field_3=$search_for))";

sql语句的精髓在于拼接单引号,ldap语句的精髓在于拼接括号。

现在我想要查询所有的用户,直接在user处输入*就行,那么$filter就会变成$filter="(|($search_field_1=*)($search_field_2=*)($search_field_3=*))";

看一下bwapp中的结果

如何进行bee-box LDAP注入的靶场练习

返回了很多用户但是不够,因为我想看到我的管理员,那么我就要构造这样的LDAP过滤器。

$filter="(|($search_field_1=*)(objectclass=*)($search_field_2=*)($search_field_3=*))";

这样我就能查询所有的用户,包括管理员,objectclass=*的意思就是只要存在就搜索,即全局。

那么在user处输入*)(objectclass=*就行

看下结果,出现了管理员,注入成功。

 如何进行bee-box LDAP注入的靶场练习

以上是如何进行bee-box LDAP注入的靶场练习的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

LDAP注入该如何理解 LDAP注入该如何理解 May 22, 2023 pm 09:47 PM

1、LDAP注入LDAP(LightDirectoryAccessPortocol)是基于X.500标准的轻量级目录访问协议,提供访问目录数据库方法的服务和协议,常用于与目录数据库组成目录服务。其中目录是一个为查询、浏览和搜索而优化的专业分布式数据库,它呈树状结构组织数据,类似于Linux/Unix系统中的文件目录。公用证书、安全密钥、公司的物理设备信息等修改并不频繁的数据适合存储在目录中。可以将LDAP理解为一种搜索协议,它类似于SQL,拥有查询语法,也存在被注入攻击的风险。LDAP注入是指客

如何进行bee-box LDAP注入的靶场练习 如何进行bee-box LDAP注入的靶场练习 May 13, 2023 am 09:49 AM

如果说sql注入的本质是拼接字符串的话,那么一切可以注入的本质都是拼接字符串,LDAP注入作为注入的一种也不例外,更有趣一点的说它是在拼接圆括号(sql注入也拼接圆括号,但是更习惯性的是说它拼接字符串)。在环境配置篇里面已经很详细的说了bee-box中ldap环境的配置,靶场练习篇更多的是php与ldap的连接过程,中间使用的特殊函数介绍以及圆括号拼接的一些技巧。下面先说一下bwapp中ldap靶场的登录过程:首先这是一个LDAP的登录界面,URL是http://192.168.3.184/bW

如何进行bee-box LDAP注入的环境配置 如何进行bee-box LDAP注入的环境配置 May 12, 2023 pm 08:37 PM

一、综述按照我的学习过程来说,我必须知道我进行web攻击的这个模型和漏洞的原理是什么,现在我就碰到个冷门,最初见到LDAP时是某次在某国企的渗透测试中发现一个冷门(经过授权的),激起了我对它的兴趣。LDAP的概念:全称:轻量级目录访问协议(LightweightDirectoryAccessProtocolt),特点:协议什么的就不说了,太深奥,可以把它理解为一种存储数据的数据库,它的特殊在于它是一种树状的数据库,首先这个数据库的名字相当于树根(即DB=dc),然后从树根到某个叶子节点过程所经过

PHP Fatal error: Call to undefined function ldap_bind()的解决方法 PHP Fatal error: Call to undefined function ldap_bind()的解决方法 Jun 22, 2023 pm 11:37 PM

在使用PHP开发Web应用程序时,我们经常需要使用LDAP身份验证来保护应用程序的访问。然而,在有些情况下,当我们尝试使用PHP的LDAP功能来实现身份验证时,可能会遇到以下错误消息:"PHPFatalerror:Calltoundefinedfunctionldap_bind()"。这种错误消息通常会在应用程序调用ldap_bind()函数

如何使用Nginx防范LDAP注入攻击 如何使用Nginx防范LDAP注入攻击 Jun 10, 2023 pm 08:19 PM

随着网络安全漏洞增多,LDAP注入攻击已经成为了很多网站面临的安全隐患。为了保护网站安全,防范LDAP注入攻击,需要使用一些安全措施。其中,Nginx作为一个高性能的Web服务器和反向代理服务器,可以为我们提供很多便利和保护。这篇文章将介绍如何使用Nginx防范LDAP注入攻击。LDAP注入攻击LDAP注入攻击是一种针对LDAP数据库的攻击方式,攻击者通过在

在PHP中使用LDAP进行用户身份验证 在PHP中使用LDAP进行用户身份验证 Jun 20, 2023 pm 10:25 PM

LDAP(LightweightDirectoryAccessProtocol)是一种用于访问分布式目录服务的协议。它可以用于进行用户身份验证、授权、帐户维护和数据存储等任务。在PHP应用程序中,LDAP可以作为一种强大的认证机制,可以为应用程序提供强大的认证和授权功能。本文将介绍在PHP中使用LDAP进行用户身份验证的方法,具体内容包括:安装和配置L

如何使用PHP防范LDAP注入漏洞 如何使用PHP防范LDAP注入漏洞 Jun 24, 2023 am 10:40 AM

随着网络安全问题越来越受到重视,越来越多的程序员开始关注和学习如何防止代码被攻击。其中,常见的攻击方式包括SQL注入、XSS、CSRF等。但是,还有一种常见的攻击方式被低估了:LDAP注入漏洞。本文将会介绍这种攻击方式的原理和如何使用PHP防范LDAP注入漏洞。LDAP介绍LDAP(LightweightDirectoryAccessProtocol)

如何使用PHP和LDAP实现用户组管理和授权 如何使用PHP和LDAP实现用户组管理和授权 Jun 25, 2023 am 08:22 AM

随着企业规模和业务需求的不断扩大,用户组管理和授权成为了一个必不可少的部分。LDAP(轻型目录访问协议)作为一种广泛应用于企业网络中的目录服务协议,为实现用户组管理和授权提供了一种高效方式。本文将介绍如何使用PHP和LDAP实现用户组管理和授权。一、什么是LDAPLDAP是一种轻型目录访问协议,广泛应用于企业网络中的目录服务协议。LDAP是基于客户端/服务器

See all articles