mirror of
https://github.com/nmap/nmap.git
synced 2025-12-08 05:31:31 +00:00
Improve the script screen output. Fixes #1637
- properly handle indentation and line termination of multi-line command output - strip off control characters - replace tabs with spaces to maintain column alignment - clean up documentation
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
local stdnse = require "stdnse"
|
local stdnse = require "stdnse"
|
||||||
local shortport = require "shortport"
|
local shortport = require "shortport"
|
||||||
|
local stringaux = require "stringaux"
|
||||||
local table = require "table"
|
local table = require "table"
|
||||||
local libssh2_util = require "libssh2-utility"
|
local libssh2_util = require "libssh2-utility"
|
||||||
|
|
||||||
@@ -8,22 +9,25 @@ Runs remote command on ssh server and returns command output.
|
|||||||
]]
|
]]
|
||||||
|
|
||||||
---
|
---
|
||||||
-- @usage nmap -p 22 -v -d --script=ssh-run --datadir=./ \
|
-- @usage nmap -p 22 --script=ssh-run \
|
||||||
-- --script-args="ssh-run.cmd=ls -l /, ssh-run.username=myusername, ssh-run.password=mypassword" <target>
|
-- --script-args="ssh-run.cmd=ls -l /, ssh-run.username=myusername, ssh-run.password=mypassword" <target>
|
||||||
--
|
--
|
||||||
-- @output
|
-- @output
|
||||||
-- 22/tcp open ssh syn-ack 0
|
-- 22/tcp open ssh
|
||||||
-- | run-remote:
|
-- | ssh-run:
|
||||||
-- | output:
|
-- | output:
|
||||||
-- | total 124
|
-- | total 91
|
||||||
-- | drwxr-xr-x 2 root root 4096 Jun 23 09:34 bin
|
-- | drwxr-xr-x 2 root root 4096 Jun 5 11:56 bin
|
||||||
-- | drwxr-xr-x 3 root root 4096 Jun 19 12:42 boot
|
-- | drwxr-xr-x 4 root root 3072 Jun 5 12:42 boot
|
||||||
-- | drwxr-xr-x 2 root root 4096 Feb 6 2013 cdrom
|
-- | drwxrwxr-x 2 root root 4096 Jun 22 2017 cdrom
|
||||||
-- | drwxr-xr-x 16 root root 4340 Jul 17 13:37 dev
|
-- | drwxr-xr-x 20 root root 4060 Jun 23 10:26 dev
|
||||||
-- | drwxr-xr-x 162 root root 12288 Jul 20 12:10 etc
|
-- | drwxr-xr-x 127 root root 12288 Jun 5 11:56 etc
|
||||||
-- | drwxr-xr-x 15 root root 4096 Jun 23 15:20 home
|
-- | drwxr-xr-x 3 root root 4096 Jun 22 2017 home
|
||||||
-- | ...
|
-- ....
|
||||||
-- |_drwxr-xr-x 14 root root 4096 Jun 6 14:58 var
|
-- |_ drwxr-xr-x 13 root root 4096 Jul 20 2016 var
|
||||||
|
--
|
||||||
|
-- @xmloutput
|
||||||
|
-- <elem key="output">total 91\x0D
drwxr-xr-x 2 root root 4096 Jun 5 11:56 bin\x0D
drwxr-xr-x 4 root root 3072 Jun 5 12:42 boot\x0D
drwxrwxr-x 2 root root 4096 Jun 22 2017 cdrom\x0D
drwxr-xr-x 20 root root 4060 Jun 23 10:26 dev\x0D
drwxr-xr-x 127 root root 12288 Jun 5 11:56 etc\x0D
drwxr-xr-x 3 root root 4096 Jun 22 2017 home\x0D
....\x0D
drwxr-xr-x 13 root root 4096 Jul 20 2016 var\x0D
</elem>
|
||||||
--
|
--
|
||||||
-- @args ssh-run.username Username to authenticate as
|
-- @args ssh-run.username Username to authenticate as
|
||||||
-- @args ssh-run.password Password to use if using password authentication
|
-- @args ssh-run.password Password to use if using password authentication
|
||||||
@@ -47,6 +51,14 @@ local password = stdnse.get_script_args 'ssh-run.password'
|
|||||||
local privatekey = stdnse.get_script_args 'ssh-run.privatekey'
|
local privatekey = stdnse.get_script_args 'ssh-run.privatekey'
|
||||||
local passphrase = stdnse.get_script_args 'ssh-run.passphrase'
|
local passphrase = stdnse.get_script_args 'ssh-run.passphrase'
|
||||||
|
|
||||||
|
local function remove_tabs (str, tabsize)
|
||||||
|
tabsize = tabsize or 8
|
||||||
|
local out = str:gsub("(.-)\t", function (s)
|
||||||
|
return s .. (" "):rep(tabsize - #s % tabsize)
|
||||||
|
end)
|
||||||
|
return out
|
||||||
|
end
|
||||||
|
|
||||||
function action (host, port)
|
function action (host, port)
|
||||||
local conn = libssh2_util.SSHConnection:new()
|
local conn = libssh2_util.SSHConnection:new()
|
||||||
if not conn:connect(host, port) then
|
if not conn:connect(host, port) then
|
||||||
@@ -76,8 +88,16 @@ function action (host, port)
|
|||||||
stdnse.verbose("Running command: " .. cmd)
|
stdnse.verbose("Running command: " .. cmd)
|
||||||
local output, err_output = conn:run_remote(cmd)
|
local output, err_output = conn:run_remote(cmd)
|
||||||
stdnse.verbose("Output of command: " .. output)
|
stdnse.verbose("Output of command: " .. output)
|
||||||
local result = stdnse.output_table()
|
|
||||||
result.output = {}
|
local out = stdnse.output_table()
|
||||||
table.insert(result.output, output)
|
out.output = output
|
||||||
return result
|
|
||||||
|
local txtout = {}
|
||||||
|
for _, line in ipairs(stringaux.strsplit("\r?\n", output:gsub("\r?\n$", ""))) do
|
||||||
|
local str = line:gsub("[^\t\x20-\x7f]", "")
|
||||||
|
table.insert(txtout, remove_tabs(str))
|
||||||
|
end
|
||||||
|
txtout.name = "output:"
|
||||||
|
|
||||||
|
return out, stdnse.format_output(true, {txtout})
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user