Invoke-TheHash
يحتوي Invoke-TheHash على دوال PowerShell لأداء مهام تمرير التجزئة (pass the hash) لـ WMI و SMB. يتم الوصول إلى اتصالات WMI و SMB عبر .NET TCPClient. يتم إجراء المصادقة عن طريق تمرير تجزئة NTLM إلى بروتوكول مصادقة NTLMv2. ليست هناك حاجة إلى صلاحيات المسؤول المحلي من جانب العميل.
المتطلبات
الحد الأدنى PowerShell 2.0
الاستيراد
Import-Module ./Invoke-TheHash.psd1
أو
. ./Invoke-WMIExec.ps1
. ./Invoke-SMBExec.ps1
. ./Invoke-SMBEnum.ps1
. ./Invoke-SMBClient.ps1
. ./Invoke-TheHash.ps1
الدوال
- Invoke-WMIExec
- Invoke-SMBExec
- Invoke-SMBEnum
- Invoke-SMBClient
- Invoke-TheHash
Invoke-WMIExec
المعاملات:
- Target - اسم المضيف أو عنوان IP للهدف.
- Username - اسم المستخدم المستخدم للمصادقة.
- Domain - المجال المستخدم للمصادقة. هذه المعلمة ليست مطلوبة مع الحسابات المحلية أو عند استخدام @domain بعد اسم المستخدم.
- Hash - تجزئة كلمة مرور NTLM للمصادقة. ستقبل هذه الدالة إما تنسيق LM:NTLM أو NTLM.
- Command - الأمر المراد تنفيذه على الهدف. إذا لم يتم تحديد أمر، ستتحقق الدالة فقط من أن اسم المستخدم والتجزئة لديهما صلاحية الوصول إلى WMI على الهدف.
- Sleep - الافتراضي = 10 مللي ثانية: يحدد قيم Start-Sleep الخاصة بالدالة بالمللي ثانية.
مثال:
Invoke-WMIExec -Target 192.168.100.20 -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Command "command or launcher to execute" -verbose
لقطة شاشة:

Invoke-SMBExec
- دالة تنفيذ أوامر SMB (PsExec) تدعم SMB1 و SMB2.1، مع وبدون توقيع SMB.
المعاملات:
- Target - اسم المضيف أو عنوان IP للهدف.
- Username - اسم المستخدم المستخدم للمصادقة.
- Domain - المجال المستخدم للمصادقة. هذه المعلمة ليست مطلوبة مع الحسابات المحلية أو عند استخدام @domain بعد اسم المستخدم.
- Hash - تجزئة كلمة مرور NTLM للمصادقة. ستقبل هذه الدالة إما تنسيق LM:NTLM أو NTLM.
- Command - الأمر المراد تنفيذه على الهدف. إذا لم يتم تحديد أمر، ستتحقق الدالة فقط من أن اسم المستخدم والتجزئة لديهما صلاحية الوصول إلى SCM على الهدف.
- CommandCOMSPEC - الافتراضي = مفعل: يسبق الأمر بـ %COMSPEC% /C.
- Service - الافتراضي = 20 حرفًا عشوائيًا: اسم الخدمة المراد إنشاؤها وحذفها على الهدف.
- Sleep - الافتراضي = 150 مللي ثانية: يحدد قيم Start-Sleep الخاصة بالدالة بالمللي ثانية.
- Version - الافتراضي = تلقائي: (تلقائي، 1، 2.1) فرض إصدار SMB. السلوك الافتراضي هو إجراء تفاوض على إصدار SMB واستخدام SMB2.1 إذا كان مدعومًا من الهدف.
مثال:
Invoke-SMBExec -Target 192.168.100.20 -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Command "command or launcher to execute" -verbose
مثال:
التحقق من متطلبات توقيع SMB على الهدف.
Invoke-SMBExec -Target 192.168.100.20
لقطة شاشة:

