After adding a custom NSE script and updating nmap database, the following error was shown. My nmap was installed from Mac OS X Binary from nmap.org.
$ nmap --script-updatedb Starting Nmap 6.25 ( http://nmap.org ) at 2013-03-29 00:40 SGT NSE: Updating rule database. NSE: Failed to load /usr/local/bin/../share/nmap/scripts//sql-injection.nse: /usr/local/bin/../share/nmap/scripts//sql-injection.nse:44: variable 'shortport' is not declared stack traceback: [C]: in function 'error' /usr/local/bin/../share/nmap/nselib/strict.lua:80: in function '__index' /usr/local/bin/../share/nmap/scripts//sql-injection.nse:44: in function </usr/local/bin/../share/nmap/scripts//sql-injection.nse:1> NSE: failed to initialize the script engine: /usr/local/bin/../share/nmap/nse_main.lua:523: could not load script stack traceback: [C]: in function 'error' /usr/local/bin/../share/nmap/nse_main.lua:523: in function 'new' /usr/local/bin/../share/nmap/nse_main.lua:1223: in main chunk [C]: in ? QUITTING! |
I tried to examine the sql-injection.nse and shortport.lua. In sql-injection.nse, the variable shortport is properly import with require(‘shortport’) and I could not find any issues in shortport.lua.
require('url') require('shortport') . . portrule = shortport.port_or_service({80, 443}, {"http","https"}) . . |
Normally Lua assumes the name from require statement as the variable. The only way I could try is explicitly declaring the variable for each require statements and giving the same name as the required module. Then I could update properly my nmap scripts database.
local url = require('url') local shortport = require('shortport') local stdnse = require('stdnse') local strbuf = require('strbuf') local comm = require('comm') local http = require('http') local nsedebug = require('nsedebug') local httpspider = require('httpspider') . . |