
در این بخش از دوره آموزشی تست نفوذ سطح متوسط که برگرفته از دوره SEC642 می باشد به ادامه مبحث آشنایی با Local File Inclusion می پردازیم.
PHPINFO File Upload
این حمله توسط Brett Moore در سپتامبر ۲۰۱۱ کشف شد و شرح آن در Whitepaper زیر آورده شده است.
insomniasec.com/downloads/publications/LFI%20With%20PHPInfo%20Assistance.pdf
این حمله از مزایای PHP برای ایجاد یک فایل موقت برای هر اقدام به آپلود، استفاده میکند.
این حمله به یک صفحه شامل آسیب پذیری Local File Inclusion و صفحه دیگری شامل خروجی فراخوانی phpinfo() در PHP نیاز دارد. این نیاز دوم چیزی است که به مهاجم اجازه میدهد تا نام فایل موقت آپلود شده را شناسایی نماید. صفحه phpinfo() تمام متغیرهایی را نشان میدهد که در حال حاضر برای PHP قابلمشاهده هستند، از جمله متغیر مورد استفاده برای اشاره به مکان فایلی که به طور موقت آپلود شده است. این متغیر در یک آرای به نام $_FILES ذخیرهشده است.
با وجود این دو مولفه میتوانید حمله را اجرا کنید. به مراحل زیر دقت نمایید:
۱. مهاجم یک درخواست POST را به منظور آپلود یک فایل به صفحه phpinfo() ایجاد میکند. محتوای فایل آپلود شده شامل کد قابلاجرا PHP است. این امر باعث ایجاد یک پرونده موقت میشود؛ مکان آن در آرایه $_FILES ذخیره شده و سپس آرایه $_FILES در پاسخ به مرورگر، نمایش داده میشود.
۲. مهاجم پاسخ را از صفحه phpinfo() میخواند و اطمینان حاصل میکند که آن را به طور کامل نخواهد خواند و با باز نگه داشتن اتصال، اما تنها تا نقطهای در پاسخ به اینکه محتوای آرایه $_FILESها را میتوان پیدا کرد، میخواند.
۳. خواندن پاسخ پس از آن متوقف میشود و از بسته شدن ارتباط جلوگیری میکند، در نتیجه حذف فایل موقت به تاخیر میافتد. این اتصال تا زمانی که حمله به پایان برسد، به اجبار باز نگهداشته میشود.
۴. در یک درخواست کاملا جداگانه، مهاجم از آسیب پذیری Local File Inclusion برای Include نمودن فایل بارگذاری شده موقت استفاده نموده و این موضوع به اجرای کد منجر میشود.
Steps Taken phpinfolfi.py
این حمله به صورت کامل در ابزاری که توسط Brett Moore توسعهیافته و از طریق لینک زیر در دسترس می باشد:
www.insomniasec.com/downloads/publications/phpinfolfi.py

حالا به نحوه عملکرد بصری آن نگاه کنید. در سمت چپ تصویر، شما مهاجم و سرور وب را میبینید. مهاجم دو درخواست HTTP را ایجادی میکند. اولین درخواست زود انجام میشود و تا پایان حمله باز میماند.
درخواست دوم در نیمه اول اتفاق میافتد و تکمیل آن پایان حمله را نشان میدهد. این امر توسط فلش سمت چپ نشانداده شدهاست که گذر زمان را نشان میدهد.
۱. برای نشان دادن درخواست اول، این جا به شکل یک فرمHTML به نظر میرسد. توجه داشته باشید که این فرم یک فایل را به عنوان یک درخواست POST در صفحه phpinfo آپلود میکند.
2. بعد از اینکه درخواست انجام شد، اسکریپت به آرامی پاسخ را میخواند و اطمینان حاصل میکند که تنها چند بایت را در یک زمان بخواند. این فرآیند خواندن HTML پاسخ را تا زمانی که بخش زیر خوانده شود ادامه میدهد و مسیر و نام فایل آپلود شده را به شما میدهد:

3. توقف تکمیل درخواست قبلی در حین اجرای Local File Inclusion که منجر به اجرای کد میشود:

فایل موقت Include شده و کد آپلود شده evil.txt اجرا میشود. در پایان، هر دو درخواست تکمیل میشوند و فایل موقت حذف میشود.
File Inclusion Tips
حالا به چند نکته برای انجام یک حمله File Inclusion نگاه کنید.
اگر برنامهای که شما در حال آزمایش آن هستید، متن باز است، آن را دانلود کنید و به کد منبع برای کارکردهای آسیبپذیر ذکر شده نگاه کنید. جستجوها در سراسر گیتهاب، Sourceforge و دیگر سایتهای مشابه میتواند برای پیدا کردن نرمافزار کاربردی وب مختلف مفید باشد.
در صورت امکان، سعی کنید برنامه هدف را به صورت لوکالی پیاده سازی نمایید. همواره به یاد داشته باشید که تست کردن به صورت لوکالی و Debug آن، دید بهتری به شما خواهد داد. این کار از ارسال درخواست های مکرر و بی هدف به سمت برنامه هایی اصلی بهتر بوده و از بروز اشتباهات پیشگیری می کند.
هنگام انجام فرآیند شناسایی، از فایلهایی استفاده کنید که تقریبا وجود آنها تضمین شدهاست، مانند /etc/passwd و C:\Windows\win.ini در لینوکس و ویندوز.
فایلهای اصلی برنامه وب مانند index. [php | asp | aspx | jsp | html] فایلهای بسیار خوبی برای آزمایش هستند، اما مطمئن شوید که آدرس آن ها را به درستی وارد نموده اید و در صورت نیاز از “../” استفاده نمایید.
در فرآیند تست، همچنین باید همیشه به Bypass نمودن برخی محدودیت ها نیز فکر شود. استفاده از عباراتی مانند %00 در برخی موارد راهگشا می باشد.
رویکرد Shotgun به بهترین نحو عمل میکند. تست خود را به زبان برنامهنویسی وب استفاده شده در برنامه، محدود کنید اما در غیر این صورت تمام احتمالات و ترکیبات مربوطه را آزمایش کنید.