
در این بخش از دوره آموزشی تست نفوذ سطح متوسط که برگرفته از دوره SEC642 می باشد به آشنایی با File Inclusion می پردازیم.
بهرهبرداری از File Inclusion
ویژگی File Inclusionیک توسعه دهنده را قادر میسازد تا محتویات یک فایل را در چندین فایل اصلی با یک خط کد قرار دهد. به عنوان مثال، اگر یک توسعه دهنده وب در حال ایجاد یک وبلاگ باشد، به احتمال زیاد نیازد دارد تا محتوای هدر و فوتر یکسان در هر پست وبلاگ ظاهر شود. این امکان به وسیله قابلیتFile Inclusion وجود داشته و هنگامی که صفحه در نهایت به یک مرورگر ارسال شود، سرور وب به طور خودکار محتویات هدر و فوتر را در صفحه وبلاگ قرار خواهد داد.
نفوذگران با توجه به ماهیتFile Inclusion در صورت عدم تنظیم کنترلهای مناسب، میتوانند به فایلهای موجود در وب سرور دسترسی داشته باشند. ویژگی File Inclusion به دو صورت استاتیک و داینامیک پیاده سازی میشود.
برای یک مهاجم جهت بهرهبرداری از آسیبپذیری File Inclusion، نوع استاتیک کافی نبوده و وجود نوع داینامیک به آنها اجازه میدهد تا کنترل فرآیند Inclusion را به دست آورده و از آن برای دستیابی ناخواسته به فایلهای موجود بر روی سرور استفاده کنند. قابلیت بهرهبرداری از این فرآیند به طور معمول به بیدقتی توسعه دهنده و در نتیجه توانایی یک مهاجم برای کنترل نام فایل موجود در سرور بستگی دارد.
وبلاگی را در نظر بگیرید که یک پست را به عنوان فایل، Include میکند و این Include به صورت پویا و به منظور مشاهده آنها میباشد.
کد زیر را در نظر بگیرید:

درخواستهای قانونی به صورت زیر میباشد:
/blog.php?page=11_11_2011
نفوذگر میتواند این درخواست را به درخواستی مشابه زیر تغییر دهد:

بدین صورت امکان مشاهده فایل /etc/passwd برای نفوذگر وجود دارد. همچنین امکان مشاهده فایلهای دیگر موجود در سرور به شرط دانستن نام آنها نیز برای نفوذگر وجود خواهد داشت.
آسیبپذیری File Inclusion در زبانهای برنامه نویسی مختلف
برخی از اشکال File Inclusion تقریبا در هر زبان برنامهنویسی کاربردی وب مدرن وجود دارد. این زبانها شاملPHP، ASP، ASP.NET،JSP و دیگر زبانهای برنامه نویسی نیز میباشد. با این حال، حتی در یک File Inclusionابتدایی، تفاوتهایی در شیوه پیادهسازی آنها در هر زبان برنامه نویسی وجود دارد.
یکی از تفاوتهایی که قبلا ذکر شد این است که File Inclusion میتواند ایستا یا پویا باشد. برخی زبانها عملیات File Inclusionرا به صورت ایستا انجام داده و یا تنها به Include یک فایل در هر عبارت محدود میباشند، که این امر کنترلinclusion توسط کاربر را غیرممکن میسازد. از آنجا که ما تنها به File Inclusion پویا علاقه داریم، به پیادهسازیهای دیگر اشاره نمیکنیم.
توابعی مانند include() و require() در زبان PHP به مراتب دارای فرایند آسانتری بوده و امکان بهرهبرداری بیشتری دارند. هر دوی این توابع نه تنها به طور معمول مورد استفاده قرار میگیرند، بلکه پایه و اساس تقریبا هر برنامه کاربردی وب نوشته شده در PHP هستند.
آشنایی با Methodology و Context در تست نفوذ وب
زبانPHP از این موارد برای تقسیم کد و محتوای خود در میان چندین فایل استفاده میکند که اغلب به صورت استاتیک بوده، اما گاهی به صورت پویا نیز مورد استفاده قرار میگیرند. این امر PHP را به یکی از قابل بهرهبرداری ترین زبانها برای آسیب پذیری File Inclusion تبدیل میکند.
در ASP و ASP.NET تابع Response.WriteFile() را داریم که هیچ کد یافتشده در فایل موجود را اجرا نمیکند اما اجازه میدهد تا فایلها از هر جایی بر روی سیستم فایل Include شوند. در مقابل، تابعServer.Exec() ، همانطور که از نام آن پیداست، اجرا شده و سپس یک فایل را Include می نماید، اما تنها فایلهای موجود در Web Root را شامل میشود.
همانند تابع اجراییASP.NET، در زبان JSP، تگ Include تنها اجرای کد را از Web Root فراهم میسازد.
علاوه بر این مثالهای رایج، هر زبان، قابلیت پیادهسازی inclusion را دارد که میتواند ترکیبی از حالتهای استاتیک، دینامیک، اجرا، غیر اجرایی،Web Root و خارج از Web Root را شامل شود. این پیادهسازیهای جایگزین، کمتر رایج هستند، اما مهم است که وجود آنها را نیز بررسی نماییم.
متدولوژی Fie Inclusion
پس از کشف و تایید آسیب پذیری File Inclusion ما به سمت بهرهبرداری این آسیبپذیری حرکت میکنیم.
به منظور به حداکثر رساندن بهره برداری از این آسیبپذیری روشهای زیر را در نظر بگیرید:
محدودیتها را تعیین کنید: قبل از بهرهبرداری از یک آسیبپذیری، ابتدا باید محدودیتهای عملیات File Inclusion را تعیین کنیم. این امر به ما این امکان را میدهد تا تعداد آزمونهایی که باید انجام دهیم را کاهش داده و بر روی آنها تمرکز کنیم تا زمان هدر رفته را به حداقل برسانیم. محدودیتهای موجود در File Inclusion، تمام انواع مسیرهای فایل که میتوانیم include نماییم را محدود میکند. تعیین این محدودیتها به سوالاتی در مورد آنچه که برای عملیات File Inclusion در دسترس میباشد، پاسخ میدهد.
• آیا یک پیشوند یا پسوند به بخشی از مسیر کنترلشده توسط کاربر اضافه شدهاست؟
• آیا فایلهایی خارج از Web Root در دسترس هستند؟
• آیا مسیرهای مطلق یا مبتنی بر URL مجاز هستند؟
Pillage local files: زمانی که میدانیم کدام مسیر فایل مجاز است، گام بعدی بازیابی محتویات فایلهای محلی حساس است. این بخش شامل فایلهای خاص سیستمعامل مانند /etc/passwd و همچنین فایلهای مربوط به سورس برنامه است. برای فایلهای مربوط به سورس برنامه، به دلیل ویژگی اجرای کد، گاهی اوقات لازم است که اجرای کد را متوقف کنیم تا بتوانیم اطلاعات با ارزشی را در کد مشاهده نماییم. (توضیح این مورد در بخش های بعدی اشاره خواهد شد)
Code execution: در نهایت، ما امکان اجرای کد را آزمایش میکنیم. اگر ویژگیهای عملیات File Inclusion آسیبپذیر، شامل اجرای کد باشد، ما امکان تزریق کد به فایل موجود و در نتیجه دستیابی به چیزی که معادل دسترسی Shell به سرور هدف است را آزمایش میکنیم. این کار را میتوان با وارد کردن پرونده از راه دور،Session یا Log File Poisoning، همچنین Include نمودن فایل از طریقSMB، آپلود کردن یک فایل مسموم و همچنین دیگر تکنیکهای پیشرفته انجام داد.