◄ BACK TO PROTOCOLS
HTB Academy · Module 112 · Section 14/21
Footprinting Port 1433 Windows Auth T-SQL
MSSQL — MICROSOFT SQL SERVER
DATABASE ANALYSIS · WINDOWS AUTH · NAMED PIPES · ENUMERATION
Port
TCP 1433
OS
Windows
Auth
Windows / SQL
Admin Account
sa ⚠️
Named Pipe
\pipe\sql\query
Best Tool
mssqlclient.py
نظرة عامة
MSSQL vs MySQL
الخاصيةMSSQLMySQL
المطورMicrosoftOracle
المصدرClosed SourceOpen Source
نظام التشغيلWindows أساساًLinux + Windows + Mac
الـ Stack.NET FrameworkLAMP / LEMP
Port14333306
لغة SQLT-SQL (Transact-SQL)MySQL SQL
show databasesselect name from sys.databasesshow databases;
💡 لو شفت Port 1433 مفتوح = غالباً Windows Server = ممكن AD + SMB + RDP على نفس الجهاز 🎯
🔌 MSSQL Clients

Client = أي برنامج تستخدمه للتواصل مع MSSQL Server:

الـ Clientالاستخدامأهمية Pentest
SSMSGUI كامل للـ adminsممكن يحتوي saved credentials! 🎯
mssqlclient.pyImpacket — command lineالأفضل للـ pentest ✅
mssql-clicommand line بسيطبديل
HeidiSQLGUI خفيفنادر في pentest
⚠️ SSMS مثبت على أجهزة المطورين والـ admins — مش بس السيرفر! لو اخترقت جهاز موظف وفيه SSMS بـ saved credentials = دخول مباشر للـ database!
🔧 NT SERVICE\MSSQLSERVER

لما تثبت MSSQL، Windows يخلق حساب خاص يشغّل الخدمة في الخلفية:

الإعداد الآمن
MSSQL يشتغل كـ:
NT SERVICE\MSSQLSERVER
صلاحيات محدودة ✅
الإعداد الخطير
MSSQL يشتغل كـ:
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 اتخترق! 💀
SQL Authentication
حسابات خاصة بـ MSSQL فقط
Windows ما يعرف عنها

مثل: sa, db_user

sa = System Admin الافتراضي ⚠️
💡 تشبيه:
Windows Auth = بطاقة الموظف العامة (تفتح كل شيء)
SQL Auth = بطاقة خاصة بالـ database فقط
🔌 Named Pipes — الباب الخلفي

طريقة اتصال ثانية بـ MSSQL غير TCP/IP:

TCP/IP (الباب الأمامي)
Port 1433
يشتغل عبر الشبكة
Firewall يقدر يحجبه
Named Pipe (الباب الخلفي)
\\TARGET\pipe\sql\query
لو 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 CertificateMITM ممكن — شهادة مزيفة تخدع الـ client
Named Pipes Enabledباب خلفي — يتجاوز الـ Firewall
Weak sa credentialssa:sa أو sa:(empty) = admin access كامل! 💀
💀 No Encryption vs Self-Signed Certificate
No Encryption
بيانات مكشوفة مباشرة
أي sniffing = كل شيء
مثل التكلم بصوت عالي في الشارع
Self-Signed Certificate
"مشفر" بس شهادة غير موثوقة
المهاجم ينشئ شهادة مزيفة
الـ 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.databasesshow databases;كل الـ databases
SELECT name FROM sys.tablesshow tables;كل الجداول
SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('users')show columns from users;أعمدة جدول
SELECT * FROM usersselect * from users;كل البيانات
SELECT @@versionselect version();إصدار SQL Server
SELECT name FROM sys.loginsselect 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
🗄️ 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 يفعّلونه "للراحة".