hacktricks/network-services-pentesting/pentesting-ssh.md

33 KiB
Raw Blame History

22 - Pentesting SSH/SFTP

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

दूसरे तरीके HackTricks का समर्थन करने के लिए:

अगर आप हैकिंग करियर में रुचि रखते हैं और अहैकेबल को हैक करना चाहते हैं - हम भर्ती कर रहे हैं! (फ्लूएंट पोलिश लिखित और बोली जानी चाहिए).

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

  1. वर्तमान प्रणाली पर, किसी भी SSH निजी कुंजीयों को खोजें,
  2. वर्तमान प्रणाली पर, उन सभी होस्ट या गंतव्य (उपयोगकर्ता@होस्ट) को खोजें जिन्हें निजी कुंजी स्वीकार कर सकती है,
  3. खोजी गई सभी गंतव्यों में सभी निजी कुंजीयों का उपयोग करने का प्रयास करें,
  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 टनलिंग

यदि आपके पास एक 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

References

यदि आप हैकिंग करियर में रुचि रखते हैं और अनहैकेबल को हैक करना चाहते हैं - हम भर्ती कर रहे हैं! (फ्लूएंट पोलिश लिखित और बोली जानी चाहिए).

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