: :
مانده تا پایان تخفیف
فقط تا آخر امروز
فقط امروز

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 ، علاقه مند به امنیت ...مشغول به انجام پروژه های امنیت ... هر مطلبی که مربوط به شبکه و امنیت باشه ازش لذت می برم و با علاقه دنبال میکنم ...

نظرات