





السمعة:
- إنضم15 سبتمبر 2023
- المشاركات 263
- الحلول 5
- مستوى التفاعل 303
- النقاط 63
HTML Injection - Theory
اخيراً , بداية الثغرة بعد انقطاع ستكون HTML injection
| هي ثغرة بسيطة ولكن في البداية يجب ان نسال انفسنا التالي:
- ما هذه الثغرة ؟
- كيف يمكننا أن نفعلها؟
- كيف نصلحها؟
بجملة واحدة يمكننا القول أن HTML injection هو إدخال كود HTML في صفحة الموقع ببساطة , كيف تعمل بالثغرة؟
إليكم مثال لنفترض أن لدينا صفحة ويب بسيطة جدًّ وتؤدي مهمة واحدة فقط.
تطلب من العميل إدخال اسمه داخل حقل الإدخال. بمجرد أن يدخل الشخص اسمه،
على سبيل المثال، لنقل أن الاسم المدخل هو "TOM"، ثم تعرض التطبيق
"Hello Tom"
إذًا نلاحظ أن هذا التطبيق يعكس أي شيء ندخله في الصفحة. ويعالج تطبيق الويب المدخل ويعكسه في جملة " {المدخل} Hello "
وهذا كود للمثال
هذا الكود الذي بالصورة لدينا نموذج حيث ندخل اسمنا وبعد النموذج سيعرض "مرحباً" ومن ثم ما أدخلناه في حقل الإدخال. في هذا المثال المطروح ، يعكس المدخل "TOM"
لكن الجزء الرئيسي من الكود هو الجزء الذي نتحكم في كتابته وينعكس في الصفحة
إذاً يأتي السؤال، ماذا سيحدث إذا بدلاً من اسم عادي، قمنا بإدخال كود HTML؟
مثلاً <h1>TEST<h1>
ماذا سيحدث للكود في صفحة الويب إذا قمنا بinjection له ؟
ماذا سينعكس؟
هنا نقرر إذا كانت الصفحة معرضة للـ HTML injection أم لا.
كود HTML الخاص بنا الذي تم عمل injection له في الصفحة سيبدو هكذا كما في الصورة
ماذا سيحدث للكود الموجود داخل صفحة web اذا تم كتابة html ، أنت الآن تتسائل، اليس كذلك؟
حسنًا، سيكون الأمر على حسب الحماية التي يٌقدمها السيرفر:
فممكن يطبع بشكل عادي string
HTML:نسخ إلى الحافظة
HTML:
hello <h1><u>tom</u></h1>
ولكن اذا عالجها كhtml هذا يعني أن الموقع مصاب بثغرة HTML Injection
وان user_input_feild لا يقوم عليه فلترة (لحمايته من مثل هذه الثغرات) ومن الممكن ايضا ان يكون هناك كود واحد فقط الذي يتم تنفيذه
الآن انتهينا من الجزء النظري، حان الوقت لنطبق على لابات مهيئة وبعد ذلك مواقع حقيقية
في هذا الجزء سوف نرى أوّل مثال على html injectionHTML Injection on TryHackMe
سنلقي نظرة على لاب من tryhackme
أول شيء عليك فعله هو التأكد أن burp قيد التشغيل في حال احتجنا له، أي لنكون على استعداد لاي نشاط غريب او لاكتشاف ثغرة
والآن نقوم بالدخول الى هنا للانتقال الى اللاب
ثم انتقل الى task رقم 5 | command injection practical
نقوم بتشغيل الجهاز
قم بتجهبز اعدادات الاتصال الخاصة ب.......tryhackme
بعد تجهيز الامور الان نقوم بزيارة IP المعطى
يظهر لنا هذه الواجهة , input يمكننا ان نقوم بكتاية اي شئ فيه وسيطبعه ، مثلاً كلمة NOOB ثم submit
قد قام بعكسها إلينا عبر طباعتها في جملة
لنقم الان بتجربة ثغرة htm linjection عبر كتابة وسم html في input ثم submit
نعم نعم ولكن بعض المواقع لا تقبلها ....

سنقابل 3 POC في النهاية انشاء الله
نرجع الى المثال هذا يعني ان الصفحة مصابة ب html injection، نجرب ندمج الاثنين html لنكون xss
قام الكود بتحوبل كل شئ الى هذا وعندما تقوم بالضغط على input يقوم بتنفيذ كود js >alert(1)<
الكود المستخدم
HTML:نسخ إلى الحافظة
HTML:
<a/href=j	a	v	asc
ri	pt:(a	l	e	r	t	(1))>
HTML Injection - Injecting User-Agent Header
لنرى مثال اخر على ثغرة HTML Injection
لنقم بتشغيل owaspVM
رابط التحميل https://sourceforge.net/projects/owaspbwa/
لنقم بالدخول الى هذا القسم OWASP Mutillidae II
مشاهدة المرفق 12724
لنقم بالدخول الى OWASP 2013 ثم A1injection(other) ثم htmlinjection قم الان باختيار اي شئ تريد ان تجرب عليه
اختار browser info
الان سيتم فتح صفحة يجب أن تكون معرضه لحقن HTML Injection.
لكن بالمقارنة مع المثال الأخير الذي رأيناه هنا، فإننا لا نرى حقًا أي مدخلات من المستخدم يمكننا استخدامها
لا يمكننا إدخال كود HTML الخاص بنا في أي مكان على هذه الصفحة. اذا نظرت بتمعن قليلا ستلاحظ UserAgent الخاص بنا،
الآن، إذا تذكرنا في http header، يوجد header UserAgent يحتوي على المعلومات الخاصه بنا.
ونرى هذا في نهاية الصفحه أيضًا
Browser Version
Cookie PHPSESSID
Cookie acopendivids
تلك القيم لا تعرض الى في request
الآن علينا التاكد من كل هذه المعلومات المطبوعه في الصفحه الذي في الموقع، هل هي لنا أم لا! إذًا لنقم بعمل interciptON ياستخدام اداة burp
الآن، نقارن هذه المعلومات هنا، والمعروضه على صفحة الويب
كما نرى، إنه نفس الشيء تقريبًا واضح وضوح الشمس
لذلك، على الرغم من عدم وجود حقل إدخال للمستخدم على صفحة الويب الخاصة بنا، هل يمكننا محاولة إدخال HTML
الان قد قمنا بارسال request
والناتج قام الموقع بتنفيذ الاكواد! إذًأ هذه html injection
لم نستخدم أي حقل إدخال للمستخدم في الصفحة، ولكننا مازلنا قادرين على إدخال كود HTML من خلال HTTP headers
كم هذا جميل يفتح الآفاق لمختبر الاختراق ....

في الأمثلة القادمة سنرى شئ مثير اكثر من هذا بإذن الله !
الان دعونا نرى استخدام مختلف لثغرة html injectionInjecting Cookie Field and Redirecting The Page
في الجزء السابق عرفنا انه من الممكن إدخال الكود دون وجود أي حقل إدخال للمستخدم.
الآن لنقم بتشغيل owaspVM
لنقم بالدخول الى هذا القسم OWASP Mutillidae II
لنقم بالدخول الى OWASP 2013 ثم A1injection(other) ثم html Via cookie injection ثم capture data page
هكذا لنجرب عليها
الآن نرى انه لا يوجد حقل ادخال في الصفحه لنكتب html مرة أخرى،ولكن نحصل على cookie مطبوعه داخل الصفحه
الآن نقوم باعتراض الطلب باستخدام burp نرى هنا ان القيمه الذي يمكن التعديل عليها هي PHPSESSID وهي نفس القيمه التي في الصفحه
الآن نُجرب حقن html injection ولكن اخطر بكثير , يمكننا أن نستغل هذه الثغره جيّدًا بحيث يمكننا اعادة توجيه المستخدم الى اي موقع.
الآن حان وقت التنفيذ، كيف يمكننا أن نفعل ذلك؟
يمكننا كتابة هذا الكود:
HTML:
<meta http-equiv="refresh" content="2; URL=https://www.google.com" />
أولًا، نفتح meta tag ثم http-equiv = "refresh" تقوم بعمل refresh للصفحه ثم content = "2; وتحديد ان الموقع يقوم بعمل refresh في ثانيتين، أي تنفيذ الكود بعد 2
ويمكنك أن تجعلها 0 ثانيه عن طريق تغيرها لتلك content = "0; ثم url = https://www.google.com الرابط الذي سننتقل اليه ثم اغلاق meta tag
والآن، كل ما يجب علينا فعله هو تجربة إذا كان الكود سيتم تنفيذه أم لا.

