22 - Pentesting SSH/SFTP

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

बग बाउंटी टिप: Intigriti के लिए साइन अप करें, एक प्रीमियम बग बाउंटी प्लेटफॉर्म जो हैकर्स द्वारा बनाई गई है! आज हमारे साथ शामिल हों https://go.intigriti.com/hacktricks और शुरू करें बाउंटी कमाना जो तक $100,000 तक हो सकता है!

मूल जानकारी

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 https://github.com/arthepsy/ssh-audit/ से एक अपडेटेड fork है।

विशेषताएँ:

  • 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.

यहाँ ज्ञात बुरी कुंजी मिल सकती है:

कमजोर 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 स्वचालित और पुनरावृत्ति करने वाले निम्नलिखित कार्यों को करता है:

  1. वर्तमान सिस्टम पर, किसी भी SSH निजी कुंजियों को खोजें,

  2. वर्तमान सिस्टम पर, उन सभी होस्ट या गंतव्य (उपयोगकर्ता@होस्ट) को खोजें जिन्हें निजी कुंजियाँ स्वीकार की जा सकती हैं,

  3. प्राप्त सभी गंतव्यों में SSH करने की कोशिश करें जिनमें पाए गए सभी निजी कुंजियाँ,

  4. यदि किसी गंतव्य से सफलतापूर्वक कनेक्ट किया जाता है, तो पुनः #1 - #4 चरणों को पुनरावृत्ति करता है।

यह पूरी तरह से स्व-प्रतियांत्रित और स्व-प्रसारी है - और पूरी तरह से फाइल रहित है।

कॉन्फ़िग मिसकॉन्फ़िगरेशन

रूट लॉगिन

SSH सर्वरों के लिए डिफ़ॉल्ट रूप से रूट उपयोगकर्ता लॉगिन की अनुमति देना सामान्य है, जो एक महत्वपूर्ण सुरक्षा जोखिम पैदा करता है। रूट लॉगिन को अक्षम करना सर्वर को सुरक्षित करने का एक महत्वपूर्ण कदम है। प्रशासनिक विशेषाधिकारों के अनधिकृत पहुंच और ब्रूट फोर्स हमलों को इस परिवर्तन के माध्यम से कम किया जा सकता है।

OpenSSH में रूट लॉगिन को अक्षम करने के लिए:

  1. SSH कॉन्फ़िग फ़ाइल को संपादित करें: sudoedit /etc/ssh/sshd_config

  2. सेटिंग बदलें #PermitRootLogin yes से PermitRootLogin no करें।

  3. कॉन्फ़िगरेशन को पुनः लोड करें: sudo systemctl daemon-reload

  4. परिवर्तन लागू करने के लिए 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 को अनुमति देगा: शेल एक्सेस को बंद करके स्टार्ट कमांड को मजबूर करना और TTY एक्सेस को बंद करना लेकिन सभी प्रकार के पोर्ट फॉरवर्डिंग या टनलिंग को भी बंद करना।

SFTP टनलिंग

यदि आपके पास एक SFTP सर्वर तक पहुंच है तो आप इसके माध्यम से अपना ट्रैफ़िक टनल कर सकते हैं, उदाहरण के लिए सामान्य पोर्ट फॉरवर्डिंग का उपयोग करके।

sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compromised>

SFTP सिंलिंक

sftp में "symlink" कमांड होता है। इसलिए, अगर किसी फोल्डर में writable rights हैं, तो आप अन्य फोल्डर/फाइलों के symlinks बना सकते हैं। आप शायद chroot में phase गए हों, इसलिए यह आपके लिए विशेष रूप से उपयोगी नहीं होगा, लेकिन, अगर आप no-chroot सेवा से बनाए गए symlink तक पहुंच सकते हैं (उदाहरण के लिए, अगर आप वेब से symlink तक पहुंच सकते हैं), तो आप वेब के माध्यम से symlinked फाइलों को खोल सकते हैं

उदाहरण के लिए, एक symlink बनाने के लिए नए फाइल "froot" से "/" की ओर:

sftp> symlink / froot

प्रमाणीकरण विधियाँ

उच्च सुरक्षा वातावरण में केवल कुंजी-आधारित या दो घटक प्रमाणीकरण को सक्षम करना एक सामान्य अभ्यास है बजाय साधारण घटक पासवर्ड आधारित प्रमाणीकरण के। लेकिन अक्सर मजबूत प्रमाणीकरण विधियाँ सक्षम कर दी जाती हैं बिना कमजोर विधियाँ को निष्क्रिय किये। एक आम मामला है openSSH कॉन्फ़िगरेशन पर publickey को सक्षम करना और इसे डिफ़ॉल्ट विधि के रूप में सेट करना लेकिन password को निष्क्रिय न करना। इसलिए SSH क्लाइंट के वर्बोस मोड का उपयोग करके एक हमलावता देख सकता है कि एक कमजोर विधि सक्षम है:

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

References

बग बाउंटी टिप: Intigriti में साइन अप करें, एक प्रीमियम बग बाउंटी प्लेटफॉर्म जो हैकर्स द्वारा बनाया गया है! हमारे साथ शामिल हों https://go.intigriti.com/hacktricks आज ही, और शुरू करें बाउंटी कमाना तक $100,000 तक!

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 का समर्थन करने के लिए:

Last updated