LDAP注入实战:从水果库存到SSH密钥获取

本文详细介绍了如何通过LDAP注入技术,从水果库存系统逐步获取用户信息及SSH私钥的完整过程,包括对象类注入、字段枚举和密钥提取等关键步骤。

vuLnDAP Walkthrough

开始时间:2018年8月3日星期五

这是关于我如何完成vuLnDAP挑战的完整演练。可能还有其他多种方法,因此请不要将此视为唯一或最佳方法。如果您有更好的方法,请告诉我。

初始步骤

首先浏览库存控制系统,选择水果并注意URL为:

1
/fruit_or_veg?objectClass=fruits

这是第一个注入点,您可以指定不同的对象类。您可以尝试猜测或暴力破解有效值,但更简单的方法是使用通配符,对于LDAP来说是*,这给出以下URL,显示系统中所有对象的列表,包括用户和组。

1
/fruit_or_veg?objectClass=*

目标选择

CEO Fred看起来是个好目标,选择他的账户会提供更多信息,但不多。

检查URL,您会看到以下内容:

1
/item?cn=fred&disp=stock,description,cn

参数disp是搜索过滤器列表,这些过滤器告诉LDAP查询为指定对象返回哪些字段,任何不存在的字段都会被静默忽略。目前搜索返回库存水平、对象描述和通用名称(cn),这对于库存控制系统是完美的,但对于我们想要提取用户数据来说用处不大。要查看更多信息,您必须指定正确的过滤器。不幸的是,这里没有通配符功能,因此,如果没有更多挖掘,您将不得不猜测字段名称。

深入挖掘

如果您进一步查看,您会注意到返回链接将您带到以下URL,带有新的对象类posixAccount

1
/fruit_or_veg?objectClass=posixAccount

所以,之前查看水果时对象类是fruit,现在我们查看的对象类是posixAccount,并看到用户列表。谷歌搜索posixAccount和LDAP,您会发现posixAccount是用于描述用户的标准模式,这里有一个来自Linux文档项目的好文章。以下是它提到的四个额外搜索过滤器:

  • uidNumber
  • gidNumber
  • homedirectory
  • userpassword

让我们尝试这些:

1
/item?cn=fred&disp=description,cn,uidNumber,gidNumber,homedirectory,userpassword

获取SSH密钥

这很好,我们得到了Fred的一些详细信息,但不是他的密码,我稍后会回到这一点,但请记住简报还提到了SSH密钥,所以让我们寻找一些。回到谷歌,这次搜索LDAP和SSH密钥。有很多点击,这是一个好文章OpenLDAP中的SSH公钥,但如果您阅读任何文章,您应该发现当您想在LDAP中存储SSH密钥时,您使用sshPublicKey字段。让我们尝试将其添加到Fred的搜索过滤器中。

1
/item?cn=fred&disp=description,cn,uidNumber,gidNumber,homedirectory,userpassword,sshPublicKey

中奖了,我们得到了Fred的公共SSH密钥,但真的,这没什么用,因为它是设计为公开的。检查其他用户呢,这些用户在我们列出所有posixAccount对象时就被列出了。

对于Sue来说没什么有趣的:

但看看我们这里有什么,看起来有人创建我的账户时搞错了,意外地放入了我的私钥:

利用密钥

从这里开始,应该是一个简单的情况,抓取密钥并通过SSH在网络上畅游,享受乐趣。

关于密码的说明

快速退一步,当我们列出搜索过滤器时,我们要求了userpassword但没有得到任何返回,这是因为该字段仅用于身份验证,不幸的是,据我所知,无法检索。

结语

我希望您喜欢这个演练,正如开头所说,这是我第一次涉足LDAP,因此实现和演练可能不完全像现实世界中的那样,但我希望它们足够接近,让您在遇到LDAP时知道要寻找什么,并给您一些进一步实验的想法。任何建设性的反馈都欢迎。

最后一件事,在您使用该密钥向我的盒子扔SSH登录之前,省省力气吧,它是专门为这个项目制作的,如果您仔细看,您很容易就能确认这一点。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计