6.01 MB file on MEGA
يمكنك جعل الموقع يعيد التوجيه الى موقع مزيف ويمكنك استخدام tool مثل beef
في هذا الجزء سنقوم بتطبيق مثالين متقدمين على html injectionAdvance Example of HTML Injection
ل
نقم بالدخول الى OWASP 2013 ثم A1injection(other) ثم htmli via Dom injection ثم html5 storage
الآن، كما تلاحظن ف لدينا هُنا حقلين، ولدينا زر يتم تخزين القيم المدخله في في session storage , و local storage
الآن لنقم باختبار هذه المدخلات لنجرب ادخال test في المدخلات ثم الضغط على add now
النتيجه كما ترى تمت طباعة مدخلنا الذي هو كلمة test كنص عادي داخل الصفحه ثلاث مرات
الان نقوم باعتراض الطلب ياستخدام burp ولكن ستندهش عندما لا يصل اي طلب الى burp

3.1 MB file on MEGA
ولكن على الرغم من عدم التقاطنا للطلب يمكننا ان نكتب html في حقول الادخال لنجرب
HTML:
<h1>Test</h1>
هذا كان مثال بسيط ل html injection واخيرا حان الوقت لنرى مثال أكثر تقدمًا.
لنقم بالدخول الى OWASP 2013 ثم A1injection(other) ثم htmlinjection، قم الآن باختيار those back buttons
وهذه هي الصفحة التي نحصل عليها مرة أخرى، ولا يوجد حقول ادخال
إذًا ماذا سنحقن؟
لا يمكننا حتى أن نرى في هذا النص أن أي شيء من header ينعكس بشكل جيد لنركز في ذلك النا ولا يعوقك الذي اسفل من ذلك اي في هذا الموقع شئ اجباري وجود User-Agent
لنقم الان بقراءتها ولكن الخاصه ان الزر الرجوع الكبير الذي هو على اقصى الشمال لو ضغط عليه سيرجعك الى الصفحه السابقه
ويعمل الزر عن طريق تنفيذ جافاسكربت ان document.location.href يساوي the HTTP header referrer
حسنًا، قد يمنحنا هذا بالفعل معلومات كافية إذا جربناها، على سبيل المثال ادخال كود html في referrer header ، دعنا ننتقل burp ونقوم باعتراض الطلب , ثم اضغط على زر الرجوع
لقد حصلنا على رابط الصفحة التي نريد زيارتها، وهي الصفحة السابقة لهذه الصفحة.
وبما أننا قمنا بالنقر على زر الرجوع، فسوف يعيد توجيهنا إلى الصفحة السابقة يمكننا تعديل Referer header لنتمكن من الحصول على open redirect ولكن ليس موضوعنا
والان نرى الكود الخاص بزر الرجوع لنتاكد من ان Referer header ينعكس في الصفحه ام لا
نقوم بالضغط على [f12] من الكيبورد ليظهر لنا ادوات المطورين ونضغط على [ctrl shift s] مع بعض ثم قم بالتاشير على زر الرجوع
نرى انه فعلا ينعكس في الصفحه
والآن، كيف يمكننا عمل htmlinjection ؟
نقوم بكتابة html في Referer header
وسيقوم الموقع تلقائيا بالرجوع الى الصفحه الذي جاء منها
مره اخرى نقوم بالضغط على [f12] من الكيبورد ليظهر لنا ادوات المطورين ونضغط على [ctrl shift s] مع بعض ثم قم بالتاشير على زر الرجوع
نرى انه ما كتبناه في Referer header يعكس في الصفحه
نقوم الان بمراجعة الكود عبر نسحه ومراجعته
نرى انه ستم وضعه في a tag يتم تنفيز كود js ومن ثم كود html واغلاق '; event onclick ثم اغلاق a tag
واول شئ يجب وضعه بالحسبان ان الكود يبدا ب " ويجب اغلاقها لكي يعمل الكود اونتخطى جزئيه معينه
هنا انهينا امر js عبر "
الآن لِنُكمل الكود
ولكن بقي لدينا كود html داخل a tag ما يمكنني فعله الان هو اغلاق a tag
والآن نلاحظ اوجه التشابه في الكودان
قد اغلقنا a tag وفتحنا h1 tag في نفس السطر وكانه سطر جديد
اكننا نكتب كود html المراد حقنه بعد a tag
وها هو payload الخاص بنا.
HTML:
"></a><h1>test</h1>
دعونا نرى ما ان كان سيعمل أم لا ....
لنقم بالخطوات السابقه مُجدّدًا،
افتح burp ، ارجع الى الصفحه التي اكتشفنا فيها الثغره، ثم بعمل اعتراض للطلب، وقم بتغير شئ بسيط في referrer header، وهو اضافة a><h1>test</h1>
على الرابط ولم نكن بحاجه الى حذف الرابط او ماشبه لقد كان فقط لتوضيع code ومراجعته
النتيجه هنا تم عمل html injection
بمكننا اخذ نظره عن كيفية ظهور هذا الكود، حيث نُلاحظ الآن أنه تم اغلاق a tag وكتابة كود آخر ثم يقايا الكود الأول تمت طباعتها
الهدف https://www.viator.com/POC html injection one
في البدايه قمت بفحص domain الراسي للموقع يدويًا لم اجد شئ يذكر
ثم قمت بالدخول الى احد الرحلات الخاصه بهم ثم chat helper
اولى تجربتي كان هذا الشات مصاب NOLIMIT اي يمكنني ان ارسل ملايين الرسائل اي ملايين الاكواد لتخطي waf
ولكن بعد يوم تقريبا وجدت request مشفره
قمت بتجربة الثغره عبر burp intruder اثناء ما كان مصاب NOLIMIT
ولقد وجدت كود a tag فقط هو الذي يعمل كان تحته خط ولكن لم يكن ينفذ
ولكن كيف جلبت الكود مثل هذا وليس هذا ده كان عندي
اولا بعد الحديث مع فريق الدعم قد قام من كان يكلمني قد بعث الي بعض الروابط فقمت بفتح ادوات المطورين[f12]
ثم قمت بعمل تحديد للرابط ثم قمت بإرساله مرة أخرى وقد نجح الكود وقمت بعمل html injection
HTML:
<a href="https://evil.com" target="_blank" rel="nofollow noopener noreferrer">here</a>
التي لديها حمايه لا باس بها بسبب waf عنيد لا اريد ذكر اسمه وحماية الموقع .
ملاحظة: ما زالت الثغرة موجودة
الهدف https://fr.shopping.rakuten.comPOC html injection TWO
كنت اتصفح التقارير التابعه لhtml injection فوجدت هذه قمت بعمل اعادة استغلال وقمت بتحويلها الى open redirect عبر html
أعتذر على كل الأكواد الموجوده; ولكن كنت أختبر، وأخذت الموقع بعد الاستغلال، يمكنك الآن العيش مع أداة مثل beef بدون قلق
والسلام عليكم ورحمة الله وبركاته
وفي النهايه لو وجد أحدٌ خطأ ما، أو لو وجدت الإدارة خطأ ما ، من فضلكم راسلوني لتعديل الخطأ STORM لا تنسى مراجعته
المرفقات
التعديل الأخير بواسطة المشرف: