تأمين سكربت PHP من ثغرة Command Injection

       تأمين السكربت PHP من ثغرة Command Injection

شرح لطريقة تامين سكربت PHP من ثغرة Command Injection الشرح يتضمن

الاكتشاف والاستغلال والترقيع.

 

سنتحدث عن:

  1.       ما هى ثغرة command injaction
  2.        اكتشاف و استغلال الثغرة 
  3.        طريقه قفل الثغرة 

 ما هى (command injaction):


    هو ضعف أمني يسمح للمهاجم بأن يقوم بحقن اوامر يتم تنفيذها على مستوى النظام من خلال (forms, cookies, HTTP headers etc.) و يكون هذا بسبب عدم فلتره المدخلات.

 كيف اكتشاف و استغلال الثغرة:

من خلال الكود التالي نلاحظ بأن المبرمج قام بعمل كود يطلب من المستخدم ادخال اسم ملف ليتم قراءته واستخدام دالة system لتنفيذ الامر وعرض المخرجات.
--------------------------------------------------------------------
<html>
<head><title>AHMED-ABDELAZIZ_XAR| Command iNj</title></head>
<body>
<p><b>Enter custom file name to read it</b></p>
<p><i>Files: test.txt, myname.txt</i></p>
<form action="" method="post">
<input type="text" name="filename" value="" />
<input type="submit" name="submit" value="Submit" />
</form>

<?php

if (isset($_POST['submit'])) {
    $file = $_POST['filename'];
    system("cat $file");
}
?>

</body>
<html>
-------------------------------------------------------------------------------------------------------
في هذه الحالة سيقوم الكود باخذ المدخلات من المستخدم وتنفيذها ومن ثم عرض المخرجات.
مثال:
تكتب : TEXT.txt او FILENAME.txt
ولكن المبرمج لم يقوم بفلتره المدخلات ووثق بالمستخدم ثقة كبيرة وهنا سياتي استغلال المهاجم لهذا الضعف من خلال حقن امر بجانب الامر الذي وضعة المبرمج.

كيف الاستغلال: 
امر pwd : هو لعرض مسارك الحالي في لينكس .
وامر ls  : هو لعرض محتويات المجلد.

يمكن المهاجم قراءه ملفات حساسة على الخادم أو استدعاء ملفات خارجية ووضعها على الخادم وبالطبع هذا الامر يعتمد على (الصلاحيات).

ترقيع الثغرة:

لترقيع الثغرة سنقوم بـ استخدام دالة escapeshellcmd ومهمة الدالة هي تصفيه المدخلات والتاكد من صحتها قبل تمريرها وفي حالة قام المستخدم ادخال أي من الرموز التالية.
@#$%^&*()<>?\"'

سيتم اضافة باك سلاش قبل المدخل ليتم منعه من التنفيذ.
-------------------------------------------------------------------------------------------------------
<html>
<head><title>0xAbdullah LAB | Command iNj</title></head>
<body>
<p><b>Enter custom file name to read it</b></p>
<p><i>Files: test.txt, myname.txt</i></p>
<form action="" method="post">
<input type="text" name="filename" value="" />
<input type="submit" name="submit" value="Submit" />
</form>

<?php

if (isset($_POST['submit'])) {
    $file = $_POST['filename'];
    $file = escapeshellcmd($file);
    system("cat $file");
}
?>

</body>
<html>
--------------------------------------------------------------------------------------------------------
بعد ترقيه الثغره لا يمكن للمهاجم ان يحقن اكواد ابدا.

جديد قسم : حماية