Enumerating SSH with Python

A simple way to use ssh-audit, ssh-keyscan and nmap custom scan with Python

Download as .zip Download as .tar.gz View on GitHub

Home Page

Information

How about performing the inicial enumeration process of an ssh service using only 2 lines and receiving a dictionary with lots of information?

Every time that I had to enumerate an ssh service in Hack The Box, I aways had to follow a certain sequence of steps. After a while, laziness won and I decided to use Python to automate this process.

In this repository I use my another repository to make some custom scans with nmap, so, if you wanna use it, remember to configure my nmap-python functions too, I will explain it later.

Configuration

Make sure to clone this repo with the following command, this command will clone the nmap-python submodule too:

git clone --recurse-submodules -j8 https://github.com/kaio6fellipe/ssh-enum.git

Install ssh-audit:

pip install ssh-audit

By default, Windows and Linux have ssh-keyscan preinstalled, to make sure, execute this line:

ssh-keyscan

Expected output:

❯ ssh-keyscan
usage: ssh-keyscan [-46cDHv] [-f file] [-p port] [-T timeout] [-t type]
                   [host | addrlist namelist]

At the end, install the dependencies of my nmap-python repository, if everything goes right, your folders will be organized that way:

folders

Details

The ssh_enumeration.py file contains one class:

Example

I usually use this class like that:

import ssh_enumeration

# Setting the target and the port
host = '192.168.0.120'
port = 22

# Instantiating the object
enumeration = ssh_enumeration.iniEnumSSH(host, port)
# Executing the start() method
enumeration.start()

# Getting the result dict
dict = enumeration.get_dict()
print(dict)

This example will generete the following output after the scan that I did on the metasploitable machine:

