Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions freebsd_ssh_banners.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
-- freebsd_banners.lua
return {
["20240806"] = { release = "14.2-RELEASE", openssh = "9.7", banner = "SSH-2.0-OpenSSH_9.7 FreeBSD-20240806" },
["20240318"] = { release = "14.1-RELEASE", openssh = "9.7", banner = "SSH-2.0-OpenSSH_9.7 FreeBSD-20240318" },
["20231004"] = { release = "14.0-RELEASE", openssh = "9.5", banner = "SSH-2.0-OpenSSH_9.5 FreeBSD-20231004" },
["20250219"] = { release = "13.5-RELEASE", openssh = "9.9", banner = "SSH-2.0-OpenSSH_9.9 FreeBSD-20250219" },
["20230316"] = { release = "13.2-RELEASE", openssh = "9.3", banner = "SSH-2.0-OpenSSH_9.3 FreeBSD-20230316" },
["20211221"] = { release = "13.1-RELEASE", openssh = "8.8", banner = "SSH-2.0-OpenSSH_8.8 FreeBSD-20211221" },
["20200214"] = { release = "13.0/12.2/12.3-RELEASE", openssh = "7.9", banner = "SSH-2.0-OpenSSH_7.9 FreeBSD-20200214" },
["20221019"] = { release = "12.4-RELEASE", openssh = "9.1", banner = "SSH-2.0-OpenSSH_9.1 FreeBSD-20221019" },
["20180909"] = { release = "12.0/12.1-RELEASE", openssh = "7.8", banner = "SSH-2.0-OpenSSH_7.8 FreeBSD-20180909" },
["20170903"] = { release = "11.2/11.3-RELEASE", openssh = "7.5", banner = "SSH-2.0-OpenSSH_7.5 FreeBSD-20170903" },
["20161230"] = { release = "11.1-RELEASE", openssh = "7.2", banner = "SSH-2.0-OpenSSH_7.2 FreeBSD-20161230" },
["20160310"] = { release = "10.3/11.0-RELEASE", openssh = "7.2", banner = "SSH-2.0-OpenSSH_7.2 FreeBSD-20160310" },
["20170902"] = { release = "10.4-RELEASE", openssh = "7.3", banner = "SSH-2.0-OpenSSH_7.3 FreeBSD-20170902" },
["20140420"] = { release = "9.3/10.1/10.2-RELEASE", openssh = "6.6.1", banner = "SSH-2.0-OpenSSH_6.6.1_hpn13v11 FreeBSD-20140420" },
["20131111"] = { release = "10.0-RELEASE", openssh = "6.4", banner = "SSH-2.0-OpenSSH_6.4_hpn13v11 FreeBSD-20131111" },
["20130515"] = { release = "9.2-RELEASE", openssh = "6.2", banner = "SSH-2.0-OpenSSH_6.2_hpn13v11 FreeBSD-20130515" },
["20110503"] = { release = "9.0/9.1-RELEASE", openssh = "5.8p2", banner = "SSH-2.0-OpenSSH_5.8p2_hpn13v11 FreeBSD-20110503" },
["20120901"] = { release = "8.4-RELEASE", openssh = "6.1", banner = "SSH-2.0-OpenSSH_6.1_hpn13v11 FreeBSD-20120901" },
["20100308"] = { release = "8.1/8.2/8.3-RELEASE", openssh = "5.4p1", banner = "SSH-2.0-OpenSSH_5.4p1 FreeBSD-20100308" },
["20090522"] = { release = "8.0-RELEASE", openssh = "5.2p1", banner = "SSH-2.0-OpenSSH_5.2p1 FreeBSD-20090522" },
["20080901"] = { release = "7.1/7.2/7.3/7.4-RELEASE", openssh = "5.1p1", banner = "SSH-2.0-OpenSSH_5.1p1 FreeBSD-20080901" },
["20061110"] = { release = "6.2/6.3/6.4/7.0-RELEASE", openssh = "4.5p1", banner = "SSH-2.0-OpenSSH_4.5p1 FreeBSD-20061110" },
["20050903"] = { release = "6.0/6.1-RELEASE", openssh = "4.2p1", banner = "SSH-2.0-OpenSSH_4.2p1 FreeBSD-20050903" },
["20060123"] = { release = "5.5-RELEASE", openssh = "3.8.1p1", banner = "SSH-2.0-OpenSSH_3.8.1p1 FreeBSD-20060123" },
["20040419"] = { release = "5.3/5.4-RELEASE", openssh = "3.8.1p1", banner = "SSH-2.0-OpenSSH_3.8.1p1 FreeBSD-20040419" },
["20030924"] = { release = "4.9/4.10/4.11/5.2-RELEASE", openssh = "3.5p1/3.6.1p1", banner = "SSH-1.99-OpenSSH_3.5p1 FreeBSD-20030924" },
["20030423"] = { release = "5.1-RELEASE", openssh = "3.6.1p1", banner = "SSH-1.99-OpenSSH_3.6.1p1 FreeBSD-20030423" },
["20021029"] = { release = "5.0-RELEASE", openssh = "3.5p1", banner = "SSH-1.99-OpenSSH_3.5p1 FreeBSD-20021029" },
["20030201"] = { release = "4.8-RELEASE", openssh = "3.5p1", banner = "SSH-1.99-OpenSSH_3.5p1 FreeBSD-20030201" },
["20020702"] = { release = "4.6.2/4.7-RELEASE", openssh = "3.4p1", banner = "SSH-1.99-OpenSSH_3.4p1 FreeBSD-20020702" },
["20020307"] = { release = "4.6-RELEASE", openssh = "2.9", banner = "SSH-1.99-OpenSSH_2.9 FreeBSD localisations 20020307" },
["20011202"] = { release = "4.5-RELEASE", openssh = "2.9", banner = "SSH-1.99-OpenSSH_2.9 FreeBSD localisations 20011202" },
["20010713"] = { release = "4.4-RELEASE", openssh = "2.3", banner = "SSH-1.99-OpenSSH_2.3.0 FreeBSD localisations 20010713" },
["20010321"] = { release = "4.3-RELEASE", openssh = "2.3.0", banner = "SSH-1.99-OpenSSH_2.3.0 green@FreeBSD.org 20010321" }
}

