
شيل WinRM أصلي بلغة Nim مع NTLM وKerberos ونقل الملفات وأدوات مساعدة في الذاكرة وتقارير AD/OPSEC

nimrm مخصص للإدارة القانونية واختبار الأمان والبحث على الأنظمة التي تملكها أو لديك إذن صريح بالوصول إليها. المؤلف غير مسؤول عن سوء الاستخدام أو الأضرار الناجمة عن هذه الأداة.
يوفر nimrm قشرة WinRM مدمجة وسريعة مع أدوات عملية للمصادقة وتنفيذ الأوامر والنقل وإعداد التقارير. وهو مبنٍ كملف ثنائي Nim أصلي دون أي تبعيات لحزم Nim.
| المجال | الدعم |
|---|---|
| المصادقة | كلمة مرور NTLM، تجزئة NTLM، Kerberos عبر KRB5CCNAME |
| نقل WinRM | HTTP، HTTPS/TLS، منفذ مخصص |
| القشرة | PowerShell تفاعلية، بادئة CMD، وضع الأوامر لمرة واحدة، إكمال تلقائي للأوامر والمسارات المحلية |
| النقل | رفع/تنزيل الملفات، نقل تكراري للدلائل، ترحيل الملفات والدلائل عن بُعد بين الجلسات |
| في الذاكرة | استيراد سكربتات PowerShell، تنفيذ تجميعات .NET المُدارة |
| إعداد التقارير | سياق AD/النطاق، وضع تسجيل السجلات والتدقيق |
| الموثوقية | تغليف رسائل Kerberos، معالجة إعادة تعيين/إعادة محاولة النقل |
| المكوّن | المتطلب |
|---|---|
| البناء | Nim >= 1.6.0 |
| Kerberos | libgssapi_krb5.so.2 على Linux أو libgssapi_krb5.dylib على macOS |
| بناء TLS | OpenSSL و -d:ssl |
| الهدف | WinRM يمكن الوصول إليه على المنفذ المحدد |
عبر Nimble:
nimble install nimrm
تنزيل أحدث إصدار:
curl -L -o nimrm https://github.com/blue0x1/nimrm/releases/latest/download/nimrm
chmod +x nimrm
ملف ثنائي لإصدار Windows:
Invoke-WebRequest -Uri https://github.com/blue0x1/nimrm/releases/latest/download/nimrm.exe -OutFile nimrm.exe
حزمة Debian:
curl -L -o nimrm_1.2.0_amd64.deb https://github.com/blue0x1/nimrm/releases/latest/download/nimrm_1.2.0_amd64.deb
sudo dpkg -i nimrm_1.2.0_amd64.deb
عبر BlackArch:
sudo pacman -S nimrm
يتتبع PKGBUILD الخاص بـ BlackArch أحدث التزام في مستودع المصدر، لذلك تصل الإصدارات الجديدة إلى مستخدمي BlackArch عند تحديث نظامهم التالي. إذا كان nimrm مثبتًا بالفعل، فقم بترقيته باستخدام:
sudo pacman -Syu nimrm
البناء من المصدر:
git clone https://github.com/blue0x1/nimrm.git
cd nimrm
make linux
make linux
make ssl
make windows
بناء يدوي:
nim c -d:release --opt:speed -o:nimrm nimrm.nim
تم تصميم nimrm ليبقى سريعًا باستخدام ملف ثنائي Nim أصلي، ومساحة تشغيل WinRM دائمة، ومنطق نقل مجزأ، وعرض تقدم مدمج.
| العملية | التنفيذ |
|---|---|
| الرفع | كتابات Base64 مجزأة مع إعادة محاولة تكيفية للأظرف الكبيرة |
| التنزيل | أجزاء Base64 متدفقة مع تتبع التقدم ومسار سريع للملفات الصغيرة |
| ترحيل الجلسة البعيدة | يقرأ من جلسة WinRM ويكتب إلى أخرى عبر ذاكرة المتحكم دون كتابة الملف على القرص المحلي |
| نقل الدلائل | تعداد تكراري للملفات باستخدام مسار النقل المجزأ نفسه |
| تنفيذ الأوامر | يعيد استخدام قشرة/مساحة تشغيل WinRM النشطة بدلاً من إعادة الاتصال لكل أمر |
كلمة مرور NTLM:
./nimrm -T 192.168.1.10 -A 'CORP\administrator' -P 'Password123'
تمرير التجزئة NTLM (pass-the-hash):
./nimrm -T 192.168.1.10 -A 'CORP\user' -N aad3b435b51404eeaad3b435b51404ee:0123456789abcdef0123456789abcdef
Kerberos:
KRB5CCNAME=FILE:/tmp/user.ccache ./nimrm -k -T dc01.corp.local -Z CORP.LOCAL
فرض تشفير رسائل NTLM عبر HTTP:
./nimrm -T 192.168.1.10 -A 'CORP\user' -P 'Password123' --seal
منفذ مخصص:
./nimrm -T 192.168.1.10 -A 'CORP\user' -P 'Password123' -p 5985
أمر لمرة واحدة:
./nimrm -T 192.168.1.10 -A 'CORP\user' -P 'Password123' -c 'whoami'
تخطي التحقق من شهادة TLS (الشهادات الموقعة ذاتيًا):
./nimrm -T 192.168.1.10 -A 'CORP\user' -P 'Password123' --tls --insecure
| الخيار | الوصف |
|---|---|
-T, --target | عنوان IP أو اسم المضيف الهدف |
-A, --account | اسم المستخدم: user أو user@domain أو DOMAIN\user |
-P, --secret | كلمة مرور NTLM |
-p, --port | منفذ WinRM |
-N, --nt-proof | تجزئة NT أو تجزئة LM:NT |
-Z, --krb-zone | تجاوز نطاق Kerberos |
-K, --kerb-spn | تجاوز SPN الخاص بـ Kerberos |
-k, --kerb | استخدام مصادقة Kerberos |
-c, --command | تنفيذ أمر واحد ثم الخروج |
--tls | استخدام HTTPS/TLS |
--insecure | تخطي التحقق من شهادة TLS |
-h, --help | إظهار المساعدة |
| الأمر | الوصف |
|---|---|
/help | إظهار المساعدة |
exit, quit | إغلاق القشرة |
!<cmd> | التشغيل عبر cmd.exe |
upload <local> [remote] | رفع ملف واحد |
download <remote> [local] | تنزيل ملف واحد |
rupload <remote> <session> [dest] | نسخ ملف بعيد من الجلسة النشطة إلى جلسة أخرى عبر الذاكرة |
rdownload <session> <remote> [dest] | نسخ ملف بعيد من جلسة أخرى إلى الجلسة النشطة عبر الذاكرة |
rupload-dir <remote> <session> [dest] | نسخ دليل بعيد من الجلسة النشطة إلى جلسة أخرى عبر الذاكرة |
rdownload-dir <session> <remote> [dest] | نسخ دليل بعيد من جلسة أخرى إلى الجلسة النشطة عبر الذاكرة |
upload-dir <local> [remote] | رفع دليل |
download-dir <remote> [local] | تنزيل دليل |
invoke-script <ps1> [args] | استيراد PowerShell محلي من الذاكرة |
execute-assembly <exe> [args] | تشغيل .NET مُدار من الذاكرة |
ad-info | إظهار سياق AD/النطاق |
opsec-check | إظهار وضع تسجيل السجلات والتدقيق |
sessions | سرد جميع الجلسات النشطة |
session <opts> | إنشاء جلسة جديدة |
use <name|id> | التبديل إلى جلسة |
kill <name|id> | إغلاق وإزالة جلسة |
يدعم nimrm جلسات WinRM متعددة ومتزامنة. يمكنك التنقل بين مضيفين ومستخدمين مختلفين دون مغادرة القشرة.
إنشاء جلسة جديدة من داخل جلسة حالية:
PS C:\Users\Administrator> session -T 10.0.0.5 -A 'CORP\user2' -P 'Pass123'
PS C:\Users\Administrator> session -T dc02.corp.local -A [email protected] -N aad3b435:0123456789abcdef -n dc02
PS C:\Users\Administrator> session -T dc03.corp.local -k -Z CORP.LOCAL -n dc03
سرد الجلسات النشطة:
PS C:\Users\Administrator> sessions
ID Name Target User Auth
-- ---- ------ ---- ----
* 1 session-1 dc01.corp.local:5985 administrator Kerberos
2 session-2 10.0.0.5:5985 user2 NTLM
3 dc02 dc02.corp.local:5985 user NTLM
التبديل بين الجلسات:
[session-2] PS C:\Users\user2> use 1
[*] Switched to session: session-1 (dc01.corp.local:5985)
[session-1] PS C:\Users\Administrator> use dc02
[*] Switched to session: dc02 (dc02.corp.local:5985)
إغلاق جلسة:
[dc02] PS C:\Users\user> kill 2
[*] Killed session: session-2
نسخ الملفات بين الجلسات النشطة:
[session-1] PS C:\Users\user1> rupload C:\Users\user1\tool.exe session-2 C:\Users\user2\Desktop\tool.exe
[*] Download mode: WinRS binary stream
✔ rupload-read [━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━] 100% 442.0 KB/442.0 KB done in 0.7s
[*] Upload mode: WinRS stream
✔ rupload-write [━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━] 100% 442.0 KB/442.0 KB done in 0.4s
[+] Remote uploaded 452608 bytes from session-1:C:\Users\user1\tool.exe to session-2:C:\Users\user2\Desktop\tool.exe
[session-1] PS C:\Users\user1> rdownload session-2 C:\Users\user2\Desktop\out.txt C:\Users\user1\out.txt
[+] Remote downloaded 1024 bytes from session-2:C:\Users\user2\Desktop\out.txt to session-1:C:\Users\user1\out.txt
تستخدم rupload و rupload-dir الجلسة النشطة كمصدر والجلسة المسماة كوجهة. بينما تستخدم rdownload و rdownload-dir الجلسة المسماة كمصدر والجلسة النشطة كوجهة. تقوم هذه الأوامر بترحيل البايتات عبر ذاكرة nimrm، لذلك لا يكتب مضيف التحكم نسخة مؤقتة على القرص.
خيارات الجلسة:
| الخيار | الوصف |
|---|---|
-T | المضيف الهدف |
-A | اسم المستخدم |
-P | كلمة المرور |
-N | تجزئة NT |
-k | مصادقة Kerberos |
-Z | نطاق Kerberos |
-K | تجاوز SPN |
-p | المنفذ |
--tls | استخدام HTTPS |
-n | اسم جلسة مخصص |
PowerShell و CMD:
PS> hostname
PS> Get-Process
PS> !ipconfig /all
عمليات النقل:
PS> upload ./tool.exe C:\Temp\tool.exe
PS> download C:\Temp\out.txt ./out.txt
PS> rupload C:\Temp\tool.exe session-2 C:\Temp\tool.exe
PS> rdownload session-2 C:\Temp\out.txt C:\Temp\out.txt
PS> rupload-dir C:\Temp\logs session-2 C:\Temp\logs
PS> rdownload-dir session-2 C:\Temp\loot C:\Temp\loot
PS> upload-dir ./payloads C:\Temp\payloads
PS> download-dir C:\Temp\logs ./logs
اتجاه ترحيل الجلسة البعيدة:
# Active session -> another session
PS> rupload C:\Temp\payload.exe session-2 C:\Users\Public\payload.exe
# Another session -> active session
PS> rdownload session-2 C:\Users\Public\loot.zip C:\Temp\loot.zip
الإكمال التلقائي:
PS> upl<Tab>
PS> upload ./pay<Tab>
تكمل المطالبة التفاعلية أسماء الأوامر ومسارات نظام الملفات المحلي للأوامر ذات المصدر المحلي مثل upload و upload-dir و invoke-script و execute-assembly.
أدوات المساعدة في الذاكرة:
PS> invoke-script ./AdminTools.ps1
PS> execute-assembly ./tool.exe arg1 arg2
إعداد التقارير:
PS> ad-info
PS> opsec-check
execute-assembly تجميعات .NET المُدارة فقط.invoke-script إلى مساحة التشغيل البعيدة الحالية.rupload و rdownload و rupload-dir و rdownload-dir ملفات مؤقتة على مضيف التحكم، ولكن البايتات ما تزال تمر عبر ذاكرة المتحكم وتستخدم مسارَي نقل WinRM.ad-info و opsec-check أمران للتقارير للقراءة فقط.MIT. انظر LICENSE.