تأمين السكربت PHP من ثغرة Command Injection
شرح لطريقة تامين سكربت PHP من ثغرة Command Injection الشرح يتضمن
الاكتشاف والاستغلال والترقيع.
سنتحدث عن:
- ما هى ثغرة command injaction
- اكتشاف و استغلال الثغرة
- طريقه قفل الثغرة
ما هى (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>
--------------------------------------------------------------------------------------------------------
بعد ترقيه الثغره لا يمكن للمهاجم ان يحقن اكواد ابدا.
