diff --git a/CHANGELOG b/CHANGELOG index 6ae21fd0c..fb34a7b6b 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -3,6 +3,10 @@ o Added nmap.fetchfile() function for scripts so they can easily find Nmap's nmap-* data files. [Kris] +o Updated rpcinfo.nse to use nmap.fetchfile() to read from nmap-rpc + instead of having a huge table of RPC numbers. This reduced the + script's size by nearly 3/4. [Kris] + 4.51BETA o We now have a detailed Zenmap Guide at diff --git a/scripts/rpcinfo.nse b/scripts/rpcinfo.nse index ca309a7fb..98892f0a7 100644 --- a/scripts/rpcinfo.nse +++ b/scripts/rpcinfo.nse @@ -7,385 +7,44 @@ categories = {"safe","discovery"} require "shortport" require "bit" +require "stdnse" --- rpc program numbers generated from nmap-rpc with a command like: --- perl -ne 'if (/^([a-z0-9]+)\s+(\d+)\s/i) { print " [$2] = $1,\n"; }' nmap-rpc | sed "s/= /= '/" | sed "s/,/',/" --- then the comma was removed from final line -local rpc_numbers = { - [100000] = 'rpcbind', - [100001] = 'rstatd', - [100002] = 'rusersd', - [100003] = 'nfs', - [100004] = 'ypserv', - [100005] = 'mountd', - [100007] = 'ypbind', - [100008] = 'walld', - [100009] = 'yppasswdd', - [100010] = 'etherstatd', - [100011] = 'rquotad', - [100012] = 'sprayd', - [100017] = 'rexd', - [100018] = 'alis', - [100019] = 'sched', - [100020] = 'llockmgr', - [100021] = 'nlockmgr', - [100023] = 'statmon', - [100024] = 'status', - [100026] = 'bootparam', - [100027] = 'mazewars', - [100028] = 'ypupdated', - [100029] = 'keyserv', - [100030] = 'securelogin', - [100035] = 'database', - [100037] = 'tfsd', - [100038] = 'nsed', - [100039] = 'nsemntd', - [100043] = 'showfhd', - [100044] = 'mvsmount', - [100055] = 'ioadmd', - [100059] = 'showattrd', - [100062] = 'NETlicense', - [100065] = 'sunisamd', - [100068] = 'cmsd', - [100069] = 'ypxfrd', - [100071] = 'bugtraqd', - [100078] = 'kerbd', - [100083] = 'ttdbserverd', - [100087] = 'admind', - [100099] = 'autofsd', - [100101] = 'event', - [100102] = 'logger', - [100104] = 'sync', - [100105] = 'diskinfo', - [100106] = 'iostat', - [100107] = 'hostperf', - [100109] = 'activity', - [100111] = 'lpstat', - [100112] = 'hostmem', - [100113] = 'sample', - [100114] = 'x25', - [100115] = 'ping', - [100116] = 'rpcnfs', - [100117] = 'hostif', - [100118] = 'etherif', - [100119] = 'ippath', - [100120] = 'iproutes', - [100121] = 'layers', - [100122] = 'snmp', - [100123] = 'traffic', - [100124] = 'DNInode', - [100131] = 'layers2', - [100135] = 'etherif2', - [100136] = 'hostmem2', - [100137] = 'iostat2', - [100138] = 'snmpv2', - [100139] = 'sender', - [100146] = 'amiserv', - [100147] = 'amiaux', - [100150] = 'ocfserv', - [100153] = 'sunvts', - [100155] = 'smserverd', - [100229] = 'metad', - [100230] = 'metamhd', - [100231] = 'nfsauth', - [100232] = 'sadmind', - [100233] = 'ufsd', - [100234] = 'gssd', - [100235] = 'cachefsd', - [100249] = 'snmpXdmid', - [100300] = 'nisd', - [100303] = 'nispasswd', - [100304] = 'fnsypd', - [100422] = 'mdcommd', - [100424] = 'stfsloader', - [150001] = 'pcnfsd', - [200000] = 'PyramidLock', - [200001] = 'PyramidSys5', - [200005] = 'pdbDA', - [200020] = 'SWG', - [200023] = 'exportmap', - [200034] = 'Gqsrv', - [200035] = 'Ppt', - [200036] = 'Pmt', - [200037] = 'Msgt', - [200038] = 'Walerts', - [200039] = 'Mgt', - [200040] = 'Pft', - [200041] = 'Msgq', - [200042] = 'Smpsrv', - [200043] = 'Dexsrv', - [200044] = 'Statussrv', - [200046] = 'SessionServer', - [200047] = 'SessionDaemon', - [200048] = 'Pmsgq', - [200049] = 'Filesrv', - [200050] = 'Magfetch', - [200051] = 'Optfetch', - [200052] = 'Securitysrv', - [200100] = 'bundle', - [200201] = 'ecodisc', - [200202] = 'ecolic', - [200203] = 'eamon', - [200205] = 'ecoad', - [300001] = 'ADTFileLock', - [300006] = 'fmclient', - [300007] = 'fmeditor', - [300009] = 'fmserver', - [300019] = 'amd', - [300021] = 'Steering', - [300030] = 'UpdtAuditsS', - [300091] = 'Dbpass', - [300145] = 'clms', - [300301] = 'acuserve', - [300375] = 'rmd', - [300376] = 'agcd', - [300433] = 'bssd', - [300434] = 'drdd', - [300483] = 'cnxmond', - [300484] = 'cnxagentd', - [300516] = 'mcserv', - [300527] = 'cluinfod', - [300598] = 'dmispd', - [300632] = 'prpasswd', - [300664] = 'ks', - [344444] = 'sfs', - [351455] = 'mapsvc', - [351457] = 'berkeleydb', - [351473] = 'caasalert', - [395644] = 'caservd', - [395645] = 'calqserver', - [395646] = 'camediadsvr', - [395647] = 'caldbserver', - [395648] = 'caauthd', - [395649] = 'cadiscovd', - [395650] = 'caloggerd', - [390101] = 'rap', - [390102] = 'rapserv', - [390103] = 'nsrd', - [390104] = 'nsrmmd', - [390105] = 'nsrindexd', - [390107] = 'nsrmmdbd', - [390109] = 'nsrstat', - [390110] = 'nsrjb', - [390113] = 'nsrexec', - [390115] = 'lgtolmd', - [390400] = 'nsrnotd', - [390600] = 'arserverd', - [390601] = 'ntserverd', - [390602] = 'ntclientd', - [390603] = 'aresclsrv', - [390604] = 'arservtcd', - [390610] = 'flashservd', - [390619] = 'arflashbd', - [390620] = 'arfastsrv', - [390621] = 'arfastsrv', - [390622] = 'arfastsrv', - [390623] = 'arfastsrv', - [390624] = 'arfastsrv', - [390625] = 'arfastsrv', - [390626] = 'arfastsrv', - [390627] = 'arfastsrv', - [390628] = 'arfastsrv', - [390629] = 'arfastsrv', - [390630] = 'arfastsrv', - [390631] = 'arfastsrv', - [390632] = 'arfastsrv', - [390633] = 'arfastsrv', - [390634] = 'arfastsrv', - [390635] = 'arlistsrv', - [390636] = 'arlistsrv', - [390637] = 'arlistsrv', - [390638] = 'arlistsrv', - [390639] = 'arlistsrv', - [390640] = 'arlistsrv', - [390641] = 'arlistsrv', - [390642] = 'arlistsrv', - [390643] = 'arlistsrv', - [390644] = 'arlistsrv', - [390645] = 'arlistsrv', - [390646] = 'arlistsrv', - [390647] = 'arlistsrv', - [390648] = 'arlistsrv', - [390649] = 'arlistsrv', - [391434] = 'ingsqld', - [391200] = 'afsd', - [391201] = 'dhc', - [391202] = 'cmsd', - [391203] = 'xxx2trif', - [391204] = 'trif2xxx', - [391205] = 'dx', - [391206] = 'licd', - [395175] = 'asedirector', - [395176] = 'aseagent', - [395177] = 'asehsm', - [395179] = 'aselogger', - [395250] = 'pnictl', - [450000] = 'EnsignAgent', - [900101] = 'drac', - [1000002] = 'AdoIfServer', - [2000004] = 'notifServer', - [20000000] = 'retherif', - [20000001] = 'genagnt', - [20000114] = 'acedb', - [20000115] = 'aboutdb', - [20000116] = 'aatdb', - [20000777] = 'seagent', - [21000023] = 'dbsrvr', - [28000205] = 'egts', - [28000220] = 'ers', - [28000230] = 'sas', - [200100001] = 'netinfobind', - [200100002] = 'renderd', - [536870915] = 'uidd', - [536870916] = 'vtsk', - [536870917] = 'bondd', - [536870918] = 'staticd', - [536870919] = 'curved', - [536870920] = 'msglogd', - [536870921] = 'aliasd', - [536870922] = 'ticketd', - [536870923] = 'glossd', - [536870924] = 'futured', - [536870928] = 'priced', - [536870929] = 'ladderd', - [536870937] = 'optiond', - [536870944] = 'ndbportmgr', - [536870945] = 'ndbserver1', - [536870946] = 'ndbserver2', - [536870947] = 'ndbserver3', - [536870948] = 'ndbserver4', - [536870949] = 'ndbserver5', - [536870950] = 'ndbserver6', - [536870951] = 'ndbserver7', - [536870952] = 'ndbserver8', - [536870953] = 'ndbserver9', - [536870954] = 'ndbserver10', - [536870955] = 'ndbserver11', - [536870956] = 'ndbserver12', - [536870957] = 'ndbserver13', - [536870958] = 'ndbserver14', - [536870959] = 'ndbserver15', - [536870960] = 'ndbserver16', - [536870961] = 'ndbserver17', - [536870962] = 'ndbserver18', - [536870963] = 'ndbserver19', - [536870964] = 'ndbserver20', - [536870965] = 'ndbserver21', - [536870966] = 'ndbserver22', - [536870967] = 'ndbserver23', - [536870968] = 'ndbserver24', - [536870969] = 'ndbserver25', - [536870970] = 'ndbserver26', - [536870971] = 'ndbserver27', - [536870972] = 'ndbserver28', - [536870973] = 'ndbserver29', - [536870974] = 'ndbserver30', - [536870975] = 'ndbserver31', - [536870976] = 'ndbserver32', - [536870977] = 'ndbserver33', - [536870978] = 'ndbserver34', - [536870979] = 'ndbserver35', - [536870980] = 'ndbserver36', - [536870981] = 'ndbserver37', - [536870982] = 'ndbserver38', - [536870983] = 'ndbserver39', - [536870984] = 'ndbserver40', - [536870985] = 'ndbserver41', - [536870986] = 'ndbserver42', - [536870987] = 'ndbserver43', - [536870988] = 'ndbserver44', - [536870989] = 'ndbserver45', - [536870990] = 'ndbserver46', - [536870991] = 'ndbserver47', - [536870992] = 'ndbserver48', - [536870993] = 'ndbserver49', - [536870994] = 'ndbserver50', - [536870995] = 'ndbserver51', - [536870996] = 'ndbserver52', - [536870997] = 'ndbserver53', - [536870998] = 'ndbserver54', - [536870999] = 'ndbserver55', - [536871000] = 'ndbserver56', - [536871001] = 'ndbserver57', - [536871002] = 'ndbserver58', - [536871003] = 'ndbserver59', - [536871004] = 'ndbserver60', - [536871005] = 'ndbserver61', - [536871006] = 'ndbserver62', - [536871007] = 'ndbserver63', - [536871008] = 'ndbserver64', - [536871009] = 'ndbserver65', - [536871010] = 'ndbserver66', - [536871011] = 'ndbserver67', - [536871012] = 'ndbserver68', - [536871013] = 'ndbserver69', - [536871014] = 'ndbserver70', - [536871015] = 'ndbserver71', - [536871016] = 'ndbserver72', - [536871017] = 'ndbserver73', - [536871018] = 'ndbserver74', - [536871019] = 'ndbserver75', - [536871020] = 'ndbserver76', - [536871021] = 'ndbserver77', - [536871022] = 'ndbserver78', - [536871023] = 'ndbserver79', - [536871024] = 'ndbserver80', - [536871025] = 'ndbserver81', - [536871026] = 'ndbserver82', - [536871027] = 'ndbserver83', - [536871028] = 'ndbserver84', - [536871029] = 'ndbserver85', - [536871030] = 'ndbserver86', - [536871031] = 'ndbserver87', - [536871032] = 'ndbserver88', - [536871033] = 'ndbserver89', - [536871034] = 'ndbserver90', - [536871035] = 'ndbserver91', - [536871036] = 'ndbserver92', - [536871037] = 'ndbserver93', - [536871038] = 'ndbserver94', - [536871039] = 'ndbserver95', - [536871040] = 'ndbserver96', - [536871041] = 'ndbserver97', - [536871042] = 'ndbserver98', - [536871043] = 'ndbserver99', - [536871044] = 'ndbserver100', - [536871680] = 'gnbk', - [541414217] = 'fcagent', - [591751041] = 'pnmd', - [545580417] = 'ugidd', - [555555555] = 'inetray', - [555555556] = 'inetray', - [555555557] = 'inetray', - [555555558] = 'inetray', - [555555559] = 'inetray', - [555555560] = 'inetray', - [600000001] = 'collectd', - [600000002] = 'xycomd', - [600000003] = 'motord', - [600000004] = 'fitsd', - [600100069] = 'fypxfrd', - [611319808] = 'rdbx', - [630474513] = 'bminrd', - [788585389] = 'bwnfsd', - [805306368] = 'dmispd', - [805898569] = 'rdict', - [822087681] = 'testpoint', - [822087682] = 'awg', - [822087683] = 'cgdsrtdd', - [822087684] = 'gdsd', - [822087685] = 'chnconfd', - [822087686] = 'leapconfd', - [822087687] = 'rlaunchd', - [824395111] = 'cfsd', - [912680550] = 'cns', - [1073741824] = 'fmproduct', - [1092830567] = 'cfsd', - [1145324612] = 'rdb', - [1289637086] = 'dtcm', - [1289637087] = 'ttsession', - [1342177279] = 'ttsession' -} +local rpc_numbers = {} + +-- Fills rpc_numbers with values read from RPC file - Kris Katterjohn +local fillrpc = function() + local path = nmap.fetchfile("nmap-rpc") + + if path == nil then + return false + end + + local file = io.open(path, "r") + + -- Loops through RPC file line-by-line + while true do + local l = file:read() + + if not l then + break + end + + l = l:gsub("%s*#.*", "") + + if l:len() ~= 0 then + local m = l:gsub("^([%a%d_]+)%s+(%d+).*", "%2=%1") + + if m:match("=") then + local t = stdnse.strsplit("=", m) + rpc_numbers[tonumber(t[1])] = t[2] + end + end + end + + file:close() + + return true +end portrule = shortport.port_or_service(111, "rpcbind") @@ -395,6 +54,11 @@ action = function(host, port) local socket = nmap.new_socket() local result = "" + if not fillrpc() then + stdnse.print_debug("rpcinfo: Can't read from RPC file!") + return + end + catch = function() socket:close() end try = nmap.new_try( catch )