{
   "host":"192.168.0.120",
   "(gen) banner":"SSH-2.0-OpenSSH_4.7p1 Debian-8ubuntu1",
   "(gen) software":"OpenSSH 4.7p1",
   "(gen) compatibility":"OpenSSH 4.7-6.6, Dropbear SSH 0.53+ (some functionality from 0.52)",
   "(gen) compression":"enabled (zlib@openssh.com)",
   "(cve) CVE-2018-15473":"(CVSSv2: 5.3) enumerate usernames due to timing discrepencies",
   "(cve) CVE-2016-3115 ":"(CVSSv2: 5.5) bypass command restrictions via crafted X11 forwarding data",
   "(cve) CVE-2014-1692 ":"(CVSSv2: 7.5) cause DoS via triggering error condition (memory corruption)",
   "(cve) CVE-2012-0814 ":"(CVSSv2: 3.5) leak data via debug messages",
   "(cve) CVE-2011-5000 ":"(CVSSv2: 3.5) cause DoS via large value in certain length field (memory consumption)",
   "(cve) CVE-2010-5107 ":"(CVSSv2: 5.0) cause DoS via large number of connections (slot exhaustion)",
   "(cve) CVE-2010-4755 ":"(CVSSv2: 4.0) cause DoS via crafted glob expression (CPU and memory consumption)",
   "(cve) CVE-2010-4478 ":"(CVSSv2: 7.5) bypass authentication check via crafted values",
   "(cve) CVE-2009-2904 ":"(CVSSv2: 6.9) privilege escalation via hard links to setuid programs",
   "(cve) CVE-2008-5161 ":"(CVSSv2: 2.6) recover plaintext data from ciphertext",
   "(cve) CVE-2008-1657 ":"(CVSSv2: 6.5) bypass command restrictions via modifying session file",
   "(cve) CVE-2008-1483 ":"(CVSSv2: 6.9) hijack forwarded X11 connections",
   "(kex) diffie-hellman-group-exchange-sha256 (1024-bit) ":"[fail] using small 1024-bit modulus",
   "(kex) diffie-hellman-group-exchange-sha1 (1024-bit) ":"[fail] using small 1024-bit modulus",
   "(kex) diffie-hellman-group14-sha1 ":"[warn] using weak hashing algorithm",
   "(kex) diffie-hellman-group1-sha1":"[fail] using small 1024-bit modulus",
   "`- [fail] removed (in server) since OpenSSH 6.7, unsafe algorith":"                                          `- [fail] removed (in server) since OpenSSH 6.7, unsafe algorithm",
   "`- [fail] disabled (in client) since OpenSSH 7.0, logjam attac":"                                          `- [fail] disabled (in client) since OpenSSH 7.0, logjam attack",
   "(key) ssh-rsa (2048-bit)":"[fail] using weak hashing algorithm",
   "(key) ssh-dss ":"[fail] using small 1024-bit modulus",
   "`- [fail] removed (in server) and disabled (in client) since OpenSSH 7.0, weak algorith":"                                          `- [fail] removed (in server) and disabled (in client) since OpenSSH 7.0, weak algorithm",
   "(enc) aes128-cbc":"[fail] removed (in server) since OpenSSH 6.7, unsafe algorithm",
   "(enc) 3des-cbc":"[fail] removed (in server) since OpenSSH 6.7, unsafe algorithm",
   "`- [warn] disabled (in client) since OpenSSH 7.4, unsafe algorith":"                                          `- [warn] disabled (in client) since OpenSSH 7.4, unsafe algorithm",
   "(enc) blowfish-cbc":"[fail] removed (in server) since OpenSSH 6.7, unsafe algorithm",
   "`- [warn] disabled (in client) since OpenSSH 7.2, legacy algorith":"                                          `- [warn] disabled (in client) since OpenSSH 7.2, legacy algorithm",
   "(enc) cast128-cbc ":"[fail] removed (in server) since OpenSSH 6.7, unsafe algorithm",
   "(enc) arcfour128":"[fail] removed (in server) since OpenSSH 6.7, unsafe algorithm",
   "(enc) arcfour256":"[fail] removed (in server) since OpenSSH 6.7, unsafe algorithm",
   "(enc) arcfour ":"[fail] removed (in server) since OpenSSH 6.7, unsafe algorithm",
   "(enc) aes192-cbc":"[fail] removed (in server) since OpenSSH 6.7, unsafe algorithm",
   "(enc) aes256-cbc":"[fail] removed (in server) since OpenSSH 6.7, unsafe algorithm",
   "(enc) rijndael-cbc@lysator.liu.se ":"[fail] removed (in server) since OpenSSH 6.7, unsafe algorithm",
   "(enc) aes128-ctr":"[info] available since OpenSSH 3.7, Dropbear SSH 0.52",
   "(enc) aes192-ctr":"[info] available since OpenSSH 3.7",
   "(enc) aes256-ctr":"[info] available since OpenSSH 3.7, Dropbear SSH 0.52",
   "(mac) hmac-md5":"[fail] removed (in server) since OpenSSH 6.7, unsafe algorithm",
   "(mac) hmac-sha1 ":"[warn] using encrypt-and-MAC mode",
   "(mac) umac-64@openssh.com ":"[warn] using encrypt-and-MAC mode",
   "(mac) hmac-ripemd160":"[fail] removed (in server) since OpenSSH 6.7, unsafe algorithm",
   "(mac) hmac-ripemd160@openssh.com":"[fail] removed (in server) since OpenSSH 6.7, unsafe algorithm",
   "(mac) hmac-sha1-96":"[fail] removed (in server) since OpenSSH 6.7, unsafe algorithm",
   "(mac) hmac-md5-96 ":"[fail] removed (in server) since OpenSSH 6.7, unsafe algorithm",
   "(fin) ssh-rsa":"SHA256:BQHm5EoHX9GCiOLuVscegPXLQOsuPs+E9d/rrJB84rk",
   "(rec) !diffie-hellman-group-exchange-sha256 ":"kex algorithm to change (increase modulus size to 2048 bits or larger) ",
   "(rec) -3des-cbc ":"enc algorithm to remove ",
   "(rec) -aes128-cbc ":"enc algorithm to remove ",
   "(rec) -aes192-cbc ":"enc algorithm to remove ",
   "(rec) -aes256-cbc ":"enc algorithm to remove ",
   "(rec) -arcfour":"enc algorithm to remove ",
   "(rec) -arcfour128 ":"enc algorithm to remove ",
   "(rec) -arcfour256 ":"enc algorithm to remove ",
   "(rec) -blowfish-cbc ":"enc algorithm to remove ",
   "(rec) -cast128-cbc":"enc algorithm to remove ",
   "(rec) -diffie-hellman-group-exchange-sha1 ":"kex algorithm to remove ",
   "(rec) -diffie-hellman-group1-sha1 ":"kex algorithm to remove ",
   "(rec) -hmac-md5 ":"mac algorithm to remove ",
   "(rec) -hmac-md5-96":"mac algorithm to remove ",
   "(rec) -hmac-ripemd160 ":"mac algorithm to remove ",
   "(rec) -hmac-ripemd160@openssh.com ":"mac algorithm to remove ",
   "(rec) -hmac-sha1-96 ":"mac algorithm to remove ",
   "(rec) -rijndael-cbc@lysator.liu.se":"enc algorithm to remove ",
   "(rec) -ssh-dss":"key algorithm to remove ",
   "(rec) -ssh-rsa":"key algorithm to remove ",
   "(rec) -diffie-hellman-group14-sha1":"kex algorithm to remove ",
   "(rec) -hmac-sha1":"mac algorithm to remove ",
   "(rec) -umac-64@openssh.com":"mac algorithm to remove ",
   "(fin) public ssh-rsa":"AAAAB3NzaC1yc2EAAAABIwAAAQEAstqnuFMBOZvO3WTEjP4TUdjgWkIVNdTq6kboEDjteOfc65TlI7sRvQBwqAhQjeeyyIk8T55gMDkOD0akSlSXvLDcmcdYfxeIF0ZSuT+nkRhij7XSSA/Oc5QSk3sJ/SInfb78e3anbRHpmkJcVgETJ5WhKObUNf1AKZW++4Xlc63M4KI5cjvMMIPEVOyR3AKmI78Fo3HJjYucg87JjLeC66I7+dlEYX6zT8i1XYwa/L1vZ3qSJISGVu8kRPikMv/cNSvki4j+qDYyZ2E5497W87+Ed46/8P42LNGoOV8OcX/ro6pAcbEPUdUEfkJrqi2YXbhvwIJ0gFMb6wfe5cnQew==",
   "nmap1":"-p22 -sC -sV",
   "info1":{
      "port":22,
      "state":"open",
      "reason":"syn-ack",
      "name":"ssh",
      "product":"OpenSSH",
      "version":"4.7p1 Debian 8ubuntu1",
      "extrainfo":"protocol 2.0",
      "conf":"10",
      "cpe":"cpe:/o:linux:linux_kernel",
      "script":{
         "ssh-hostkey":"\n  1024 60:0f:cf:e1:c0:5f:6a:74:d6:90:24:fa:c4:d5:6c:cd (DSA)\n  2048 56:56:24:0f:21:1d:de:a7:2b:ae:61:b1:24:3d:e8:f3 (RSA)"
      }
   },
   "nmap2":"-p22 --script ssh2-enum-algos",
   "info2":{
      "port":22,
      "state":"open",
      "reason":"syn-ack",
      "name":"ssh",
      "product":"",
      "version":"",
      "extrainfo":"",
      "conf":"3",
      "cpe":"",
      "script":{
         "ssh2-enum-algos":"\n  kex_algorithms: (4)\n      diffie-hellman-group-exchange-sha256\n      diffie-hellman-group-exchange-sha1\n      diffie-hellman-group14-sha1\n      diffie-hellman-group1-sha1\n  server_host_key_algorithms: (2)\n      ssh-rsa\n      ssh-dss\n  encryption_algorithms: (13)\n      aes128-cbc\n      3des-cbc\n      blowfish-cbc\n      cast128-cbc\n      arcfour128\n      arcfour256\n      arcfour\n      aes192-cbc\n      aes256-cbc\n      rijndael-cbc@lysator.liu.se\n      aes128-ctr\n      aes192-ctr\n      aes256-ctr\n  mac_algorithms: (7)\n      hmac-md5\n      hmac-sha1\n      umac-64@openssh.com\n      hmac-ripemd160\n      hmac-ripemd160@openssh.com\n      hmac-sha1-96\n      hmac-md5-96\n  compression_algorithms: (2)\n      none\n      zlib@openssh.com"
      }
   },
   "nmap3":"-p22 --script ssh-hostkey --script-args ssh_hostkey=full",
   "info3":{
      "port":22,
      "state":"open",
      "reason":"syn-ack",
      "name":"ssh",
      "product":"",
      "version":"",
      "extrainfo":"",
      "conf":"3",
      "cpe":"",
      "script":{
         "ssh-hostkey":"\n  ssh-dss AAAAB3NzaC1kc3MAAACBALz4hsc8a2Srq4nlW960qV8xwBG0JC+jI7fWxm5METIJH4tKr/xUTwsTYEYnaZLzcOiy21D3ZvOwYb6AA3765zdgCd2Tgand7F0YD5UtXG7b7fbz99chReivL0SIWEG/E96Ai+pqYMP2WD5KaOJwSIXSUajnU5oWmY5x85sBw+XDAAAAFQDFkMpmdFQTF+oRqaoSNVU7Z+hjSwAAAIBCQxNKzi1TyP+QJIFa3M0oLqCVWI0We/ARtXrzpBOJ/dt0hTJXCeYisKqcdwdtyIn8OUCOyrIjqNuA2QW217oQ6wXpbFh+5AQm8Hl3b6C6o8lX3Ptw+Y4dp0lzfWHwZ/jzHwtuaDQaok7u1f971lEazeJLqfiWrAzoklqSWyDQJAAAAIA1lAD3xWYkeIeHv/R3P9i+XaoI7imFkMuYXCDTq843YU6Td+0mWpllCqAWUV/CQamGgQLtYy5S0ueoks01MoKdOMMhKVwqdr08nvCBdNKjIEd3gH6oBk/YRnjzxlEAYBsvCmM4a0jmhz0oNiRWlc/F+bkUeFKrBx/D2fdfZmhrGg==\n  ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAstqnuFMBOZvO3WTEjP4TUdjgWkIVNdTq6kboEDjteOfc65TlI7sRvQBwqAhQjeeyyIk8T55gMDkOD0akSlSXvLDcmcdYfxeIF0ZSuT+nkRhij7XSSA/Oc5QSk3sJ/SInfb78e3anbRHpmkJcVgETJ5WhKObUNf1AKZW++4Xlc63M4KI5cjvMMIPEVOyR3AKmI78Fo3HJjYucg87JjLeC66I7+dlEYX6zT8i1XYwa/L1vZ3qSJISGVu8kRPikMv/cNSvki4j+qDYyZ2E5497W87+Ed46/8P42LNGoOV8OcX/ro6pAcbEPUdUEfkJrqi2YXbhvwIJ0gFMb6wfe5cnQew=="
      }
   },
   "nmap4":"-p22 --script ssh-auth-methods --script-args=\"ssh.user=root\"",
   "info4":{
      "port":22,
      "state":"open",
      "reason":"syn-ack",
      "name":"ssh",
      "product":"",
      "version":"",
      "extrainfo":"",
      "conf":"3",
      "cpe":"",
      "script":{
         "ssh-auth-methods":"\n  Supported authentication methods: \n    publickey\n    password"
      }
   }
}