LFI چیست؟ معرفی آسیب پذیری Local File Inclusion

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 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 و ... آشنا خواهیم شد که جذاب هستند :)

PHP ZIP Wrapper LFI چیست؟

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 LFI Bypass چیست؟

Truncation تکنیک Bypass دیگری است که در آن مهاجم با اضافه کردن پارامتر های بلند Bypass را انجام میدهد ، بدین صورت که وب اپلیکیشن پارامتر های وارد شده را کوتاه می کند که ممکن است بتوان فیلتر پارامتر های ورودی را دور زد .

vuln.php?page=/etc/passwd........................................................................................
vuln.php?page=../../../../../../../..
/../../../../../../../../../../../../../../../../etc/passwd
vuln.php?page=/etc/passwd/../../../../../../../../../../../../../../../../../..

Log File Contamination چیست؟

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 را انجام داد .

Email a ReverseShell چیست؟

اگر سیستم هدف ، ایمیل را مستقیما یا به وسیله یک سیستم دیگر در یوزر 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 آشنا شده باشید .


ramint16
ramint16

بیشتر توی فیلد امنیت ، بخش Pentest کار میکنم ... +MCSَA CEH , CCNA ، ECSA ، CHFI ، AWAPT ، Security ، علاقه مند به امنیت ...مشغول به انجام پروژه های امنیت ... هر مطلبی که مربوط به شبکه و امنیت باشه ازش لذت می برم و با علاقه دنبال میکنم ...

05 بهمن 1395 این مطلب را ارسال کرده

نظرات