搜索
首页运维安全如何进行bee-box LDAP注入的靶场练习

如果说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脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器