33 KiB
22 - Pentesting SSH/SFTP
जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)!
दूसरे तरीके HackTricks का समर्थन करने के लिए:
- अगर आप अपनी कंपनी का विज्ञापन HackTricks में देखना चाहते हैं या HackTricks को PDF में डाउनलोड करना चाहते हैं तो सब्सक्रिप्शन प्लान देखें!
- आधिकारिक PEASS & HackTricks स्वैग प्राप्त करें
- हमारे विशेष NFTs कलेक्शन, The PEASS Family खोजें
- शामिल हों 💬 डिस्कॉर्ड समूह या टेलीग्राम समूह या मुझे ट्विटर 🐦 @carlospolopm** पर फॉलो** करें।
- अपने हैकिंग ट्रिक्स साझा करें द्वारा PRs सबमिट करके HackTricks और HackTricks Cloud github repos में।
अगर आप हैकिंग करियर में रुचि रखते हैं और अहैकेबल को हैक करना चाहते हैं - हम भर्ती कर रहे हैं! (फ्लूएंट पोलिश लिखित और बोली जानी चाहिए).
{% embed url="https://www.stmcyber.com/careers" %}
मौलिक जानकारी
SSH (Secure Shell या Secure Socket Shell) एक नेटवर्क प्रोटोकॉल है जो एक असुरक्षित नेटवर्क पर कंप्यूटर के साथ एक सुरक्षित कनेक्शन सक्षम करता है। यह दूरस्थ सिस्टम तक पहुंचते समय डेटा की गोपनीयता और अखंडता बनाए रखने के लिए आवश्यक है।
डिफ़ॉल्ट पोर्ट: 22
22/tcp open ssh syn-ack
SSH सर्वर:
- openSSH – OpenBSD SSH, BSD, Linux वितरणों और Windows में शिप होता है जो Windows 10 से शुरू हुआ
- Dropbear – कम मेमोरी और प्रोसेसर संसाधनों वाले वातावरणों के लिए SSH कार्यान्वयन, OpenWrt में शिप होता है
- PuTTY – Windows के लिए SSH कार्यान्वयन, क्लाइंट सामान्यत: उपयोग किया जाता है लेकिन सर्वर का उपयोग अधिक दुर्लभ है
- CopSSH – Windows के लिए OpenSSH का कार्यान्वयन
SSH पुस्तकालय (सर्वर-साइड कार्यान्वयन को कार्यान्वित करना):
- libssh – SSHv2 प्रोटोकॉल को कार्यान्वित करने वाली मल्टीप्लेटफॉर्म सी पुस्तकालय जिसमें Python, Perl और R में बाइंडिंग है; यह KDE द्वारा sftp के लिए और GitHub द्वारा git SSH बुनियाद के लिए उपयोग किया जाता है
- wolfSSH – ANSI C में लिखी गई SSHv2 सर्वर पुस्तकालय जो एम्बेडेड, आरटीओएस, और संसाधन-सीमित वातावरणों के लिए लक्षित है
- Apache MINA SSHD – Apache SSHD जावा पुस्तकालय Apache MINA पर आधारित है
- paramiko – Python SSHv2 प्रोटोकॉल पुस्तकालय
गणना
बैनर ग्रबिंग
nc -vn <IP> 22
स्वचालित ssh-audit
ssh-audit एक टूल है जो ssh सर्वर और क्लाइंट कॉन्फ़िगरेशन की मान्यता की जांच के लिए है।
https://github.com/jtesta/ssh-audit एक अपडेटेड fork है https://github.com/arthepsy/ssh-audit/
विशेषताएँ:
- SSH1 और SSH2 प्रोटोकॉल सर्वर समर्थन;
- SSH क्लाइंट कॉन्फ़िगरेशन का विश्लेषण;
- बैनर पकड़ें, डिवाइस या सॉफ़्टवेयर और ऑपरेटिंग सिस्टम को पहचानें, संपीड़न का पता लगाएं;
- कुंजी-विनिमय, होस्ट-कुंजी, एन्क्रिप्शन और संदेश सत्यापन कोड एल्गोरिदम इकाइयों को इकट्ठा करें;
- एल्गोरिदम सूचना उत्पादन (उपलब्ध कब से, हटा दिया गया/अक्षम, असुरक्षित/कमजोर/पुराना, आदि);
- एल्गोरिदम सिफारिशें उत्पादन (पहचाने गए सॉफ़्टवेयर संस्करण के आधार पर जोड़ें या हटाएं);
- सुरक्षा सूचना उत्पादन (संबंधित मुद्दे, निर्धारित CVE सूची, आदि);
- एल्गोरिदम सूचना के आधार पर SSH संस्करण संगतता का विश्लेषण;
- OpenSSH, Dropbear SSH और libssh से ऐतिहासिक सूचना;
- Linux और Windows पर चलता है;
- कोई निर्भरता नहीं
usage: ssh-audit.py [-1246pbcnjvlt] <host>
-1, --ssh1 force ssh version 1 only
-2, --ssh2 force ssh version 2 only
-4, --ipv4 enable IPv4 (order of precedence)
-6, --ipv6 enable IPv6 (order of precedence)
-p, --port=<port> port to connect
-b, --batch batch output
-c, --client-audit starts a server on port 2222 to audit client
software config (use -p to change port;
use -t to change timeout)
-n, --no-colors disable colors
-j, --json JSON output
-v, --verbose verbose output
-l, --level=<level> minimum output level (info|warn|fail)
-t, --timeout=<secs> timeout (in seconds) for connection and reading
(default: 5)
$ python3 ssh-audit <IP>
सर्वर की सार्वजनिक SSH कुंजी
ssh-keyscan -t rsa <IP> -p <PORT>
कमजोर एन्क्रिप्शन एल्गोरिदम
यह डिफ़ॉल्ट रूप से nmap द्वारा पता चलता है। लेकिन आप sslcan या sslyze का भी उपयोग कर सकते हैं।
Nmap स्क्रिप्ट
nmap -p22 <ip> -sC # Send default nmap scripts for SSH
nmap -p22 <ip> -sV # Retrieve version
nmap -p22 <ip> --script ssh2-enum-algos # Retrieve supported algorythms
nmap -p22 <ip> --script ssh-hostkey --script-args ssh_hostkey=full # Retrieve weak keys
nmap -p22 <ip> --script ssh-auth-methods --script-args="ssh.user=root" # Check authentication methods
शोडन
ssh
ब्रूट फोर्स उपयोगकर्ता नाम, पासवर्ड और निजी कुंजी
उपयोगकर्ता नाम सूचीकरण
कुछ OpenSSH संस्करणों में आप उपयोगकर्ताओं की सूचीकरण के लिए एक समय आक्रमण बना सकते हैं। आप इसे उत्पादित करने के लिए मेटास्प्लॉइट मॉड्यूल का उपयोग कर सकते हैं:
msf> use scanner/ssh/ssh_enumusers
ब्रूट फोर्स
कुछ सामान्य ssh क्रेडेंशियल्स यहाँ और यहाँ और नीचे।
निजी कुंजी ब्रूट फोर्स
अगर आपको कुछ ssh निजी कुंजी पता है जो उपयोग की जा सकती है... तो इसे प्रयास करें। आप nmap स्क्रिप्ट का उपयोग कर सकते हैं:
https://nmap.org/nsedoc/scripts/ssh-publickey-acceptance.html
या MSF अतिरिक्त मॉड्यूल:
msf> use scanner/ssh/ssh_identify_pubkeys
या ssh-keybrute.py
का उपयोग करें (नेटिव पायथन3, हल्का और पुराने एल्गोरिदम सक्षम): snowdroppe/ssh-keybrute.
यहाँ ज्ञात बुरी कुंजी मिल सकती है:
{% embed url="https://github.com/rapid7/ssh-badkeys/tree/master/authorized" %}
कमजोर SSH कुंजी / Debian पूर्वानुमाननीय PRNG
कुछ सिस्टमों में एक्सरोटिक सामग्री उत्पन्न करने के लिए उपयोग किए गए यादृच्छिक बीज में ज्ञात दोष हो सकते हैं। इससे एक द्रुत तालिका कम हो सकती है जिसे ब्रूटफोर्स किया जा सकता है। Debian सिस्टम पर उत्पन्न कमजोर PRNG से प्रभावित सिस्टमों पर पूर्व-उत्पन्न कुंजी के सेट यहाँ उपलब्ध हैं: g0tmi1k/debian-ssh.
आपको यहाँ देखना चाहिए ताकि पीड़ित मशीन के लिए वैध कुंजी खोज सकें।
केरबेरोस
crackmapexec ssh
प्रोटोकॉल का उपयोग करके केरबेरोस के माध्यम से प्रमाणीकरण करने के लिए विकल्प --kerberos
का उपयोग कर सकता है।
अधिक जानकारी के लिए crackmapexec ssh --help
चलाएं।
डिफ़ॉल्ट क्रेडेंशियल्स
विक्रेता | उपयोगकर्ता नाम | पासवर्ड |
---|---|---|
APC | apc, डिवाइस | apc |
Brocade | व्यवस्थापक | admin123, password, brocade, fibranne |
Cisco | व्यवस्थापक, cisco, सक्षम करें, hsa, pix, pnadmin, ripeop, रूट, shelladmin | admin, Admin123, default, password, secur4u, cisco, Cisco, _Cisco, cisco123, C1sco!23, Cisco123, Cisco1234, TANDBERG, change_it, 12345, ipics, pnadmin, diamond, hsadb, c, cc, attack, blender, changeme |
Citrix | रूट, nsroot, nsmaint, vdiadmin, kvm, cli, व्यवस्थापक | C1trix321, nsroot, nsmaint, kaviza, kaviza123, freebsd, public, rootadmin, wanscaler |
D-Link | व्यवस्थापक, उपयोगकर्ता | private, admin, user |
Dell | रूट, उपयोगकर्ता1, व्यवस्थापक, vkernel, cli | calvin, 123456, password, vkernel, Stor@ge!, admin |
EMC | व्यवस्थापक, रूट, सिस्टम प्रशासक | EMCPMAdm7n, Password#1, Password123#, sysadmin, changeme, emc |
HP/3Com | व्यवस्थापक, रूट, vcx, app, spvar, manage, hpsupport, opc_op | admin, password, hpinvent, iMC123, pvadmin, passw0rd, besgroup, vcx, nice, access, config, 3V@rpar, 3V#rpar, procurve, badg3r5, OpC_op, !manage, !admin |
Huawei | व्यवस्थापक, रूट | 123456, admin, root, Admin123, Admin@storage, Huawei12#$, HwDec@01, hwosta2.0, HuaWei123, fsp200@HW, huawei123 |
IBM | USERID, व्यवस्थापक, प्रबंधक, mqm, db2inst1, db2fenc1, dausr1, db2admin, iadmin, सिस्टम, डिवाइस, ufmcli, ग्राहक | PASSW0RD, passw0rd, admin, password, Passw8rd, iadmin, apc, 123456, cust0mer |
Juniper | netscreen | netscreen |
NetApp | व्यवस्थापक | netapp123 |
Oracle | रूट, oracle, oravis, applvis, ilom-admin, ilom-operator, nm2user | changeme, ilom-admin, ilom-operator, welcome1, oracle |
VMware | vi-admin, रूट, hqadmin, vmware, व्यवस्थापक | vmware, vmw@re, hqadmin, default |
SSH-MitM
यदि आप पीड़ित के रूप में स्थानीय नेटवर्क में हैं जो SSH सर्वर से उपयोगकर्ता नाम और पासवर्ड के साथ कनेक्ट होने जा रहा है, तो आप उन क्रेडेंशियल्स को चुराने के लिए MitM हमला करने की कोशिश कर सकते हैं:
हमले का मार्ग:
- ट्रैफिक पुनर्निर्देशन: हमलावर पीड़ित का ट्रैफिक अपनी मशीन पर भटकाता है, वास्तव में SSH सर्वर के लिए कनेक्शन को अंतर्वर्ती करता है।
- अंतर्वर्तीकरण और लॉगिंग: हमलावर की मशीन एक प्रॉक्सी के रूप में काम करती है, उपयोगकर्ता के लॉगिन विवरणों को पकड़ती है जैसे कि वास्तविक SSH सर्वर बनने का दावा करते हुए।
- कमांड निष्पादन और रिले: अंत में, हमलावर की सर्वर उपयोगकर्ता के क्रेडेंशियल्स को लॉग करती है, वास्तविक SSH सर्वर पर कमांड फॉरवर्ड करती है, उन्हें निष्पादित करती है, और परिणाम वापस उपयोगकर्ता को भेजती है, जिससे प्रक्रिया सुगम और वैध लगती है।
SSH MITM उसी को करता है जो ऊपर वर्णित है।
वास्तविक MitM को कैप्चर करने के लिए आप ARP स्पूफिंग, DNS स्पूफिंग जैसी तकनीकों का उपयोग कर सकते हैं या नेटवर्क स्पूफिंग हमलों में वर्णित अन्य तकनीकों का उपयोग कर सकते हैं।
SSH-Snake
यदि आप एक नेटवर्क को चलाना चाहते हैं जिसमें प्राप्त की गई SSH निजी कुंजीयों का उपयोग करके प्रत्येक प्रणाली पर नए होस्ट के लिए प्रत्येक निजी कुंजी का उपयोग करते हैं, तो SSH-Snake आपको आवश्यक है।
SSH-Snake स्वचालित और पुनरावृत्ति करने वाले निम्नलिखित कार्यों को करता है:
- वर्तमान प्रणाली पर, किसी भी SSH निजी कुंजीयों को खोजें,
- वर्तमान प्रणाली पर, उन सभी होस्ट या गंतव्य (उपयोगकर्ता@होस्ट) को खोजें जिन्हें निजी कुंजी स्वीकार कर सकती है,
- खोजी गई सभी गंतव्यों में सभी निजी कुंजीयों का उपयोग करने का प्रयास करें,
- यदि किसी गंतव्य से सफलतापूर्वक कनेक्ट किया जाता है, तो पुनः #1 - #4 चरणों को पुनरावृत्ति करता है।
यह पूरी तरह से स्व-प्रतिलिपि और स्व-प्रसारी है - और पूरी तरह से फाइल रहित है।
कॉन्फ़िग मिसकॉन्फ़िगरेशन
रूट लॉगिन
SSH सर्वरों के लिए डिफ़ॉल्ट रूप से रूट उपयोगकर्ता लॉगिन की अनुमति देना सामान्य है, जो एक महत्वपूर्ण सुरक्षा जोखिम पैदा करता है। रूट लॉगिन को अक्षम करना सर्वर को सुरक्षित करने का एक महत्वपूर्ण कदम है। प्रशासनिक अधिकारों के अनधिकृत पहुंच और ब्रूट फोर्स हमलों को इस परिवर्तन करके कम किया जा सकता है।
OpenSSH में रूट लॉगिन को अक्षम करने के लिए:
- SSH कॉन्फ़िग फ़ाइल को संपादित करें:
sudoedit /etc/ssh/sshd_config
- सेटिंग बदलें
#PermitRootLogin yes
सेPermitRootLogin no
करें। - कॉन्फ़िगरेशन को पुनः लोड करें:
sudo systemctl daemon-reload
- परिवर्तन लागू करने के लिए SSH सर्वर को पुनः आरंभ करें:
sudo systemctl restart sshd
SFTP ब्रूट फोर्स
SFTP कमांड निष्पादन
SFTP सेटअप के साथ एक सामान्य अवधारणा होती है, जहां प्रशासक उपयोगकर्ताओं को दूरस्थ शैली पहुंच सक्षम करने के लिए इच्छुक होते
ssh -v noraj@192.168.1.94 id
...
Password:
debug1: Authentication succeeded (keyboard-interactive).
Authenticated to 192.168.1.94 ([192.168.1.94]:22).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: pledge: network
debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
debug1: Sending command: id
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: client_input_channel_req: channel 0 rtype eow@openssh.com reply 0
uid=1000(noraj) gid=100(users) groups=100(users)
debug1: channel 0: free: client-session, nchannels 1
Transferred: sent 2412, received 2480 bytes, in 0.1 seconds
Bytes per second: sent 43133.4, received 44349.5
debug1: Exit status 0
$ ssh noraj@192.168.1.94 /bin/bash
यहाँ एक सुरक्षित SFTP कॉन्फ़िगरेशन का उदाहरण है (/etc/ssh/sshd_config
- openSSH) उपयोगकर्ता noraj
के लिए:
Match User noraj
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
PermitTunnel no
X11Forwarding no
PermitTTY no
SFTP टनलिंग
यदि आपके पास एक SFTP सर्वर तक पहुंच है तो आप इसके माध्यम से अपना ट्रैफिक टनल कर सकते हैं, उदाहरण के लिए सामान्य पोर्ट फॉरवर्डिंग का उपयोग करके:
sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compromised>
SFTP सिंलिंक
sftp में "symlink" कमांड होता है। इसलिए, अगर आपके पास किसी फोल्डर में writable rights हैं, तो आप other folders/files के symlinks बना सकते हैं। आप शायद एक chroot के अंदर trapped हैं, इसलिए यह आपके लिए specially useful नहीं होगा, लेकिन, अगर आप निर्मित symlink को एक no-chroot service से access कर सकते हैं (उदाहरण के लिए, अगर आप वेब से symlink का उपयोग कर सकते हैं), तो आप web के माध्यम से symlinked files को open कर सकते हैं।
उदाहरण के लिए, एक नए फ़ाइल "froot" से "/" तक एक symlink बनाने के लिए:
sftp> symlink / froot
प्रमाणीकरण विधियाँ
उच्च सुरक्षा वातावरण में केवल कुंजी-आधारित या दो घटक प्रमाणीकरण को सक्षम करना एक सामान्य अभ्यास है बजाय साधारण घटक पासवर्ड आधारित प्रमाणीकरण के। लेकिन अक्सर मजबूत प्रमाणीकरण विधियाँ सक्षम कर दी जाती हैं बिना कमजोर विध
ssh -v 192.168.1.94
OpenSSH_8.1p1, OpenSSL 1.1.1d 10 Sep 2019
...
debug1: Authentications that can continue: publickey,password,keyboard-interactive
उदाहरण के लिए यदि किसी प्रमाणीकरण विफलता सीमा सेट की गई है और आपको कभी पासवर्ड विधि तक पहुंचने का मौका नहीं मिलता, तो आप PreferredAuthentications
विकल्प का उपयोग करके इस विधि का उपयोग करने के लिए बाध्य कर सकते हैं।
ssh -v 192.168.1.94 -o PreferredAuthentications=password
...
debug1: Next authentication method: password
एसएसएच सर्वर कॉन्फ़िगरेशन की समीक्षा करना आवश्यक है ताकि केवल अपेक्षित विधियाँ अधिकृत हों। ग्राहक पर वर्बोज मोड का उपयोग कॉन्फ़िगरेशन की प्रभावकारिता देखने में मदद कर सकता है।
कॉन्फ़िग फ़ाइलें
ssh_config
sshd_config
authorized_keys
ssh_known_hosts
known_hosts
id_rsa
Fuzzing
- https://packetstormsecurity.com/files/download/71252/sshfuzz.txt
- https://www.rapid7.com/db/modules/auxiliary/fuzzers/ssh/ssh_version_2
References
- आप यहाँ https://www.ssh-audit.com/hardening_guides.html पर SSH को मजबूत करने के रोचक गाइड देख सकते हैं।
- https://community.turgensec.com/ssh-hacking-guide
यदि आप हैकिंग करियर में रुचि रखते हैं और अनहैकेबल को हैक करना चाहते हैं - हम भर्ती कर रहे हैं! (फ्लूएंट पोलिश लिखित और बोली जानी चाहिए).
{% embed url="https://www.stmcyber.com/careers" %}
HackTricks Automatic Commands
Protocol_Name: SSH
Port_Number: 22
Protocol_Description: Secure Shell Hardening
Entry_1:
Name: Hydra Brute Force
Description: Need Username
Command: hydra -v -V -u -l {Username} -P {Big_Passwordlist} -t 1 {IP} ssh
Entry_2:
Name: consolesless mfs enumeration
Description: SSH enumeration without the need to run msfconsole
Note: sourced from https://github.com/carlospolop/legion
Command: msfconsole -q -x 'use auxiliary/scanner/ssh/ssh_version; set RHOSTS {IP}; set RPORT 22; run; exit' && msfconsole -q -x 'use scanner/ssh/ssh_enumusers; set RHOSTS {IP}; set RPORT 22; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ssh/juniper_backdoor; set RHOSTS {IP}; set RPORT 22; run; exit'
जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)!
दूसरे तरीके HackTricks का समर्थन करने के लिए:
- अगर आप अपनी कंपनी का विज्ञापन HackTricks में देखना चाहते हैं या HackTricks को PDF में डाउनलोड करना चाहते हैं तो सब्सक्रिप्शन प्लान्स देखें!
- आधिकारिक PEASS & HackTricks स्वैग प्राप्त करें
- हमारे विशेष NFTs संग्रह The PEASS Family की खोज करें
- शामिल हों 💬 डिस्कॉर्ड समूह या टेलीग्राम समूह या मुझे ट्विटर 🐦 @carlospolopm** पर फॉलो** करें।
- अपने हैकिंग ट्रिक्स साझा करें PRs के माध्यम से HackTricks और HackTricks Cloud github repos में सबमिट करके।