حمله تزریقLDAP مشاهده در قالب PDF چاپ فرستادن به ایمیل
نوشته شده توسط محمد ظاهری   
دوشنبه, 01 شهریور 1400 ساعت 23:50

ال‌دپ‌ (LDAP) مخفف Lightweight Directory Access Protocol است. این سرویس وظیفه ذخیره‌سازی اطلاعات و مدیریت کاربران، هاست‌ها و دیگر منابع موجود در شبکه را بر عهده دارد. حمله تزریق LDAP یک حمله سمت سرور است که همانند دیگر حملات تزریق (نظیر SQL Injection) به دلیل بررسی نکردن ورودی‌ها در زمان برنامه‌نویسی و دخالت دادن مستقیم ورودی‌ها در پرس‌وجوها به وجود می‌آید. این حمله به حمله‌کننده اجازه می‌دهد داده‌های LDAP را مشاهده، حذف یا ویرایش کند.alt

ال‌دپ‌ می‌تواند در وب‌اپلیکیشن‌ها برای ورود، احراز هویت، بررسی سطوح دسترسی و حتی جست‌وجو اطلاعات دیگر کاربران یک سازمان استفاده شود. برای این کار وب‌اپلیکیشن‌ها با اتصال به ال‌دپ و اجرای پرس‌وجوهای خود از ال‌دپ خروجی می‌گیرند. برای مثال برای احراز هویت یک کاربر می‌توان پرس‌وجویی نظیر عبارت زیر نوشت:

find("cn=John & userPassword=mypass")

در ادامه به بررسی مثال‌هایی از حملات تزریق LDAP خواهیم پرداخت:

مثال ۱. جست‌وجو

فرض کنید یک وب‌اپلیکیشن می‌خواهد با دریافت نام یک کاربر محتویات پروفایل او را نمایش دهد برای این کار پرس‌وجویی مشابه پرس‌وجوی زیر نیاز است:

searchfilter="(cn=" + user + ")"

کاربر با ارسال یک درخواست GET به آدرسی مشابه آدرس زیر متغیر user را برای وب‌اپلیکیشن ارسال می‌کند:

http://www.example.com/ldapsearch?user=John

حال اگر به جای «John»، «*» را به عنوان محتویات متغیر user ارسال کنیم پرس‌وجو به صورت زیر در خواهد آمد:

searchfilter="(cn=*)"

واضح است که پرس‌وجوی بالا تمامی کاربران موجود در سیستم را لیست خواهد کرد. بنابراین اگر وب‌اپلیکیشن مورد نظر ما در این مثال به تزریق ال‌دپ آسیب‌پذیر باشد حمله‌کننده می‌تواند به راحتی همه یا قسمتی از کاربران سیستم را به دست آورد. برای تست جعبه‌سیاه در چنین سناریو‌هایی می‌توان از کاراکتر‌های مخصوص دیگر نظیر «(»، «|» و «&» نیز استفاده کرد.

مثال ۲. ورود به حساب کاربری

در سناریو‌ جدید اگر وب‌اپلیکیشن آسیپ‌پذیر برای احراز هویت کاربران از ال‌دپ استفاده کند، می‌توان بدون دانستن رمز عبور و انجام مراحل طبیعی احراز هویت به سیستم وارد شد. در چنین سیستم‌هایی پرس‌وجوی ال‌دپ مشابه زیر خواهد بود:

searchlogin= "(&(uid="+user+")(userPassword={MD5}"+base64(pack("H*",md5(pass)))+"))";

در این سناریو با ارسال مقادیر زیر به عنوان نام‌کاربری و رمز عبور:

user=*) (uid=*))(| (uid=*

pass=password

پرس‌وجو به صورت زیر در خواهد آمد:

searchlogin="(&(uid=*)(uid=*))(|(uid=*)(userPassword{MD5}X03MO1qnZdYdgyfeuILPmQ==))";

این پرس‌وجو همواره صحیح است بنابراین کاربر می‌تواند با استفاده از ورودی‌های حساب‌شده بدون دانستن رمزعبور به سیستم وارد شود.


آخرین بروز رسانی در جمعه, 05 شهریور 1400 ساعت 18:08
 

اخبار و رویدادها

با ما باشید.

در باره ما

در باره ما

آخرین نظرات

آخرین نظرات

آدرس

آدرس