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

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

在环境配置篇里面已经很详细的说了bee-boxldap环境的配置,靶场练习篇更多的是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注入的靶场练习的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

文章标题:如何进行bee-box LDAP注入的靶场练习,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/26613

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
亿速云的头像亿速云认证作者
上一篇 2022年9月18日 下午10:35
下一篇 2022年9月18日 下午10:37

相关推荐

  • CDR最新版本里面图片排版如何调间距

    CDR最新版本里面图片排版调间距的方法: 名列前茅步,选中你需要排版的图片。 第二步,点击上方工具栏的“对象”按钮。 第三步,在下拉菜单中点击“对齐与分布” 第四步,点击右边的“对齐与分布”选项打开。 第五步,点击图示位置的“对象间距”在下方就可以手动调间距了。 关于“CDR最新版本里面图片排版如何…

    2022年9月24日
    84100
  • SQL窗口函数之排名窗口函数怎么使用

    取值窗口函数可以用于返回窗口内指定位置的数据行。常见的取值窗口函数如下: LAG函数可以返回窗口内当前行之前的第N行数据。LEAD函数可以返回窗口内当前行之后的第N行数据。FIRST_VALUE函数可以返回窗口内名列前茅行数据。LAST_VALUE函数可以返回窗口内最后一行数据。NTH_VALUE函…

    2022年9月10日
    70100
  • 电脑msr分区可不可以删除

    msr分区可以删除;msr分区是“Microsoft Reserved Partition”的缩写,是作为保留分区来使用,系统组件可以将MSR分区的部分分配到新的分区以供使用,msr分区不是必须的,可以被删除。 本教程操作环境:windows10系统、DELL G3电脑。 msr分区可以删除 MSR…

    2022年9月16日
    3.9K00
  • 电脑0xc0000011如何解决

    0xc0000011修复方法: 方法一: 1、首先我们需要查看是否是软件问题,开机时按住“F8”直到进入系统修复界面。 2、接着在其中选择“最后一次正确的配置”回车进入。 3、如果我们无法进入系统,那么说明就不是安装的软件或驱动等问题。 方法二: 1、这时候就需要采用系统盘进行修复了。 2、如果我们…

    2022年9月18日
    66100
  • css中的选择器包不包括超文本标记选择器

    不包括。css选择器有:1、标签选择器,是通过HTML页面的元素名定位具体HTML元素;2、类选择器,是通过HTML元素的class属性的值定位具体HTML元素;3、ID选择器,是通过HTML元素的id属性的值定位具体HTML元素;4、通配符选择器“*”,可以指代所有类型的标签元素,包括自定义元素;…

    2022年9月1日
    74200
  • 电脑下载速度慢如何解决

    电脑下载速度慢解决方法: 方法一、 1、按下“win+R”打开运行输入 gpedit.msc。 2、进入本地组策略编辑器。 3、依次打开“管理模板—>网络—>QoS数据包计划程序”。 4、双击右侧的“限制可保留宽带”。 5、选择“已禁用”点击“确定”即可。 方法二、 1、此方法需要借助第…

    2022年9月21日
    4.0K00
  • Linux系统中怎么加密文件

    在Linux系统安装时选择使用EFS 首先将介绍一个非常简单的方法来使用EFS文件系统。以Fedora的安装步骤为例子,选择相关选项进行安装就可以方便地进行使用了。 用户可以在空闲空间新建分区,也可以选择某个分区进行编辑,还可以删除某些分区。在图 1中,需要选中[加密文件系统]选项,并且,根据系统要…

    2022年9月1日
    52800
  • html和xhtml有哪些区别

    HTML超文本标记语言,是一种基于标记的网页设计语言,专门用来设计和编辑网页。XHTML是为了适应XML而重新改造的HTML,也是一种标记语言,它可以看作是从HTML到XML的过渡;XHTML要求在网页中出现的任何元素都应该被标记出来。 什么是HTML HTML 英文全称是 Hyper Text M…

    2022年9月16日
    87500
  • 如何分析APK安全及自动化审计

    一、 闲聊 说到移动安全,可能大家比较陌生,因为这方面的研究是在最近几年才逐渐火起来的。那么什么是移动安全呢?首先,我们知道,移动安全无非就是ios平台和安卓平台上的一些安全性的问题,包括平台系统系统本身的一些问题和应用层面上的问题。当然在客户端和服务端在进行交互的时候还需要涉及一些通信协议,主要是…

    2022年9月10日
    79100
  • MySQL如何优化性能

    – MySQL服务器配置:\ 好吧,首先你应该知道配置文件的位置,具体取决于你的操作系统。在 Linux 系统中,它位于“/etc/mysql/my.cnf”中。\现在是时候选择你的引擎 InnoDB 和 MyISAM 了。为了让选择更容易,你应该知道 InnoDB 成为 MySQL 5…

    2022年9月22日
    47700
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部