97 changes: 8 additions & 89 deletions ssh-os.nse
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
local shortport = require "shortport"
local stdnse = require "stdnse"
local comm = require "comm"
local ubuntu_banners = require "ubuntu_ssh_banners"
local freebsd_banners = require "freebsd_ssh_banners"


description = [[
Identifies Ubuntu, FreeBSD, Debian, or Raspbian version based on response of SSH banner.
Expand Down Expand Up @@ -87,53 +90,9 @@ local function get_ubuntu(ssh_banner)
u_build_version = ssh_banner:match("%-%d+",start_offset)
u_ssh_build = u_ssh_version .. u_build_version

-- https://github.com/richlamdev/ssh-default-banners
local u_table = {
["9.9p1-3"] = "Ubuntu 25.04 Plucky Puffin",
["9.7p1-7"] = "Ubuntu 24.10 Oracular Oriole",
["9.6p1-3"] = "Ubuntu 24.04 Noble Numbat",
["9.3p1-1"] = "Ubuntu 23.10 Mantic Minotaur",
["9.0p1-1"] = "Ubuntu 22.10 Kinetic Kudu or Ubuntu 23.04 Lunar Lobster",
["8.9p1-3"] = "Ubuntu 22.04 Jammy Jellyfish",
["8.4p1-6"] = "Ubuntu 21.10 Impish Indri",
["8.4p1-5"] = "Ubuntu 21.04 Hirsute Hippo",
["8.3p1-1"] = "Ubuntu 20.10 Groovy Gorilla",
["8.2p1-4"] = "Ubuntu 20.04 Focal Fossa",
["8.0p1-6"] = "Ubuntu 19.10 Eoan Ermine",
["7.9p1-10"] = "Ubuntu 19.04 Disco Dingo",
["7.7p1-4"] = "Ubuntu 18.10 Cosmic Cuttlefish",
["7.6p1-4"] = "Ubuntu 18.04 Bionic Beaver",
["7.5p1-10"] = "Ubuntu 17.10 Artful Aardvark",
["7.4p1-10"] = "Ubuntu 17.04 Zesty Zapus",
["7.3p1-1"] = "Ubuntu 16.10 Yakkety Yak",
["7.2p2-4"] = "Ubuntu 16.04 Xenial Xerus",
["6.9p1-2"] = "Ubuntu 15.10 Wily Werewolf",
["6.7p1-5"] = "Ubuntu 15.04 Vivid Vervet",
["6.6.1p1-8"] = "Ubuntu 14.10 Utopic Unicorn",
["6.6.1p1-2"] = "Ubuntu 14.04 Trusty Tahr",
["6.2p2-6"] = "Ubuntu 13.10 Saucy Salamander",
["6.1p1-4"] = "Ubuntu 13.04 Raring Ringtail",
["6.0p1-3"] = "Ubuntu 12.10 Quantal Quetzal",
["5.9p1-5"] = "Ubuntu 12.04 Precise Pangolin",
["5.8p1-7"] = "Ubuntu 11.10 Oneiric Ocelot",
["5.8p1-1"] = "Ubuntu 11.04 Natty Narwhal",
["5.5p1-4"] = "Ubuntu 10.10 Maverick Meerkat",
["5.3p1-3"] = "Ubuntu 10.04 Lucid Lynx",
["5.1p1-6"] = "Ubuntu 9.10 Karmic Koala",
["5.1p1-5"] = "Ubuntu 9.04 Jaunty Jackalope",
["5.1p1-3"] = "Ubuntu 8.10 Intrepid Ibex",
["4.7p1-8"] = "Ubuntu 8.04 Hardy Heron",
["4.6p1-5"] = "Ubuntu 7.10 Gutsy Gibbon",
["4.3p2-8"] = "Ubuntu 7.04 Feisty Fawn",
["4.3p2-5"] = "Ubuntu 6.10 Edgy Eft",
["4.2p1-7"] = "Ubuntu 6.06 Dapper Drake",
["4.1p1-7"] = "Ubuntu 5.10 Breezy Badger",
["3.9p1-1"] = "Ubuntu 5.04 Hoary Hedgehog",
["3.8.1p1-11"] = "Ubuntu 4.10 Warty Warthog"
}

if u_table[u_ssh_build] then
ubuntu_ver = u_table[u_ssh_build]
local entry = ubuntu_banners[u_ssh_build]
if entry and entry.codename then
ubuntu_ver = entry.name
else
ubuntu_ver = "Unknown Ubuntu version"
end
Expand All @@ -157,48 +116,8 @@ local function get_freebsd(ssh_banner)
f_ssh_version = ssh_banner:match("%d+",28)
end

-- https://github.com/richlamdev/ssh-default-banners
local f_table = {
["20240806"] = "FreeBSD 14.2-RELEASE",
["20240318"] = "FreeBSD 14.1-RELEASE",
["20231004"] = "FreeBSD 14.0-RELEASE",
["20250219"] = "FreeBSD 13.5-RELEASE",
["20230316"] = "FreeBSD 13.2-RELEASE",
["20211221"] = "FreeBSD 13.1-RELEASE",
["20200214"] = "FreeBSD 12.2, 12.3, 12.4 or 13.0-RELEASE",
["20180909"] = "FreeBSD 12.0, or 12.1-RELEASE",
["20170903"] = "FreeBSD 11.2, or 11.3-RELEASE",
["20161230"] = "FreeBSD 11.1-RELEASE",
["20160310"] = "FreeBSD 11.0-RELEASE",
["20170902"] = "FreeBSD 10.4-RELEASE",
["20160310"] = "FreeBSD 10.3-RELEASE",
["20140420"] = "FreeBSD 10.1, or 10.2-RELEASE",
["20131111"] = "FreeBSD 10.0-RELEASE",
["20140420"] = "FreeBSD 9.3-RELEASE",
["20130515"] = "FreeBSD 9.2-RELEASE",
["20110503"] = "FreeBSD 9.0, or 9.1-RELEASE",
["20120901"] = "FreeBSD 8.4-RELEASE",
["20100308"] = "FreeBSD 8.1, or 8.2, or 8.3-RELEASE",
["20090522"] = "FreeBSD 8.0-RELEASE",
["20080901"] = "FreeBSD 7.1, or 7.2, or 7.3 or 7.4-RELEASE",
["20061110"] = "FreeBSD 6.2, or 6.3, or 6.4, or 7.0-RELEASE",
["20050903"] = "FreeBSD 6.0, or 6.1-RELEASE",
["20060123"] = "FreeBSD 5.5-RELEASE",
["20040419"] = "FreeBSD 5.3-RELEASE, or 5.4-RELEASE",
["20030924"] = "FreeBSD 5.2-RELEASE",
["20030423"] = "FreeBSD 5.1-RELEASE",
["20021029"] = "FreeBSD 5.0-RELEASE",
["20030924"] = "FreeBSD 4.9, or 4.10, or 4.11-RELEASE",
["20030201"] = "FreeBSD 4.8-RELEASE",
["20020702"] = "FreeBSD 4.6.2-RELEASE, or 4.7-RELEASE",
["20020307"] = "FreeBSD 4.6-RELEASE",
["20011202"] = "FreeBSD 4.5-RELEASE",
["20010713"] = "FreeBSD 4.4-RELEASE",
["20010321"] = "FreeBSD 4.3-RELEASE"
}

if f_table[f_ssh_version] then
freebsd_ver = f_table[f_ssh_version]
if freebsd_banners[f_ssh_version] then
freebsd_ver = freebsd_banners[f_ssh_version].release
else
freebsd_ver = "Unknown FreeBSD version"
end
Expand Down
Loading