
در این بخش از دوره آموزشی تست نفوذ سطح متوسط که برگرفته از دوره SEC642 می باشد به ادامه مبحث آشنایی با File Inclusion و Code Execution می پردازیم.
کد exec از پروندههای نشست
به این فرآیند که در تصویر مشخص شده است، نگاه کنید.

۱. مهاجم یک متغیر نشست (Session Variable) را پیدا میکند که میتوان برخی از کدهای PHP را در آن به روز رسانی و ذخیره نمود. در این اسلاید، یک فرم به روز رسانی وضعیت به کاربر نرمافزار وب اجازه میدهد تا وضعیت فعلی خود را تنظیم کند. سپس این وضعیت در یک متغیر نشست ذخیره میشود. مهاجم وضعیت را به مقدار زیر تنظیم مینماید:

اگر کد موجود در این متغیر نشست اجرا شود، عبارت “Pwned!” بر روی صفحه نمایش داده خواهد شد.
۲. مهاجم با نگاه کردن به کوکیها، شناسه نشست خود را به دست میآورد. در این برنامه، شناسه نشست در یک کوکی به نام PHPSESSID ذخیره میشود.
۳. پس از اینکه فایل نشست با کد PHP مسموم شد و مهاجم Session ID را شناسایی کرد، وی میتواند فرآیند Inclusion را به شکل زیر انجام دهد:
blog.sec642.org/fileview.php?loc=/var/lib/php5/sess_[session id from cookie]
۴. با نگاه به خروجی، میتوانید ببینید که محتوای فایل نشست در صفحه نشانداده شدهاست و کدی که ما در آن فایل نشست ذخیره کردیم اجرا شده و عبارت “Pwned!” نیز قابل مشاهده میباشد.
Log File Poisoning
با در نظر گرفتن نیازمندیهای خود برای اجرای کد از طریق Local File Inclusion، ما باید فایلی را پیدا کنیم که بتوانیم آن را کنترل کنیم و سرور وب بتواند آن را بخواند. یکی از مجموعه فایلهایی که با این معیار مطابقت دارد فایلهای لاگ میباشند.
اگر مهاجم بتواند از راه دور، یک ورودی در فایل لاگ ایجاد کند، مانند اجرای یک درخواست HTTP بر روی سرور وب یا تلاش برای ورود به سیستم با SSH، او میتواند محتویات فایل لاگ را کنترل کند.در ادامه اگر سرور وب بتواند فایل را بخواند، اجرای کد ممکن میشود.
لاگهای وب سرور مانند /var/log/httpd/access_log یا error_log را میتوان با ارسال درخواست به سرور وب، دستکاری کرد. این درخواستها شامل بخشهای خاصی از درخواست مانند URL و User-Agent میباشند که ثبت خواهند شد.
لاگهای احراز هویت سیستم مانند /var/log/auth.log زمانی نوشته میشوند که یک تلاش برای ورود به سیستم SSH شکستخورده انجام شدهباشد. به طور مشابه، لاگهای FTP نیز ممکن است حاوی تلاشهای ناموفق ورود به سیستم باشند.
در سیستمهای مدرن، این فایلهای لاگ قابل خواندن نیستند، اما استثناهایی در این مورد وجود دارد که ممکن است قابل بهرهبرداری باشد. به طور خاص، در نصب Gentoo آپاچی امکان خواندن لاگهای مربوط به access_log وجود دارد.
یک دسته خاص از فایلهای لاگ که همیشه در دسترس سرور وب هستند، فایلهای لاگ برنامه کاربردی یا چارچوب برنامههای کاربردی وب هستند.
امکان ثبت لاگ در چارچوبهای کاربردی وب به ویژه CakePHP،Ruby on Rails و Django، به صورت Built in وجود دارد. بسیاری از این چارچوبها همچنین مکانهای مشخصی دارند که فایلهای لاگ در آنها ذخیره میشوند، بنابراین پیدا کردن آنها دشوار نخواهد بود.
Code Execution: Now What
در هر یک از حملاتی که تا کنون مشاهده کردهایم، کدی که ما اجرا کردهایم نسبتا بیضرر بوده و تنها به عنوان Proof of Concept در نظر گرفته شدهاست. حالا که ثابت کردیم میتوانیم آن را به دست بیاوریم، با آن چه کار کنیم؟
در برخی موارد، ممکن است اجرای یک خط دستور واحد، کافی باشد. به عنوان مثال، ایجاد یک backdoor یا تغییر یک تنظیمات امنیتی. در این موارد، ما میتوانیم از کدهای زیر استفاده کنیم:
کد ASP مذکور هیچ خروجی قابلمشاهده را بر نمیگرداند، در حالی که کد PHP خروجی دستور را بر میگرداند.

به همین ترتیب، اگر شما نیاز به اجرای چندین فرمان دارید، میتوانید کدی را اجرا کنید تا یک backdoor shell را در ریشه وب سرور ایجاد کند. سپس، اگر نیاز به اجرای دستورها بیشتر دارید، از فایل در پشتی به جای آسیبپذیری Local File Inclusion استفاده کنید. در زیر برخی از کدهایی که میتوانید برای انجام این کار از آنها استفاده کنید آورده شدهاست:

همچین شما میتوانید مجموعه ای از backdoor shell ها را از طریق لینک زیر دانلود نموده و از آنها استفاده نمایید: