
عدة أدوات بلغة C# لقواعد بيانات MS SQL، مصممة للاستطلاع الهجومي وعمليات ما بعد الاستغلال.
SQLRecon عبارة عن مجموعة أدوات لخادم Microsoft SQL Server مصمّمة للاستطلاع الهجومي وما بعد الاستغلال. للحصول على معلومات مفصّلة حول كيفية استخدام كل تقنية، راجع الويكي.
يمكنك تنزيل نسخة من SQLRecon من صفحة الإصدارات. أو يمكنك تجميع الحل بنفسك؛ يجب أن يكون الأمر سهلاً مثل استنساخ المستودع، والنقر المزدوج على ملف الحل، ثم البناء.
كما تم توفير إرشادات الوقاية والكشف والتخفيف لجميع المدافعين.
اطّلع على مقالتي على موقع IBM Security Intelligence. وإذا كنت تفضّل الفيديوهات، فشاهد عرضي في Black Hat.
لا تتطلب وحدات التعداد توفير موفِّر مصادقة. يجب تمرير هذه الوحدات إلى علامة وحدة التعداد (/e:, /enum:). يحتوي الويكي على تفاصيل حول استخدام وحدات التعداد.```
Info - Show information about the SQL server.
/h:, /host -> SQL server hostname or IP. Multiple hosts supported.
/port: -> (OPTIONAL) Defaults to 1434 (UDP).
/t:, timeout: -> (OPTIONAL) Defaults to 3s.
SqlSpns - Use the current user token to enumerate the AD domain for MSSQL SPNs. /d:, /domain: -> (OPTIONAL) NETBIOS name or FQDN of domain.
# مزودو المصادقة
يدعم SQLRecon مجموعة متنوعة من مزودي المصادقة (`/a:, /auth:`) لتمكين التفاعل مع خادم Microsoft SQL Server.```
WinToken - Use the current users token to authenticate against the SQL database
/h:, /host: -> SQL server hostname or IP
WinDomain - Use AD credentials to authenticate against the SQL database
/h:, /host: -> SQL server hostname or IP. Multiple hosts supported.
/d:, /domain: -> NETBIOS name or FQDN of domain.
/u:, /username: -> Username for domain user.
/p:, /password: -> Password for domain user.
Local - Use local SQL credentials to authenticate against the SQL database
/h:, /host: -> SQL server hostname or IP. Multiple hosts supported.
/u:, /username: -> Username for local SQL user.
/p:, /password: -> Password for local SQL user.
EntraID - Use Azure EntraID credentials to authenticate against the Azure SQL database
/h:, /host: -> SQL server hostname or IP. Multiple hosts supported.
/d:, /domain: -> FQDN of domain (DOMAIN.COM).
/u:, /username: -> Username for domain user.
/p:, /password: -> Password for domain user.
AzureLocal - Use local SQL credentials to authenticate against the Azure SQL database
/h:, /host: -> SQL server hostname or IP. Multiple hosts supported.
/u:, /username: -> Username for local SQL user.
/p:, /password: -> Password for local SQL user.
/h:, host:) مطلوبة وتسمح بخادم SQL واحد أو أكثر. إذا أردت تنفيذ وحدة نمطية ضد خوادم SQL متعددة، فافصل بين المضيفين بفاصلة، على سبيل المثال /h:SQL01,10.10.10.2,SQL03.master افتراضيًا، ومع ذلك يمكن تغيير ذلك اختياريًا عن طريق توفير اسم قاعدة بيانات مخصص عبر علامة قاعدة البيانات (/database:)./debug اختيارية وتعرض جميع استعلامات SQL التي ينفذها الوحدة النمطية، دون تنفيذها فعليًا على المضيف (المضيفين) البعيدين. يمكن العثور على مثال على ذلك في الويكي.1433 افتراضيًا، ومع ذلك يمكن تغيير ذلك اختياريًا باستخدام علامة /port:.3 ثوانٍ، ومع ذلك يمكن تغيير هذه القيمة اختياريًا عن طريق توفير قيمة مهلة (/t:, /timeout:) تتوافق مع عدد الثواني قبل إنهاء محاولة الاتصال.يُرجى ملاحظة أن موفر المصادقة EntraID يتطلب وجود مكتبة مصادقة Azure Active Directory (ADAL) أو مكتبة مصادقة Microsoft (MSAL) على النظام الذي يتم تنفيذ SQLRecon منه. وذلك لوظائف مصادقة Azure EntraID والترخيص.
يتم تنفيذ وحدات SQL النمطية ضد مثيل واحد أو أكثر من خادم Microsoft SQL. يجب تمرير هذه الوحدات إلى علامة الوحدة النمطية (/m:, /module:).
علامة المضيف (/h:, host:) مطلوبة وتسمح بخادم SQL واحد أو أكثر. إذا أردت تنفيذ وحدة نمطية ضد خوادم SQL متعددة، فافصل بين المضيفين بفاصلة، على سبيل المثال /h:SQL01,10.10.10.2,SQL03.
يحتوي الويكي على تفاصيل حول استخدام كل وحدة نمطية تدعم التنفيذ على مثيل واحد أو أكثر من SQL Server.
يتم تنفيذ وحدات الانتحال ضد مثيل واحد أو أكثر من خادم Microsoft SQL، في سياق مستخدم SQL منتحل. جميع وحدات الانتحال لها الحد الأدنى التالي من المتطلبات:
/i:, /iuser:)./m:, /module:).يحتوي الويكي على تفاصيل حول استخدام كل وحدة نمطية تدعم التنفيذ باستخدام الانتحال.
يتم تنفيذ الوحدات المرتبطة على مثيل واحد أو أكثر من خادم Microsoft SQL مرتبط. جميع الوحدات المرتبطة لها الحد الأدنى التالي من المتطلبات:
/l:, /link:). تسمح علامة الارتباط بخادم SQL مرتبط واحد أو أكثر. على سبيل المثال، إذا كان SQL01 لديه ارتباط بـ SQL02، وSQL01 لديه ارتباط بـ DB04، يمكنك فصل المضيفين المرتبطين بفاصلة، وسيتم تنفيذ وحدة نمطية على كل خادم SQL مرتبط، على سبيل المثال /l:SQL02,DB04./m:, /module:).يحتوي الويكي على تفاصيل حول استخدام كل وحدة نمطية تدعم التنفيذ على مثيل واحد أو أكثر من خادم SQL مرتبط.
يتم تنفيذ وحدات السلسلة المرتبطة على خادم Microsoft SQL النهائي في سلسلة خوادم مرتبطة. جميع وحدات السلسلة المرتبطة لها الحد الأدنى التالي من المتطلبات:
/l:, /link:. إذا كان SQL01 لديه ارتباط بـ SQL02، وSQL02 لديه ارتباط بـ PAYMENTS01، وتريد تنفيذ وحدة نمطية على PAYMENTS01، فإن الوسيطة ستكون /l:SQL02,PAYMENTS01./chain لتنفيذ الوحدة النمطية ضد خادم SQL النهائي في السلسلة المرتبطة المقدمة./m:, /module:).يحتوي الويكي على تفاصيل حول استخدام كل وحدة نمطية تدعم التنفيذ على خادم SQL النهائي المقدم في سلسلة خوادم SQL مرتبطة.
لدى SQLRecon عدة وحدات نمطية يمكن أن تساعد في تعداد ومهاجمة Microsoft System Center Configuration Manager (SCCM) و Microsoft Endpoint Configuration Manager (ECM). سيحتاج خادم SCCM أو ECM إلى وجود قاعدة بيانات Microsoft SQL مكشوفة محليًا أو عن بُعد.
يجب تمرير وحدات SCCM النمطية إلى علامة وحدة SCCM (/s:, /sccm:).
يمكن تنفيذ معظم وحدات SCCM النمطية في سياق مستخدم SQL منتحل (/i:, /iuser:).
يحتوي الويكي على تفاصيل حول استخدام كل وحدة نمطية ضد قاعدة بيانات SCCM/ECM.
Users جميع المستخدمين في جدول RBAC_Admins. هؤلاء هم جميع المستخدمين الذين تم تكوينهم بمستوى معين من الوصول إلى SCCM.Sites جميع المواقع الأخرى التي تحتوي على بيانات مخزنة في جدول DPInfo في قواعد بيانات SCCM. يمكن أن يوفر هذا مسارات هجوم إضافية حيث يمكن تكوين مواقع مختلفة بطرق مختلفة (غير آمنة).Logons من جدول Computer_System_DATA لاسترداد جميع عملاء SCCM المرتبطين مع المستخدم الذي سجل الدخول إليهم آخر مرة. ملاحظة: يتم تحديث هذا مرة واحدة فقط في الأسبوع افتراضيًا ولن يكون محدثًا بنسبة 100%. استخدم /option: كوسيطة اختيارية (غير مطلوبة) لتصفية عملاء SCCM.TaskList قائمة بجميع تسلسلات المهام المخزنة في قاعدة بيانات SCCM، ولكنها لا تصل إلى محتويات بيانات المهام الفعلية.TaskData جميع تسلسلات المهام المخزنة في قاعدة بيانات SCCM وتفك تشفيرها إلى نص واضح. يمكن أن تحتوي تسلسلات المهام على بيانات اعتماد لضم الأنظمة إلى المجالات، وتعيين المشاركات، وتشغيل الأوامر، وما إلى ذلك.Credentials بيانات الاعتماد التي حفظتها SCCM لاستخدامها في وظائف مختلفة. لا يمكن فك تشفير هذه البيانات عن بُعد لأن المفتاح مخزن على خادم SCCM. ومع ذلك، توفر هذه الوحدة معلومات استخباراتية حول ما إذا كان من المنطقي محاولة الحصول على المفتاح.إذا كنت مهتمًا بتوسيع SQLRecon، فيرجى الرجوع إلى قسم المساهمة والتوسيع في الويكي.
أشجعك على فتح issue إذا كان لديك أي اقتراحات أو أفكار.
الهدف هو تحسين SQLRecon باستمرار. فيما يلي بعض مجالات البحث المخطط لها:
ساهم الأشخاص التاليون بشكل مباشر أو غير مباشر في جوانب مختلفة من SQLRecon.
whoami (JBalanza).adsi حيث لا يحتاج خادم LDAP إلى الإضافة إلى قاعدة بيانات msdb، كما يتم الآن إسقاط الدالة المنشأة بشكل صحيح.SQL01 لديه ارتباط بـ SQL02، وSQL02 لديه ارتباط بـ SQL03، وSQL03 لديه ارتباط بـ PAYMENTS01. أصبح من الممكن الآن تنفيذ أوامر من SQL01 على PAYMENTS01 باستخدام سلسلة الخوادم المرتبطة (/link:SQL02,SQL03,PAYMENTS01 /chain). الفضل يعود إلى Azaël Martin (n3rada).l' و 'i'، وإدخال منطق السياق بحيث يمكن أن تكون أسماء الوحدات متماثلة عبر التنفيذ القياسي والانتحال والمرتبط والمتسلسل./debug)، والذي سيعرض معلومات تصحيح متنوعة وجميع استعلامات SQL التي سينفذها الوحدة النمطية، دون تنفيذها./host أو /h أصبح مدعومًا الآن باستخدام قيم مفصولة بفواصل./link أو /l أصبح مدعومًا الآن باستخدام قيم مفصولة بفواصل./lhost إلى /link.s' وإنشاء مفتاح /s و /sccm لوحدات SCCM.DecryptCredentials./enum) جديدة تسمى info والتي يمكنها استخدام سياق غير مصادق للحصول على معلومات خادم SQL، بما في ذلك اسم المثيل ومنفذ TCP باستخدام بروتوكول UDP.ModuleHandler.cs لتعزيز التبسيط وقابلية التوسعة.adsi المرتبط لا يزيل خادم LDAP.adsi المرتبط، لصالح openquery/rpc./lhost إلى /adsi في وحدة adsi./rhost إلى /unc في وحدة smb.CaptureHash.cs وتبسيط المنطق.SetEnumerationType.cs وتبسيط المنطق.Impersonation.cs إلى Impersonate.cs.OleCmdExec.cs إلى OleAutomation.cs.smb.info.info.rows و iRows و lRows.sLogons لتضمين عامل تصفية اختياري.xp_cmdshell تطبع مخرجات الأوامر إلى وحدة التحكم.SetEnumerationType.cs.domain إلى SqlSpns.ExecuteImpersonationQuery وExecuteImpersonationCustomQuery.Impersonate.cs.checkRpc.iCheckRpc.lCheckRpc.EnableDisable.cs إلى ConfigureOptions.cs.ExecuteLinkedCustomQueryRpcExec. PrintUtils.cs، والذي ينفّذ فئة طباعة لمخرجات موحّدة.TablePrinter من Help.cs إلى PrintUtils.cs.PrintUtils.querysearchtableslColumnslQuerylSearchlTablesiColumnsAzure إلى AzureAD.AzureLocal.disableRpc.enableRpc.iEnableRpc.iDisableRpc.lEnableRpc.lDisbleRpc.lAgentCmd.clr وiClr وlClr باستخدام SqlCommand.ExecuteNonQuery عند إنشاء الإجراء المخزّن.lClr حيث لم يكن يزيل التجميعات أو الإجراءات المخزّنة التي تم إنشاؤها.columns.iColumns.iDatabases.iSearch.iTables.lColumns.lSearch.ExecuteLinkedCustomQueryRpcExec.x.Random.cs إلى دليل utilities.Windows إلى WinToken.WinDomain، والتي تستخدم اسم مستخدم وكلمة مرور نطاق Active Directory للمصادقة عبر انتحال الهوية. اطّلع على Impersonation.cs.ArgumentLogic.cs, SQLAuthentication.cs وModuleHandler.cs.ModuleHandler.cs يستخدم عبارة if/else if/else ضخمة لتنفيذ الوحدات. بدلاً من ذلك، يُستخدم الآن الانعكاس (reflection) لاستدعاء الطرق المطابقة لأسماء وحدات الأوامر.commands، الذي يحتوي على متغيرات عامة تُستخدم في جميع أنحاء البرنامج.SQLAuthentication.cs.Program.cs إلى ArgumentLogic.cs.sccm.roles وiRoles وlRoles.users وiUsers وlUsers.sp_drop_trusted_assembly في وحدتي clr وiClr.lAgentCmd.lClr.info.Local وAzure.-e domain).-r إلى وضعي المصادقة Windows وLocal بحيث يمكن توفير منافذ TCP غير قياسية.Environment.Exit من TestAuthentication.cs.AgentJobs.cs.agentStatus.iAgentStatus.lAgentStatus.agentCmd.iAgentCmd.clr.iEnableClr.iDisbleClr.iClr.iWhoami.iMapped.iRoles.lEnableRpc.lDisableRpc.lWhoai.lEnableXp.lDisableXp.lEnableOle.lDisableOle.lSmb.lWhoami.lRoles.oldCmd.iOleCmd.lDatabases.lTables./v, /verbose| اسم الوحدة النمطية | الوصف | الانتحال | التنفيذ المرتبط | تنفيذ السلسلة المرتبطة | يتطلب سياقًا مميزًا |
|---|
CheckRpc | الحصول على قائمة بالخوادم المرتبطة وحالة RPC الخاصة بها. | ✅ | ✅ | ✅ | ❎ |
Databases | عرض جميع قواعد البيانات. | ✅ | ✅ | ✅ | ❎ |
Impersonate | تعداد حسابات المستخدمين التي يمكن انتحالها. | ✅ | ✅ | ✅ | ❎ |
Info | عرض معلومات حول خادم SQL. | ✅ | ✅ | ✅ | ❎ |
Links | تعداد خوادم SQL المرتبطة. | ✅ | ✅ | ✅ | ❎ |
Users | عرض حسابات المستخدمين والمجموعات التي يمكنها المصادقة ضد قاعدة البيانات. | ✅ | ✅ | ✅ | ❎ |
Whoami | عرض صلاحياتك. | ✅ | ✅ | ✅ | ❎ |
Query /c:QUERY | تنفيذ استعلام SQL. | ✅ | ✅ | ✅ | ❎ |
Smb /unc:UNC_PATH | التقاط تجزئة NetNTLMv2. | ✅ | ✅ | ✅ | ❎ |
Columns /db:DATABASE /table:TABLE | عرض جميع الأعمدة في قاعدة البيانات والجدول المقدمين. | ✅ | ✅ | ✅ | ❎ |
Rows /db:DATABASE /table:TABLE | عرض عدد الصفوف في جدول قاعدة البيانات المقدم. | ✅ | ✅ | ✅ | ❎ |
Search /keyword:KEYWORD | البحث في أسماء الأعمدة في الجدول المقدم لقاعدة البيانات التي تتصل بها. | ✅ | ✅ | ✅ | ❎ |
Tables /db:DATABASE | عرض جميع الجداول في قاعدة البيانات المقدمة. | ✅ | ✅ | ✅ | ❎ |
EnableRpc /rhost:LINKED_HOST | تمكين RPC و RPC الصادر على خادم مرتبط. | ✅ | ❌ | ❌ | ✔️ |
EnableClr | تمكين تكامل CLR. | ✅ | ✅ | ✅ | ✔️ |
EnableOle | تمكين إجراءات أتمتة OLE. | ✅ | ✅ | ✅ | ✔️ |
EnableXp | تمكين xp_cmdshell. | ✅ | ✅ | ✅ | ✔️ |
DisableRpc /rhost:LINKED_HOST | تعطيل RPC و RPC الصادر على خادم مرتبط. | ✅ | ❌ | ❌ | ✔️ |
DisableClr | تعطيل تكامل CLR. | ✅ | ✅ | ✅ | ✔️ |
DisableOle | تعطيل إجراءات أتمتة OLE. | ✅ | ✅ | ✅ | ✔️ |
DisableXp | تعطيل xp_cmdshell. | ✅ | ✅ | ✅ | ✔️ |
AgentStatus | عرض ما إذا كان وكيل SQL قيد التشغيل والحصول على وظائف الوكيل. | ✅ | ✅ | ✅ | ✔️ |
AgentCmd /c:COMMAND | تنفيذ أمر نظام باستخدام وظائف الوكيل. | ✅ | ✅ | ✅ | ✔️ |
Adsi /adsi:SERVER_NAME /lport:LOCAL_PORT | الحصول على بيانات اعتماد ADSI بنص واضح من خادم ADSI مرتبط. | ✅ | ✅ | ✅ | ✔️ |
Clr /dll:DLL /function:FUNCTION | تحميل وتنفيذ تجميع .NET في إجراء مخزن مخصص. | ✅ | ✅ | ✅ | ✔️ |
OleCmd /c:COMMAND /subsystem:(OPTIONAL) | تنفيذ أمر نظام باستخدام إجراءات أتمتة OLE. | ✅ | ✅ | ✅ | ✔️ |
XpCmd /c:COMMAND | تنفيذ أمر نظام باستخدام xp_cmdshell. | ✅ | ✅ | ✅ | ✔️ |
| اسم الوحدة النمطية | الوصف | الانتحال | يتطلب سياقًا مميزًا |
|---|
Users | عرض جميع مستخدمي SCCM. | ✅ | ❎ |
Sites | عرض جميع المواقع الأخرى التي تحتوي على بيانات مخزنة. | ✅ | ❎ |
Logons | عرض جميع عملاء SCCM المرتبطين وآخر مستخدم سجل الدخول. | ✅ | ❎ |
Credentials | عرض بيانات الاعتماد المشفرة المخزنة بواسطة SCCM. | ✅ | ❎ |
TaskList | عرض جميع تسلسلات المهام، ولكن دون الوصول إلى محتويات بيانات المهام. | ✅ | ❎ |
TaskData | فك تشفير جميع تسلسلات المهام إلى نص واضح. | ✅ | ❎ |
DecryptCredentials | فك تشفير كتلة بيانات اعتماد SCCM. يجب تنفيذه في عملية ذات سلامة عالية أو عملية SYSTEM على خادم SCCM. | ❌ | ✔️ |
AddAdmin /user:DOMAIN\USERNAME /sid:SID | رفع حساب مقدم إلى 'مسؤول كامل' في SCCM. | ✅ | ✔️ |
RemoveAdmin /user:ADMIN_ID /remove:STRING | إزالة صلاحيات مستخدم، أو إزالة مستخدم بالكامل من قاعدة بيانات SCCM. | ✅ | ✔️ |
DecryptCredentials فك تشفير كتل بيانات اعتماد SCCM المستردة. يجب تشغيل هذه الوحدة في عملية ذات سلامة عالية أو عملية SYSTEM على خادم SCCM.AddAdmin الحساب المحدد إلى 'مسؤول كامل' داخل SCCM. إذا كان المستخدم المستهدف مستخدم SCCM بالفعل، فستضيف هذه الوحدة بدلاً من ذلك الصلاحيات اللازمة للرفع. قدم وسيطتين، إما /user:current /sid:current إذا كنت تسعى لإضافة المستخدم الذي ينفذ حاليًا عملية SQLRecon كـ'مسؤول كامل' في SCCM. إذا كنت تسعى لإضافة مستخدم آخر كـ'مسؤول كامل' في SCCM، فحدد اسم مستخدم المجال الخاص به ومعرّف SID الكامل /user:DOMAIN\USERNAME /sid:S-1-5-.... تتطلب هذه الوحدة صلاحيات sysadmin أو ما شابه ذلك حيث أن الكتابة إلى جداول قاعدة بيانات SCCM مطلوبة.RemoveAdmin صلاحيات مستخدم عن طريق إزالة مستخدم مضاف حديثًا بالكامل من قاعدة بيانات SCCM. إذا كان المستخدم موجودًا بالفعل بشكل ما، فإن هذه الوحدة تزيل فقط الأدوار الثلاثة التي تمت إضافتها إلى الحساب عبر الكتابة إلى جدول الصلاحيات. استخدم الوسيطات المقدمة من مخرجات أمر sAddAdmin لتشغيل هذا الأمر. تتطلب هذه الوحدة صلاحيات sysadmin أو ما شابه ذلك حيث أن الكتابة إلى جداول قاعدة بيانات SCCM مطلوبة./verbose, /v)، والذي سيعرض جميع استعلامات SQL التي سيتم تنفيذها أثناء تنفيذ الوحدة النمطية./timeout, /t)، والتي تأخذ قيمة عدد صحيح لمهلة اتصال قاعدة بيانات خادم SQL.links لتشمل معلومات مفصلة. الفضل يعود إلى Azaël Martin (n3rada).whoami لتشمل كيانات Windows ومستخدمي قاعدة البيانات. الفضل يعود إلى Azaël Martin (n3rada).impersonation لتشمل كيانات Windows ومستخدمي قاعدة البيانات. الفضل يعود إلى Azaël Martin (n3rada).sqlspns. الفضل يعود إلى Azaël Martin (n3rada)./enum:info./subsystem اختيارية إلى وحدة olecmdexec، والتي تقبل التنفيذ باستخدام الأنظمة الفرعية لأتمتة OLE CmdExec أو PowerShell.AzureAD إلى EntraID.Queries.cs.EnumerationModules.cs.FormatQuery.cs.SccmModules.cs.ModuleHandler.cs إلى SqlModules.cs.PrintUtils.cs إلى Print.cs.SQLServerInfo.cs إلى Info.cs.iQueryiSearchauthentication.Help.cs من طريقة إلى مُنشئ.CaptureHash.cs من طريقة إلى مُنشئ.Impersonate.cs من طريقة إلى مُنشئ.lEnableClr.lDisableClr.lXpCmd.lXpOle.Random.cs.EnableDisable.cs.clr.ole.mapped وroles في whoami.lMapped وlRoles في lWhoami.iMapped وiRoles في iWhoami.