
लक्षित C# पोस्ट-एक्सप्लॉइटेशन टूल जो Microsoft SQL Server (MS SQL / MSSQL) के लिए है, जो किसी भी गहराई की लिंक्ड-सर्वर श्रृंखलाओं को हर हॉप पर कैस्केडिंग लॉगिन प्रतिरूपण के साथ पार करता है।
अपने लक्ष्य Microsoft SQL Server (MS SQL) DBMS में शान से उतरें, जैसे बिज़नेस क्लास की उड़ान में हाथ में शैंपेन का गिलास लेकर पहुँच रहे हों। 🥂

MSSQLand एक C# Microsoft SQL Server (MSSQL / MS SQL) पोस्ट-एक्सप्लॉइटेशन टूल है जो रेड टीम ऑपरेटरों के लिए बनाया गया है। इसे आपके बीकन के माध्यम से सीधे लक्ष्य वातावरण में चलाने के लिए डिज़ाइन किया गया है (उदाहरण के लिए, Cobalt Strike या Havoc में execute-assembly या किसी dotnet कमांड का उपयोग करके), यह आपको लिंक्ड सर्वर चेन को पार करने, रास्ते में मिलने वाले किसी भी लॉगिन का प्रतिरूपण करने और अंतिम हॉप से किसी भी वांछित कार्रवाई को निष्पादित करने की अनुमति देता है। यह सब न्यूनतम OPSEC फुटप्रिंट और बिना किसी बाहरी निर्भरता के।
OPENQUERY / EXEC AT रैपिंगEXECUTE AS LOGIN के साथ कैस्केडिंग मल्टी-उपयोगकर्ता प्रतिरूपणcm-* क्रियाएँ[!TIP] MSSQLand को
.NET Framework 4.8का उपयोग करके बनाया गया है, जिसमें वर्तमान संदर्भ का उपयोग करके असेंबली निष्पादन पर ध्यान केंद्रित किया गया है। यदि आपको NT/LM हैश या Kerberos टिकट का उपयोग करके कनेक्ट करने की आवश्यकता है, तो Pass-the-Hash देखें।
[!NOTE] बुनियादी बातों को न भूलें। सुरक्षा मूल्यांकन के दौरान, कभी-कभी SQL Server Management Studio (SSMS) का उपयोग करना आसान होता है।
MSSQLand.exe [options] <host> [options] <action> [action-options]
MSSQLand.exe <host> --probe
ग्लोबल फ़्लैग (-c, -l, --debug, आदि) किसी भी स्थान पर स्वीकार किए जाते हैं, जिसमें क्रिया नाम के बाद भी शामिल है; क्रिया के बाद अपरिचित टोकन क्रिया को शाब्दिक रूप से पास कर दिए जाते हैं।
[!NOTE]
<action>को छोड़ने पर केवल कनेक्शन परीक्षण होता है। यह प्रमाणित करता है और बिना कोई क्वेरी चलाए बाहर निकल जाता है। न्यूनतम OPSEC फुटप्रिंट के साथ क्रेडेंशियल सत्यापन के लिए आदर्श।
[!TIP] सभी RPC Out या OPENQUERY कॉल मैन्युअल रूप से टाइप करने से बचें। टूल को
-lतर्क के साथ किसी भी लिंक्ड सर्वर चेन को संभालने दें, ताकि आप बड़ी तस्वीर पर ध्यान केंद्रित कर सकें।
स्वरूप: server:port/user@database या कोई भी संयोजन server/user@database:port।
server (अनिवार्य) - SQL Server होस्टनाम या IP:port (वैकल्पिक) - पोर्ट नंबर (डिफ़ॉल्ट: 1433, सामान्यतः: 1434, 14333, 2433)/user (वैकल्पिक) - इस सर्वर पर प्रतिरूपित करने के लिए उपयोगकर्ता ("execute as login")
/user1/user2/user3 EXECUTE AS LOGIN = 'user1'; EXECUTE AS LOGIN = 'user2'; EXECUTE AS LOGIN = 'user3'; निष्पादित करता है/user सुरक्षा स्टैक पर एक नया प्रतिरूपण संदर्भ जोड़ता है@database (वैकल्पिक) - डेटाबेस संदर्भ# कनेक्टिविटी प्रोब: बिना प्रमाणीकरण के जाँचता है कि सर्वर जीवित है या नहीं
MSSQLand.exe localhost --probe
# केवल कनेक्शन परीक्षण (कोई क्रिया निष्पादित नहीं, प्रमाणित करता है और बाहर निकलता है)
MSSQLand.exe localhost -c token
# विशिष्ट क्रिया निष्पादित करें
MSSQLand.exe localhost -c token info
MSSQLand.exe localhost:1434@db03 -c token info
MSSQLand.exe LAB-SQL01@AdventureWorks -c token tables -n Customer
-l फ़्लैग का उपयोग करके अर्धविराम (;) को विभाजक के रूप में कई SQL सर्वरों को चेन करें:
-l SQL01;SQL02/user;SQL03@database
सिंटैक्स:
;) - चेन में सर्वरों को अलग करता है/) - प्रतिरूपित करने के लिए उपयोगकर्ता निर्दिष्ट करता है ("execute as login")
/user1/user2 क्रमिक प्रतिरूपण निष्पादित करता है@) - डेटाबेस संदर्भ निर्दिष्ट करता है[...]) - सर्वर नाम को हमारे विभाजकों द्वारा विभाजित होने से बचाने के लिए उपयोग किया जाता हैउदाहरण:
# सरल चेन
-l SQL01;SQL02;SQL03
# प्रतिरूपण और डेटाबेस के साथ
-l SQL01/admin;SQL02;SQL03/manager@clients
# कैस्केडिंग प्रतिरूपण (SQL01 पर user1 को प्रतिरूपित करें, फिर user2 को)
-l SQL01/user1/user2;SQL02;SQL03
# मिश्रित कैस्केडिंग (SQL01: user1→user2, SQL03: user3→user4→user5)
-l SQL01/user1/user2;SQL02;SQL03/user3/user4/user5@database
# सर्वर नाम में हाइफ़न, डॉट हो सकते हैं (ब्रैकेट की आवश्यकता नहीं)
-l SQL-01;SERVER.001;HOST.DOMAIN.COM
# ब्रैकेट केवल तभी आवश्यक हैं जब सर्वर नाम में विभाजक वर्ण हों
-l [SERVER;PROD];SQL02;[SQL03@clients]@clientdb
[!NOTE] पोर्ट विनिर्देश (
:port) केवल प्रारंभिक होस्ट कनेक्शन पर लागू होता है। लिंक्ड सर्वर चेन (-l)sys.serversमें कॉन्फ़िगर किए गए लिंक्ड सर्वर नामों का उपयोग करती है, न किhostname:portसंयोजनों का।
इन मोड में किसी प्रमाणीकरण की आवश्यकता नहीं है और ये क्रेडेंशियल्स से पहले काम करते हैं।
SQL Server Browser सेवा UDP 1434 पर सुनती है और डिस्कवरी अनुरोधों पर एक होस्ट पर चल रहे SQL Server इंस्टेंस की सूची, उनके नाम, संस्करण और TCP पोर्ट के साथ प्रतिक्रिया देती है। यह तब उपयोगी है जब लक्ष्य डायनामिक पोर्ट पर नामित इंस्टेंस चला रहा हो, अनुमान लगाने या स्कैन करने की आवश्यकता नहीं है।
# किसी विशिष्ट होस्ट पर SQL Browser सेवा को क्वेरी करें (UDP 1434)
MSSQLand.exe LAB-SQL03 --browse
Active Directory कंप्यूटर और सेवा खातों पर संग्रहीत सर्विस प्रिंसिपल नेम (SPN) के माध्यम से SQL Server पंजीकरण प्रकट करता है। MSSQLand, LDAP के माध्यम से MSSQLSvc/* SPN के लिए AD को क्वेरी करके डोमेन में SQL Server इंस्टेंस या ग्लोबल कैटलॉग के माध्यम से पूरे फ़ॉरेस्ट को गणना करता है।
# Active Directory में LDAP के माध्यम से SQL सर्वर खोजें (वर्तमान डोमेन)
MSSQLand.exe --findsql
# किसी विशिष्ट डोमेन को लक्षित करें
MSSQLand.exe --findsql pgd.lab
# ग्लोबल कैटलॉग (पोर्ट 3268) के माध्यम से फ़ॉरेस्ट-व्यापी खोज
MSSQLand.exe --findsql pgd.lab --gc
खोज बहु-स्तरीय है। अधिक जानकारी के लिए FindSqlServers.cs देखें।
SQL Server Browser UDP 1434 पर UDP ब्रॉडकास्ट पैकेट का भी जवाब देता है, जिससे स्थानीय सबनेट पर स्वयं विज्ञापित सभी SQL Server इंस्टेंस की खोज संभव होती है।
# स्थानीय नेटवर्क पर ब्रॉडकास्ट खोज (UDP 1434)
MSSQLand.exe --broadcast
MSSQLand.exe --broadcast --timeout 5
[!TIP] यह विशेष रूप से तब उपयोगी होता है जब SQL Server डोमेन से जुड़े नहीं मशीन पर चल रहा हो और इसलिए यह किसी LDAP या SPN क्वेरी में दिखाई नहीं देगा। स्टैंडअलोन सर्वर, डेवलपर मशीन, या आंतरिक VLAN पर चालू किए गए दुष्ट इंस्टेंस के बारे में सोचें।
TDS प्रोटोकॉल हैंडशेक (केवल TCP SYN नहीं) का उपयोग करके लाइव SQL Server इंस्टेंस के विरुद्ध खुले पोर्ट को मान्य करता है। एक पोर्ट केवल तभी रिपोर्ट किया जाता है यदि वह TDS प्री-लॉगिन पैकेट का जवाब देता है।