11-03-2015, 23:08
Jeg har lavet et lille Lua script som læser response headers fra en web server.
Det er ikke specielt komplekst, og tænkte at jeg ville dele det med jer andre.
Nmap har allerede et script der gør det samme, men det er mit først script til Nmap, og jeg er ikke specielt god til Lua.
Fil: http-header-get.nse
Der er desværre ikke nogen highlighting til Lua, så jeg har valgt, hvad jeg lige synes passer.
Jeg håber i kan bruge det, og måske selv komme i gang med Nmap scripts.
Lua er ofte brugt sammen med sproget c, og er en del mere brugt, end jeg selv først troede.
Det bliver brugt i WOW, Crysis, Nmap, Wireshark osv.
EDIT: Scriptet køres med "nmap -p http,https --script http-header-get eb.dk", eller "nmap -p http,https --script http-header-get eb.dk -d" med debugging. Det er praktisk, når man skal debugge sit script.
Links:
nmap.org
lua.org
Det er ikke specielt komplekst, og tænkte at jeg ville dele det med jer andre.
Nmap har allerede et script der gør det samme, men det er mit først script til Nmap, og jeg er ikke specielt god til Lua.
Fil: http-header-get.nse
-- Nmap libraries
local nmap = require "nmap"
local stdnse = require "stdnse"
local table = require "table"
local http = require "http"
local shortport = require "shortport"
-- Faste NSE variabler: description, author, license og categories
description = [[Lua Nmap Header grapper. Dette er et funktionelt eksempel på et NSE service script.]]
author = "iTick"
license = "Same as Nmap--See http://nmap.org/book/man-legal.html"
categories = {"discovery", "safe"}
-- Kør dette script på port 80, 443 eller enhver anden port som Nmap identificerer som http eller https, der har en åben tcp port
portrule = shortport.port_or_service({80, 443}, {"http", "https"}, {"tcp", "open"})
--[[ Nedenstående er hvad der bliver kørt af NSE, når der findes en port der svarer til ovenstående portrule.
Host og port kommer fra Nmap Scripting Engine ]]--
action = function(host, port)
-- Initialiser lokale variabler
local response = {} -- Variabel til scriptets get request
local k, v = nil, nil -- Variabler til at loope gennem header[] key/value par
local output = {} -- Variabel til output
response = http.get(host, port, "/") -- Udfør get og gem svaret i response variablen
if response.status -- Hvis response.status ikke er nil (Lua NULL)
and response.status ~=404 -- Og ikke en kode 404
then -- så
for k, v in pairs(response.header) do -- Loop gennem headers i response variablen
table.insert(output, k:upper() .. ": " .. response.header[k] .. ": " .. v) -- Put hver header key/value par i output variablen. Key bliver sat til store bogstaver
end
table.sort(output) -- Sortér output
return stdnse.format_output(true, output) -- Returnér output til NSE
else
return response["status-line"] -- Hvis noget går galt, send en fejlbesked til NSE
end
end
Der er desværre ikke nogen highlighting til Lua, så jeg har valgt, hvad jeg lige synes passer.
Jeg håber i kan bruge det, og måske selv komme i gang med Nmap scripts.
Lua er ofte brugt sammen med sproget c, og er en del mere brugt, end jeg selv først troede.
Det bliver brugt i WOW, Crysis, Nmap, Wireshark osv.
EDIT: Scriptet køres med "nmap -p http,https --script http-header-get eb.dk", eller "nmap -p http,https --script http-header-get eb.dk -d" med debugging. Det er praktisk, når man skal debugge sit script.
Links:
nmap.org
lua.org