Invoke-SMBEnum
- يقوم Invoke-SMBEnum بمهام تعداد المستخدمين والمجموعات وجلسات NetSession والمشاركات عبر SMB2.1 مع وبدون توقيع SMB.
المعاملات:
- Target - اسم المضيف أو عنوان IP للهدف.
- Username - اسم المستخدم المستخدم للمصادقة.
- Domain - المجال المستخدم للمصادقة. هذه المعلمة ليست مطلوبة مع الحسابات المحلية أو عند استخدام @domain بعد اسم المستخدم.
- Hash - تجزئة كلمة مرور NTLM للمصادقة. ستقبل هذه الدالة إما تنسيق LM:NTLM أو NTLM.
- Action - (الكل، مجموعة، جلسة NetSession، مشاركة، مستخدم) الافتراضي = مشاركة: إجراء التعداد الذي سيتم تنفيذه.
- Group - الافتراضي = المسؤولون: المجموعة المراد تعدادها.
- Sleep - الافتراضي = 150 مللي ثانية: يحدد قيم Start-Sleep الخاصة بالدالة بالمللي ثانية.
- Version - الافتراضي = تلقائي: (تلقائي، 1، 2.1) فرض إصدار SMB. السلوك الافتراضي هو إجراء تفاوض على إصدار SMB واستخدام SMB2.1 إذا كان مدعومًا من الهدف. ملاحظة: فقط التحقق من التوقيع يعمل مع SMB1.
مثال:
Invoke-SMBEnum -Target 192.168.100.20 -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -verbose
لقطة شاشة:

Invoke-SMBClient
- دالة عميل SMB تدعم SMB2.1 وتوقيع SMB. توفر هذه الدالة بشكل أساسي إمكانيات مشاركة ملفات SMB للعمل مع التجزئات التي لا تملك صلاحية تنفيذ الأوامر عن بُعد. يمكن أيضًا استخدام هذه الدالة لمرحلة إعداد الحمولات لاستخدامها مع Invoke-WMIExec و Invoke-SMBExec. لاحظ أن Invoke-SMBClient مبني على .NET TCPClient ولا يستخدم عميل Windows SMB. Invoke-SMBClient أبطأ بكثير من عميل Windows.
المعاملات:
- Username - اسم المستخدم المستخدم للمصادقة.
- Domain - المجال المستخدم للمصادقة. هذه المعلمة ليست مطلوبة مع الحسابات المحلية أو عند استخدام @domain بعد اسم المستخدم.
- Hash - تجزئة كلمة مرور NTLM للمصادقة. ستقبل هذه الدالة إما تنسيق LM:NTLM أو NTLM.
- Action - الافتراضي = قائمة: (قائمة/عودة/حذف/تنزيل/رفع) الإجراء الذي سيتم تنفيذه.
-
- قائمة: يسرد محتويات دليل.
-
- عودة: يسرد محتويات دليل وجميع الدلائل الفرعية.
-
-
-
- رفع: يقوم برفع ملف ويضبط أوقات الإنشاء والوصول وآخر كتابة لتتوافق مع الملف المصدر.
- Source
-
- قائمة وعودة: مسار UNC إلى دليل.
-
-
-
- رفع: ملف للرفع. إذا لم يتم تحديد مسار كامل، يجب أن يكون الملف في الدليل الحالي. عند استخدام مفتاح "Modify"، يجب أن يكون "Source" مصفوفة بايتات.
- Destination
-
-
-
- تنزيل: إذا تم استخدامه، ستكون القيمة هي اسم الملف الجديد للملف الذي تم تنزيله. إذا لم يتم تحديد مسار كامل، سيتم إنشاء الملف في الدليل الحالي.
-
- رفع: مسار UNC للملف الذي تم رفعه. يجب تحديد اسم الملف.
- Modify
-
- قائمة وعودة: ستخرج الدالة كائنًا يتكون من محتويات الدليل.
-
-
- تنزيل: ستخرج الدالة مصفوفة بايتات للملف الذي تم تنزيله بدلاً من كتابة الملف على القرص. يُنصح باستخدام هذا فقط مع الملفات الصغيرة وإرسال المخرجات إلى متغير.
-
- رفع: يرفع مصفوفة بايتات إلى ملف وجهة جديد.
- NoProgress - يمنع عرض شريط تقدم الرفع والتنزيل.
- Sleep - الافتراضي = 100 مللي ثانية: يحدد قيم Start-Sleep الخاصة بالدالة بالمللي ثانية.
- Version - الافتراضي = تلقائي: (تلقائي، 1، 2.1) فرض إصدار SMB. السلوك الافتراضي هو إجراء تفاوض على إصدار SMB واستخدام SMB2.1 إذا كان مدعومًا من الهدف. ملاحظة: فقط التحقق من التوقيع يعمل مع SMB1.
مثال:
سرد محتويات دليل مشاركة جذرية.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Source \\server\share -verbose
مثال:
سرد محتويات مشاركة بشكل عودي بدءًا من الجذر.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Recurse -Source \\server\share
مثال:
سرد محتويات دليل فرعي لمشاركة بشكل عودي وإرجاع المحتويات فقط إلى متغير.
$directory_contents = Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Recurse -Source \\server\share\subdirectory -Modify
مثال:
حذف ملف على مشاركة.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Delete -Source \\server\share\file.txt
مثال:
حذف ملف في الدلائل الفرعية داخل مشاركة.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Delete -Source \\server\share\subdirectory\subdirectory\file.txt
مثال:
تنزيل ملف من مشاركة.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Get -Source \\server\share\file.txt
مثال:
تنزيل ملف من دليل فرعي داخل مشاركة وتعيين اسم ملف جديد.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Get -Source \\server\share\subdirectory\file.txt -Destination file.txt
مثال:
تنزيل ملف من مشاركة إلى متغير مصفوفة بايتات بدلاً من القرص.
$password_file = Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Get -Source \\server\share\file.txt -Modify
مثال:
رفع ملف إلى دليل فرعي لمشاركة.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Put -Source file.exe -Destination \\server\share\subdirectory\file.exe
مثال:
رفع ملف إلى مشاركة من متغير مصفوفة بايتات.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Put -Source $file_byte_array -Destination \\server\share\file.txt -Modify
لقطة شاشة:

Invoke-TheHash
- دالة لتشغيل دوال Invoke-TheHash ضد أهداف متعددة.
المعاملات:
- Type - يحدد دالة Invoke-TheHash المطلوبة. يتم تعيينها إما إلى SMBClient أو SMBEnum أو SMBExec أو WMIExec.
- Target - قائمة بأسماء المضيفين أو عناوين IP أو تدوين CIDR أو نطاقات IP للأهداف.
- TargetExclude - قائمة بأسماء المضيفين أو عناوين IP أو تدوين CIDR أو نطاقات IP لاستبعادها من القائمة أو الأهداف.
- PortCheckDisable - (مفتاح) تعطيل التحقق من منفذ WMI أو SMB. نظرًا لأن هذه الدالة ليست متعددة الخيوط بعد، فإن التحقق من المنفذ يساعد في تسريع الدالة عن طريق التحقق من وجود منفذ WMI أو SMB مفتوح قبل محاولة اتصال TCPClient متزامن كامل.
- PortCheckTimeout - الافتراضي = 100: تعيين مهلة عدم الاستجابة بالمللي ثانية للتحقق من منفذ WMI أو SMB.
- Username - اسم المستخدم المستخدم للمصادقة.
- Domain - المجال المستخدم للمصادقة. هذه المعلمة ليست مطلوبة مع الحسابات المحلية أو عند استخدام @domain بعد اسم المستخدم.
- Hash - تجزئة كلمة مرور NTLM للمصادقة. ستقبل هذه الوحدة إما تنسيق LM:NTLM أو NTLM.
- Command - الأمر المراد تنفيذه على الهدف. إذا لم يتم تحديد أمر، ستتحقق الدالة فقط من أن اسم المستخدم والتجزئة لديهما صلاحية الوصول إلى WMI أو SCM على الهدف.
- CommandCOMSPEC - الافتراضي = مفعل: فقط لنوع SMBExec. يسبق الأمر بـ %COMSPEC% /C.
- Service - الافتراضي = 20 حرفًا عشوائيًا: فقط لنوع SMBExec. اسم الخدمة المراد إنشاؤها وحذفها على الهدف.
- SMB1 - (مفتاح) فرض SMB1. فقط لنوع SMBExec. السلوك الافتراضي هو إجراء تفاوض على إصدار SMB واستخدام SMB2 إذا كان مدعومًا من الهدف.
- Sleep - الافتراضي = WMI 10 مللي ثانية، SMB 150 مللي ثانية: يحدد قيم Start-Sleep الخاصة بالدالة بالمللي ثانية.
مثال:
Invoke-TheHash -Type WMIExec -Target 192.168.100.0/24 -TargetExclude 192.168.100.50 -Username Administrator -Hash F6F38B793DB6A94BA04A52F1D3EE92F0
لقطة شاشة:
