آسیب پذیری LFI – قسمت دوم

در قسمت اول به توضیح مقدماتی در مورد آسیب پذیری LFI پرداختیم. همانطور که گفته شد در توابع یاد شده ممکن است ورودی کاربر با مقادیری دیگر ترکیب شده و سپس عمل فراخوانی صورت گیرد. در این قسمت به بررسی نمونه کدهایی جهت شناسایی این آسیب پذیری خواهیم پرداخت.

توجه: نمونه کدهای زیر به عنوان مثال نوشته شده و ممکن است در فضای واقعی متفاوت باشد.

به کد زیر توجه کنید:

<?php

     include(“./pages/” . $_GET[“page”]);

?>

با فرض اینکه فایل آسیب پذیر در مسیر /var/www/html/ باشد، تابع include در مسیر /var/www/html/pages/ به دنبال فایل مورد نظر جهت فراخوانی خواهد گشت. حال اگر نفوذگر etc/passwd/ را فراخوانی کند، این تابع passwd را در مسیر گفته شده فراخوانی خواهد نمود که با توجه به عدم وجود چنین فایلی محتوای آن نمایش داده نخواهد شد.

/var/www/html/

/var/www/html/pages/

/var/www/html/pages//etc/passwd

در چنین شرایطی از روش پیمایش مسیر یا Path Traversal استفاده می کنیم. در این روش با استفاده از /.. (dot-dot-slash) مسیر را به عقب پیمایش کرده و به فایل های مورد نظرمان دسترسی پیدا می کنیم. در مثال بالا جهت دسترسی به فایل passwd به چهار پیمایش به عقب نیاز است.

http://example.com/vuln.php?page=../../../../etc/passwd

به کد زیر توجه کنید:

<?php

     include($_GET[“page”] . “.php”);

?>

در کد بالا اگر ورودی کاربر about باشد، تابع include فایل about.php را فراخوانی خواهد نمود. حال اگر ورودی را etc/passwd/ قرار دهیم، تابع فایل etc/passwd.php/ را فراخوانی می نماید که با توجه به عدم وجود آن چیزی نمایش داده نخواهد شد. در چنین شرایطی با روش Null Byte Injection این محدودیت را دور می زنیم. ورودی به صورت زیر خواهد بود:

http://example.com/vuln.php?page=/etc/passwd%00

زبان PHP هنگام پردازش رشته ها با رسیدن به %00 رشته را تمام شده در نظر گرفته و کاراکترهای بعد از آن را نادیده می گیرد، در نتیجه این امکان را فراهم می سازد که بتوانیم در آسیب پذیری LFI پسوند فایل فراخوانی شونده را حذف نماییم.

/etc/passwd%00.php

در یک حالت تقریبا پیچیده ممکن است کد آسیب پذیر ترکیبی از دو نمونه بالا باشد:

<?php

     include(“./pages/” . $_GET[“page”] . “/index.php”);

?>

که برای دور زدن محدودیت های موجود ورودی به شکل زیر خواهد شد:

http://example.com/vuln.php?page=../../../../etc/passwd%00

در قسمت بعد روش های استفاده از این آسیب پذیری جهت دسترسی به سیستم هدف و اجرای دستورات را آموزش خواهیم داد و روش های تبدیل LFI به RCE را معرفی خواهیم نمود.

نویسنده: سعید بستان دوست

خواننده محترم، کلیه حقوق این نوشته برای نویسنده محفوظ و کپی برداری با ذکر منبع بلامانع است.

موفق باشید.

0

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *