Local File Inclusion (LFI) به مهاجم این اجازه را می دهد که از طریق مرورگر ، فایل های خود را در سرور قرار بدهد .این آسیب پذیری وقتی به وجود می آید که وب سایت ورودی ها را به درستی چک نمی کند و اجازه می دهد که مهاجم ورودی را دستکاری و کاراکتر های پیمایش مسیر را وارد کند و فایل هایی را در سرور قرار دهد .
مثال یک کد آسیب پذیر در این مثال به دلیل محدود نشدن کاربر در ورودی صفحه ، می تواند فایل های دیگر موجود در آنجا را فراخوانی کند و در صورتی که محدودیت های دسترسی در سیستم نباشد ، میتوان به عنوان مثال فایل etc//passwd را فراخوانی کرد .
http://example.com/vuln.php?page=/etc/passwd
آسیب پذیری LFI به راحتی قابل تشخیص و بهره برداری می باشد . هر اسکریپتی که شامل یک فایل از وب سرور باشد ، مثال خوبی برای تست LFI می باشد .
/script.php?page=index.html
یک مهاجم ممکن است با دستکاری آدرس به این صورت تلاش کند که از آسیب پذیری استفاده کند .
/script.php?page=../../../../../../../../etc/passwd
در زیر نیز یک مثال از بهره برداری موفق آمیز از آسیب پذیری LFI در یک وب سرور را می بینیم ( در این مثال از فریم ورک آسیب پذیر dvwa استفاده شده است )
زبان php یک سری wrapper هایی دارد که به ما اجازه می دهد یک سری فیلتر ها را دور بزنیم .
Php Expect به ما اجازه می دهد که دستورات سیستمی وارد کنیم . مثال :
php?page=expect://ls
PHP file:// Wrapper
دستورات به صورت POST به سمت سرور ارسال می شوند :
/fi/?page=php://input&cmd=ls
PHP php://filter
به مهاجم این امکان را می دهد که به صورت Base 64 کد ها را ارسال کند ، بنابراین برای دیدن نتیجه باید Decode شوند .
مثال :
vuln.php?page=php://filter/convert.base64-encode/resource=/etc/passwd <text> تصویری از نتیجه به صورت کد شده در بالای صفحه ||http://tosinso.com/files/get/6a10f4c2ec444c3295660e453e4fae1a|| تصویری از Decode شدن کد تصویر قبل ||http://tosinso.com/files/get/dcc9a8be01404506b93c1be3b8f161bf|| همچنین php://filter می تواند بدون کدینگ Base64 نیز استفاده شود :
?page=php://filterresource=etc/passwd
امیدوارم تا اینجا مفهوم LFI و تکنیک Wrapper جا افتاده باشد ، در قسمت های بعدی با انواع دیگری از LFI ها ، از جمله : ZIP wrapper ها ( ارسال Shell با استفاده از فایل zip ) تکنیک Null Byte Truncation Bypass و ... آشنا خواهیم شد که جذاب هستند :)
ZIP Wrapper اجازه می دهد که فایل .zip را که سمت سرور است اجرا کنید و مهاجم با استفاده از این قابلیت و فایل آپلود آسیب پذیر ، می تواند فایل .zip خود را که شامل فایل های مخرب است ، از فیلتر سایت رد کند و LFI را اجرا کند .
مثال برای این نوع اتک :
1 – ابتدا یک Reverse shell ایجاد میکنیم .
2 – آن را با .zip فشرده میکنیم .
3 – این فایل زیپ را در یک سرور آپلود می کنیم .
4 – با استفاده از Zip Wrapper ، به صورت زیر فایل خود را در سرور مورد نظر آپلود می کنیم :
php?page=zip://path/to/file.zip%23shell
5 – این دستور ، فایل zip ما را در سرور extract می کند ، اگر سرور مورد نظر پسوند .php را به فایل اضافه نمی کند ، خودتان پسوند .php را به فایل shell اضافه کنید .
اگر سرور مورد نظر اجازه آپلود فایل zip را ندهد ، باید با روش های Bypass کردن آپلود جلو برویم .
Null Byte Technique
به کد زیر توجه کنید:
<?php include($_GET["page"] . ".php"); ?>
در کد بالا اگر ورودی کاربر home باشد، تابع include فایل home.php را فراخوانی می کند. یعنی هر چیزی را وارد کنیم ، پسوند .php به آن اضافه می شود ، بدین ترتیب اگر ما دستوری مانند etcpasswd را قرار دهیم، تابع فایل etcpasswd.php را فراخوانی خواهد کرد که چون چنین چیزی وجود ندارد ، ما چیزی را نخواهیم دید . در این حالت از روش Null Byte استفاده خواهیم کرد.
vuln.php?page=/etc/passwd%00 vuln.php?page=/etc/passwd%2500
در شرایطی که کد به شکل زیر است از ترکیب Directory traversal و Null byte استفاده می کنیم :
<?php include("./pages/" . $_GET["page"] . "/index.php"); ?>
روش دور زدن :
/vuln.php?page=../../../../etc/passwd%00
Truncation تکنیک Bypass دیگری است که در آن مهاجم با اضافه کردن پارامتر های بلند Bypass را انجام میدهد ، بدین صورت که وب اپلیکیشن پارامتر های وارد شده را کوتاه می کند که ممکن است بتوان فیلتر پارامتر های ورودی را دور زد .
vuln.php?page=/etc/passwd........................................................................................ vuln.php?page=../../../../../../../.. /../../../../../../../../../../../../../../../../etc/passwd vuln.php?page=/etc/passwd/../../../../../../../../../../../../../../../../../..
Log File Contamination یک فرآیندی است که در آن سورس کد های خود را در فایل لاگ سرور inject می کنیم . این کار را با روش های دیگر انجام می دهیم که که نتیجه در لاگ فایل ذخیره می شود ، مثلا php Reverse shell کد خود را در url ، inject می کنیم که باعث می شود syslog یک لاگ در قسمت access log آپاچی ایجاد کند با عنوان 404 Not Found و اتکر با استفاده از روش های گفته شده برای LFI به access log دسترسی پیدا می کند و کد php reverse shell خود را اجرا می کند .
بعد از inject کردن کد خود ، باید بتوان به فولدر لاگ ها دسترسی پیدا کرد که به طور معمول ، ابتدا وب سرور را تشخیص داده سپس مسیر پیش فرض برای لاگ را چک می کنیم . اگر در مسیر پیش فرض نبود ، می توانید از FuzzDB’s Burp LFI payload lists استفاده کنید . اگر این لیست ها را با استفاده از Burp Intuder چک شود ، سریع تر نیز میتوان به نتیجه رسید . همچنین در وب سرور های apache و Nginx می توان با استفاده از netcat عمل inject را انجام داد .
اگر سیستم هدف ، ایمیل را مستقیما یا به وسیله یک سیستم دیگر در یوزر www-data ( یا یوزر آپاچی ) ذخیره کند ، میتوان یک Reverse Shell را به هدف ایمیل کرد . اگر رکورد MX موجود نباشد اما SMTP در دسترس باشد ، می توان به میل سرور هدف متصل شد و ایمیلی برای یوزر www-data apache فرستاد .ایمیل به یوزر آپاچی مثل www-data فرستاده می شود تا مطمئن شویم که فایل سیستم اجازه خواندن فایل varspoolmail/www-data که شامل PHP Revesre shell کد می باشد را دارد . در تصویر زیر مجاهم از اسکریپت smtp-user-enum استفاده کرده تا مطمئن شود یوزر www-data در سیستم هدف موجود است .
در تصویر زیر می بینیم که مهاجم چگونه با استفاده از تلنت به یوزر www-data ایمیل می فرستد .
در این تصویر می بینیم که چگونه به فایل مورد نظر که حاوی Reverse Shell است متصل می شده است :
در این تصویر نیز نتیجه Reverse Shell ایمیل شده را با listener netcat می بینیم .
امیدوارم که از این مقاله استفاده مفید را برده باشید و به طور کامل با آسیب پذیری LFI آشنا شده باشید .
بیشتر توی فیلد امنیت ، بخش Pentest کار میکنم ... +MCSَA CEH , CCNA ، ECSA ، CHFI ، AWAPT ، Security ، علاقه مند به امنیت ...مشغول به انجام پروژه های امنیت ... هر مطلبی که مربوط به شبکه و امنیت باشه ازش لذت می برم و با علاقه دنبال میکنم ...
زمان پاسخ گویی روز های شنبه الی چهارشنبه ساعت 9 الی 18
فقط به موضوعات مربوط به محصولات آموزشی و فروش پاسخ داده می شود