From 13dd6a34806beab2394c681b3564cc8215bea43c Mon Sep 17 00:00:00 2001 From: dmiller Date: Thu, 19 Oct 2017 02:42:55 +0000 Subject: [PATCH] Replace bit.lua functions with bitwise operators --- nselib/rpc.lua | 35 +++++++++++++++++------------------ nselib/sslcert.lua | 3 +-- nselib/sslv2.lua | 11 +++++------ nselib/vulns.lua | 29 ++++++++++++++--------------- 4 files changed, 37 insertions(+), 41 deletions(-) diff --git a/nselib/rpc.lua b/nselib/rpc.lua index ff3762683..59896691e 100644 --- a/nselib/rpc.lua +++ b/nselib/rpc.lua @@ -76,7 +76,6 @@ -- protocols are tested. (ie. "tcp", "udp") local bin = require "bin" -local bit = require "bit" local datafiles = require "datafiles" local math = require "math" local nmap = require "nmap" @@ -438,9 +437,9 @@ Comm = { end pos, tmp = bin.unpack(">i", data, pos ) - length = bit.band( tmp, 0x7FFFFFFF ) + length = tmp & 0x7FFFFFFF - if ( bit.band( tmp, 0x80000000 ) == 0x80000000 ) then + if (tmp & 0x80000000) == 0x80000000 then lastfragment = true end @@ -1390,43 +1389,43 @@ NFS = { end, AccessRead = function (self, mask, version) - return bit.band(mask, NFS.AccessBits[version].ACCESS_READ) + return (mask & NFS.AccessBits[version].ACCESS_READ) end, AccessLookup = function (self, mask, version) - return bit.band(mask, NFS.AccessBits[version].ACCESS_LOOKUP) + return (mask & NFS.AccessBits[version].ACCESS_LOOKUP) end, AccessModify = function (self, mask, version) - return bit.band(mask, NFS.AccessBits[version].ACCESS_MODIFY) + return (mask & NFS.AccessBits[version].ACCESS_MODIFY) end, AccessExtend = function (self, mask, version) - return bit.band(mask, NFS.AccessBits[version].ACCESS_EXTEND) + return (mask & NFS.AccessBits[version].ACCESS_EXTEND) end, AccessDelete = function (self, mask, version) - return bit.band(mask, NFS.AccessBits[version].ACCESS_DELETE) + return (mask & NFS.AccessBits[version].ACCESS_DELETE) end, AccessExecute = function (self, mask, version) - return bit.band(mask, NFS.AccessBits[version].ACCESS_EXECUTE) + return (mask & NFS.AccessBits[version].ACCESS_EXECUTE) end, FSinfoLink = function(self, mask, version) - return bit.band(mask, NFS.FSinfoBits[version].FSF_LINK) + return (mask & NFS.FSinfoBits[version].FSF_LINK) end, FSinfoSymlink = function(self, mask, version) - return bit.band(mask, NFS.FSinfoBits[version].FSF_SYMLINK) + return (mask & NFS.FSinfoBits[version].FSF_SYMLINK) end, FSinfoHomogeneous = function(self, mask, version) - return bit.band(mask, NFS.FSinfoBits[version].FSF_HOMOGENEOUS) + return (mask & NFS.FSinfoBits[version].FSF_HOMOGENEOUS) end, FSinfoCansettime = function(self, mask, version) - return bit.band(mask, NFS.FSinfoBits[version].FSF_CANSETTIME) + return (mask & NFS.FSinfoBits[version].FSF_CANSETTIME) end, --- Decodes the READDIR section of a NFS ReadDir response @@ -2948,7 +2947,7 @@ Util = -- @param mode number containing the ACL mode -- @return char containing the file type FtypeToChar = function(mode) - local code = bit.band(mode, Util.S_IFMT) + local code = mode & Util.S_IFMT if Util.FileType[code] then return Util.FileType[code].char else @@ -2962,7 +2961,7 @@ Util = -- @param mode number containing the ACL mode -- @return string containing the file type name FtypeToString = function(mode) - local code = bit.band(mode, Util.S_IFMT) + local code = mode & Util.S_IFMT if Util.FileType[code] then return Util.FileType[code].str else @@ -2977,9 +2976,9 @@ Util = -- @param mode number containing the ACL mode -- @return string containing the octal ACL mode FmodeToOctalString = function(mode) - local code = bit.band(mode, Util.S_IFMT) + local code = mode & Util.S_IFMT if Util.FileType[code] then - code = bit.bxor(mode, code) + code = mode ~ code else code = mode stdnse.debug1("FmodeToOctalString: Unknown file type, mode: %o", mode) @@ -2997,7 +2996,7 @@ Util = for user,_ in pairs(Util.Fperm) do local t = Util.Fperm[user] for i in pairs(t) do - local code = bit.band(mode, i) + local code = mode & i if t[code] then -- save set-ID and sticky bits if tmpacl[t[code].idx] == "x" then diff --git a/nselib/sslcert.lua b/nselib/sslcert.lua index 795ad3cae..ffd23fea3 100644 --- a/nselib/sslcert.lua +++ b/nselib/sslcert.lua @@ -23,7 +23,6 @@ local asn1 = require "asn1" local bin = require "bin" -local bit = require "bit" local comm = require "comm" local ftp = require "ftp" local ldap = require "ldap" @@ -586,7 +585,7 @@ StartTLS = { -- Check the status flags in the TDS packet to see if the message is -- continued in another TDS packet. tdsPacketAvailable = ( - bit.band( messageStatus, mssql.TDSStream.MESSAGE_STATUS_FLAGS.EndOfMessage) + (messageStatus & mssql.TDSStream.MESSAGE_STATUS_FLAGS.EndOfMessage) ~= mssql.TDSStream.MESSAGE_STATUS_FLAGS.EndOfMessage) end diff --git a/nselib/sslv2.lua b/nselib/sslv2.lua index 8b2696a3d..5e631eaaa 100644 --- a/nselib/sslv2.lua +++ b/nselib/sslv2.lua @@ -7,7 +7,6 @@ local stdnse = require "stdnse" local bin = require "bin" -local bit = require "bit" local table = require "table" local nmap = require "nmap" local sslcert = require "sslcert" @@ -120,11 +119,11 @@ local function read_header(buffer, i) local len i, len = bin.unpack(">S", buffer, i) - local msb = bit.band(len, 0x8000) == 0x8000 + local msb = (len & 0x8000) == 0x8000 local header_length, record_length, padding_length, is_escape if msb then header_length = 2 - record_length = bit.band(len, 0x7fff) + record_length = len & 0x7fff padding_length = 0 else header_length = 3 @@ -132,8 +131,8 @@ local function read_header(buffer, i) -- don't have enough for the message_type. Back up. return i - SSL_MIN_HEADER, nil end - record_length = bit.band(len, 0x3fff) - is_escape = not not bit.band(len, 0x4000) + record_length = len & 0x3fff + is_escape = not not (len & 0x4000) i, padding_length = bin.unpack("C", buffer, i) end @@ -211,7 +210,7 @@ function ssl_record (payload, pad_length) if pad_length > 0 then return bin.pack(">SCA", length, pad_length, payload) else - return bin.pack(">SA", bit.bor(length, 0x8000), payload) + return bin.pack(">SA", (length | 0x8000), payload) end end diff --git a/nselib/vulns.lua b/nselib/vulns.lua index 26743e0f2..bf84914bf 100644 --- a/nselib/vulns.lua +++ b/nselib/vulns.lua @@ -188,7 +188,6 @@ -- @copyright Same as Nmap--See https://nmap.org/book/man-legal.html -local bit = require "bit" local ipOps = require "ipOps" local nmap = require "nmap" local stdnse = require "stdnse" @@ -398,8 +397,8 @@ STATE_MSG = { [STATE.VULN] = 'VULNERABLE', [STATE.DoS] = 'VULNERABLE (DoS)', [STATE.EXPLOIT] = 'VULNERABLE (Exploitable)', - [bit.bor(STATE.DoS,STATE.VULN)] = 'VULNERABLE (DoS)', - [bit.bor(STATE.EXPLOIT,STATE.VULN)] = 'VULNERABLE (Exploitable)', + [STATE.DoS | STATE.VULN] = 'VULNERABLE (DoS)', + [STATE.EXPLOIT | STATE.VULN] = 'VULNERABLE (Exploitable)', } -- Scripts must provide the correct risk factor string. @@ -570,7 +569,7 @@ local normalize_vuln_info = function(vuln_table) -- the 'VULN' state. if vuln_table.state == STATE.DoS or vuln_table.state == STATE.EXPLOIT then - vuln_table.state = bit.bor(vuln_table.state, STATE.VULN) + vuln_table.state = vuln_table.state | STATE.VULN end -- Convert the following string fields to tables. @@ -785,7 +784,7 @@ local l_push_vuln = function(vulndb, new_vuln) end -- Save these fields only when the state is not 'NOT VULNERABLE' - if bit.band(new_vuln.state, STATE.NOT_VULN) == 0 then + if (new_vuln.state & STATE.NOT_VULN) == 0 then if new_vuln.risk_factor then vuln.risk_factor = new_vuln.risk_factor vuln.scores = tcopy(new_vuln.scores) @@ -801,7 +800,7 @@ local l_push_vuln = function(vulndb, new_vuln) -- string_format("Script %s checks:", new_vuln.script_name)) --end - --if bit.band(vuln.state, STATE.EXPLOIT) ~= 0 then + --if (vuln.state & STATE.EXPLOIT) ~= 0 then -- vuln.exploit_results = tcopy(new_vuln.exploit_results) -- if vuln.exploit_results then -- insert(vuln.exploit_results, 1, @@ -888,7 +887,7 @@ local l_update_vuln = function(vulndb, old_vuln, new_vuln) -- Remove these fields if the state is NOT VULNERABLE -- Note: At this level the old_vuln.state was already updated. - if bit.band(old_vuln.state, STATE.NOT_VULN) ~= 0 then + if (old_vuln.state & STATE.NOT_VULN) ~= 0 then old_vuln.risk_factor = nil old_vuln.scores = nil old_vuln.description = nil @@ -921,7 +920,7 @@ local l_update_vuln = function(vulndb, old_vuln, new_vuln) --end --if new_vuln.exploit_results and - --bit.band(old_vuln.state, STATE.EXPLOIT) ~= 0 then + --(old_vuln.state & STATE.EXPLOIT) ~= 0 then -- old_vuln.exploit_results = old_vuln.exploit_results or {} -- insert(old_vuln.exploit_results, -- string_format("Script %s exploits:", new_vuln.script_name)) @@ -1178,7 +1177,7 @@ end -- otherwise False. local l_filter_vuln = function(vuln_table, filter) if filter and next(filter) then - if filter.state and bit.band(vuln_table.state, filter.state) == 0 then + if filter.state and (vuln_table.state & filter.state) == 0 then return false end @@ -1338,7 +1337,7 @@ local l_make_output = function(fid_table, entries, filter) "vulns.lua: Vulnerability '%s' (host: %s): FOUND", vuln_table.title, vuln_table.host.ip) - if bit.band(vuln_table.state, STATE.NOT_VULN) == 0 then + if (vuln_table.state & STATE.NOT_VULN) == 0 then host_entries.vulns[#host_entries.vulns + 1] = vuln_table else save_not_vulns(host_entries.not_vulns, vuln_table) @@ -1355,7 +1354,7 @@ local l_make_output = function(fid_table, entries, filter) if check_vuln(vuln_table, fid_table, filter) then debug(5, "vulns.lua: Vulnerability '%s': FOUND", vuln_table.title) - if bit.band(vuln_table.state, STATE.NOT_VULN) == 0 then + if (vuln_table.state & STATE.NOT_VULN) == 0 then networks.vulns[#networks.vulns + 1] = vuln_table else save_not_vulns(networks.not_vulns, vuln_table) @@ -1807,7 +1806,7 @@ local format_vuln_base = function(vuln_table, showall) return nil end - if not showall and bit.band(vuln_table.state, STATE.NOT_VULN) ~= 0 then + if not showall and (vuln_table.state & STATE.NOT_VULN) ~= 0 then debug(2, "vulns.lua: vulnerability '%s'%s: %s.", vuln_table.title, vuln_table.host and @@ -1848,7 +1847,7 @@ local format_vuln_base = function(vuln_table, showall) end -- Show this information only if the program is vulnerable - if bit.band(vuln_table.state, STATE.NOT_VULN) == 0 then + if (vuln_table.state & STATE.NOT_VULN) == 0 then if vuln_table.risk_factor then local risk_str = "" @@ -2084,7 +2083,7 @@ end -- -- -- Save only vulnerabilities with the VULNERABLE state. -- local function save_only_vuln(vuln_table) --- if bit.band(vuln_table.state, vulns.STATE.VULN) ~= 0 then +-- if (vuln_table.state & vulns.STATE.VULN) ~= 0 then -- return true -- end -- return false @@ -2212,7 +2211,7 @@ Report = { vuln_table.script_name = self.script_name vuln_table.host = self.host vuln_table.port = self.port - if bit.band(vuln_table.state, STATE.NOT_VULN) ~= 0 then + if (vuln_table.state & STATE.NOT_VULN) ~= 0 then insert(self.entries.not_vulns, vuln_table) else insert(self.entries.vulns, vuln_table)