Remove bin.lua from a couple more places

This commit is contained in:
dmiller 2018-09-16 04:28:26 +00:00
parent 2a11de56e4
commit 12295a474c
2 changed files with 38 additions and 35 deletions

View file

@ -34,7 +34,6 @@
-- with multiple addresses <patrik@cqure.net>
local bin = require "bin"
local ipOps = require "ipOps"
local match = require "match"
local nmap = require "nmap"
@ -133,12 +132,12 @@ Packet = {
local opcode = self.opcode + ((self.immediate or 0) << 6)
local data = bin.pack(">CCCCICSCSSISSIILLAA", opcode,
local data = string.pack(">BBBB I4 BI2B I2I2 I4 I2I2 I4 I4 I8I8", opcode,
flags, self.ver_max, self.ver_min, len,
( self.isid.t << 6 ) + ( self.isid.a & 0x3f),
self.isid.b, self.isid.c, self.isid.d, self.tsih,
self.initiator_task_tag, self.cid, reserved, self.cmdsn,
self.expstatsn, reserved, reserved, kvps, string.rep('\0', pad) )
self.expstatsn, reserved, reserved) .. kvps .. string.rep('\0', pad)
return data
end
@ -205,11 +204,11 @@ Packet = {
end
local resp = Packet.LoginResponse:new()
local pos, len = bin.unpack(">I", header, 5)
local len, pos = string.unpack(">I4", header, 5)
resp.total_ahs_len = len >> 24
resp.data_seg_len = len & 0x00ffffff
pos, resp.status_code = bin.unpack(">S", header, 37)
resp.status_code, pos = string.unpack(">I2", header, 37)
local pad = ( 4 - ( resp.data_seg_len % 4 ) )
pad = ( pad == 4 ) and 0 or pad
@ -273,9 +272,9 @@ Packet = {
local len = ( self.total_ahs_len << 24 ) + self.data_seg_len
local reserved = 0
local data = bin.pack(">CCSILIIIILLA", self.opcode, flags, reserved,
local data = string.pack(">BBI2 I4 I8 I4 I4 I4 I4 I8I8", self.opcode, flags, reserved,
len, self.lun, self.initiator_task_tag, self.target_trans_tag,
self.cmdsn, self.expstatsn, reserved, reserved, kvps)
self.cmdsn, self.expstatsn, reserved, reserved) .. kvps
return data
end,
@ -306,7 +305,7 @@ Packet = {
repeat
local status, header = s:receive_buf(match.numbytes(48), true)
if not status then return status, header end
local pos, _, flags, _, _, len = bin.unpack(">CCCCI", header)
local flags, len, pos = string.unpack(">xBxxI4", header)
local cont = ( (flags & 0x40) == 0x40 )
resp.total_ahs_len = len >> 24
@ -383,7 +382,8 @@ Packet = {
local opcode = self.opcode + ((self.immediate or 0) << 6)
local reserved = 0
local len = ( self.total_ahs_len << 24 ) + self.data_seg_len
local data = bin.pack(">CCSILISSIILL", opcode, (0x80 + self.reasoncode),
local data = string.pack(">BBI2 I4 I8 I4 I2I2 I4 I4 I8I8",
opcode, (0x80 + self.reasoncode),
reserved, len, reserved,self.initiator_task_tag, self.cid,
reserved, self.cmdsn, self.expstatsn, reserved, reserved )
@ -688,14 +688,14 @@ Helper = {
local chall = resp.kvp:get("CHAP_C")[1]
if ( not(chall) ) then return false, "Failed to decode challenge" end
chall = bin.pack("H", chall:sub(3))
chall = stdnse.fromhex(chall:sub(3))
local ident = resp.kvp:get("CHAP_I")[1]
if (not(ident)) then return false, "Failed to decoded identifier" end
ident = string.char(tonumber(ident))
local resp = CHAP.calcResponse( ident, chall, password )
resp = "0x" .. select(2, bin.unpack("H16", resp))
resp = "0x" .. stdnse.tohex(resp)
p = Packet.LoginRequest:new()
p:setImmediate(true)

View file

@ -12,7 +12,6 @@
-- @copyright Same as Nmap--See https://nmap.org/book/man-legal.html
-- @author Patrik Karlsson <patrik@cqure.net>
local bin = require "bin"
local nmap = require "nmap"
local stdnse = require "stdnse"
local openssl = stdnse.silent_require "openssl"
@ -69,13 +68,13 @@ v2 =
[MessageType.AuthRequest] = function( data, len, pos )
local _, authtype
local response = {}
pos, authtype = bin.unpack(">I", data, pos)
authtype, pos = string.unpack(">I4", data, pos)
if ( authtype == AuthenticationType.MD5 ) then
if ( len - pos + 1 ) < 3 then
return -1, "ERROR: Malformed AuthRequest received"
end
pos, response.salt = bin.unpack("A4", data, pos)
response.salt, pos = string.unpack("c4", data, pos)
elseif ( authtype == AuthenticationType.Plain ) then
--do nothing
elseif ( authtype == 0 ) then
@ -105,7 +104,7 @@ v2 =
local pos_end = pos + len
response.error = {}
pos, response.error.message = bin.unpack("z", data, pos)
response.error.message, pos = string.unpack("z", data, pos)
return pos, response
end,
@ -119,7 +118,7 @@ v2 =
local ptype, len, status, response
local pos = pos or 1
pos, ptype = bin.unpack("C", data, pos)
ptype, pos = string.unpack("B", data, pos)
len = data:len() - 1
if v2.messageDecoder[ptype] then
@ -176,7 +175,12 @@ v2 =
proto_ver = 0x0020000
user = v2.zeroPad(user, 32)
database = v2.zeroPad(database, 64)
data = bin.pack(">I>IAAAAA", 296, proto_ver, database, user, v2.zeroPad(args, 64), v2.zeroPad(unused, 64), v2.zeroPad(tty,64) )
data = string.pack(">I4I4", 296, proto_ver)
.. database
.. user
.. v2.zeroPad(args, 64)
.. v2.zeroPad(unused, 64)
.. v2.zeroPad(tty,64)
socket:send( data )
@ -217,11 +221,11 @@ v2 =
if ( params.authtype == AuthenticationType.MD5 ) then
local hash = createMD5LoginHash(username,password,salt)
data = bin.pack( ">Iz", 40, hash)
data = string.pack( ">I4z", 40, hash)
try( socket:send( data ) )
elseif ( params.authtype == AuthenticationType.Plain ) then
local data
data = bin.pack(">Iz", password:len() + 4, password)
data = string.pack(">I4z", password:len() + 4, password)
try( socket:send( data ) )
elseif ( params.authtype == AuthenticationType.Success ) then
return true, nil
@ -263,13 +267,13 @@ v3 =
local _, authtype
local response = {}
pos, authtype = bin.unpack(">I", data, pos)
authtype, pos = string.unpack(">I4", data, pos)
if ( authtype == AuthenticationType.MD5 ) then
if ( len - pos + 1 ) < 3 then
return -1, "ERROR: Malformed AuthRequest received"
end
pos, response.salt = bin.unpack("A4", data, pos)
response.salt, pos = string.unpack("c4", data, pos)
elseif ( authtype == AuthenticationType.Plain ) then
--do nothing
elseif ( authtype == 0 ) then
@ -290,11 +294,10 @@ v3 =
-- @return pos number containing the offset after decoding
-- @return response table containing zero or more of the following <code>key</code> and <code>value</code>
[MessageType.ParameterStatus] = function( data, len, pos )
local tmp, _
local response = {}
tmp = data:sub(pos, pos + len - 4)
_, response.key, response.value = bin.unpack("zz", tmp)
local tmp = data:sub(pos, pos + len - 4)
response.key, response.value = string.unpack("zz", tmp)
return pos + len - 4, response
end,
@ -316,7 +319,7 @@ v3 =
response.error = {}
while ( pos < pos_end - 5 ) do
pos, prefix, value = bin.unpack("Az", data, pos)
prefix, value, pos = string.unpack("c1z", data, pos)
if prefix == 'S' then
response.error.severity = value
@ -350,7 +353,7 @@ v3 =
return -1, "ERROR: Invalid BackendKeyData packet"
end
pos, response.pid, response.key = bin.unpack(">I>I", data, pos)
response.pid, response.key, pos = string.unpack(">I4I4", data, pos)
return pos, response
end,
@ -369,7 +372,7 @@ v3 =
return -1, "ERROR: Invalid ReadyForQuery packet"
end
pos, response.status = bin.unpack("C", data, pos )
response.status, pos = string.unpack("B", data, pos )
return pos, response
end,
},
@ -421,7 +424,7 @@ v3 =
decodeHeader = function(data, pos)
local ptype, len
pos, ptype, len = bin.unpack("C>I", data, pos)
ptype, len, pos = string.unpack(">BI4", data, pos)
return pos, { ['type'] = ptype, ['len'] = len }
end,
@ -474,11 +477,11 @@ v3 =
if ( params.authtype == AuthenticationType.MD5 ) then
local hash = createMD5LoginHash(username, password, salt)
data = bin.pack( "C>Iz", MessageType.PasswordMessage, 40, hash )
data = string.pack( ">BI4z", MessageType.PasswordMessage, 40, hash )
try( socket:send( data ) )
elseif ( params.authtype == AuthenticationType.Plain ) then
local data
data = bin.pack("C>Iz", MessageType.PasswordMessage, password:len() + 4, password)
data = string.pack(">BI4z", MessageType.PasswordMessage, password:len() + 4, password)
try( socket:send( data ) )
elseif ( params.authtype == AuthenticationType.Success ) then
return true, nil
@ -522,8 +525,8 @@ v3 =
local proto_ver, ptype, _, tmp
proto_ver = 0x0030000
data = bin.pack(">IzzzzH", proto_ver, "user", user, "database", database, 0)
data = bin.pack(">I", data:len() + 4) .. data
data = string.pack(">I4zzzzB", proto_ver, "user", user, "database", database, 0)
data = string.pack(">I4", data:len() + 4) .. data
socket:send( data )
@ -557,7 +560,7 @@ v3 =
function requestSSL(socket)
-- SSLRequest
local ssl_req_code = 80877103
local data = bin.pack( ">I>I", 8, ssl_req_code)
local data = string.pack( ">I4I4", 8, ssl_req_code)
local status, response
socket:send(data)
@ -581,8 +584,8 @@ end
-- @param salt salt
-- @return string suitable for login request
function createMD5LoginHash(username, password, salt)
local md5_1 = select( 2, bin.unpack( "H16", openssl.md5(password..username) ) ):lower()
return "md5" .. select( 2, bin.unpack("H16", openssl.md5( md5_1 .. salt ) ) ):lower()
local md5_1 = stdnse.tohex(openssl.md5(password..username))
return "md5" .. stdnse.tohex(openssl.md5(md5_1 .. salt))
end
--- Prints the contents of the error table returned from the Error message decoder