@@ -140,7 +140,10 @@ def register(unc, contents, file_name, hi, lo)
140
140
@hi = hi
141
141
@lo = lo
142
142
@exe = contents
143
- @flags2 = 0xc807 # e807 or c807 or c001
143
+ @flags2 = CONST ::FLAGS2_UNICODE_STRINGS +
144
+ CONST ::FLAGS2_EXTENDED_SECURITY +
145
+ CONST ::FLAGS2_32_BIT_ERROR_CODES +
146
+ CONST ::FLAGS2_LONG_PATH_COMPONENTS
144
147
end
145
148
146
149
protected
@@ -266,9 +269,11 @@ def smb_error(cmd, c, errorclass, esn = false)
266
269
pkt [ 'Payload' ] [ 'SMB' ] . v [ 'Command' ] = cmd
267
270
pkt [ 'Payload' ] [ 'SMB' ] . v [ 'Flags1' ] = 0x88
268
271
if esn
269
- pkt [ 'Payload' ] [ 'SMB' ] . v [ 'Flags2' ] = 0xc801
272
+ pkt [ 'Payload' ] [ 'SMB' ] . v [ 'Flags2' ] = @flags2
270
273
else
271
- pkt [ 'Payload' ] [ 'SMB' ] . v [ 'Flags2' ] = 0xc001
274
+ pkt [ 'Payload' ] [ 'SMB' ] . v [ 'Flags2' ] = CONST ::FLAGS2_UNICODE_STRINGS +
275
+ CONST ::FLAGS2_32_BIT_ERROR_CODES +
276
+ CONST ::FLAGS2_LONG_PATH_COMPONENTS
272
277
end
273
278
pkt [ 'Payload' ] [ 'SMB' ] . v [ 'ErrorClass' ] = errorclass
274
279
c . put ( pkt . to_s )
@@ -354,66 +359,60 @@ def smb_cmd_trans(c, buff)
354
359
sub_command = pkt [ 'Payload' ] . v [ 'SetupData' ] . unpack ( "v" ) . first
355
360
dprint ( "Command is: #{ sub_command . to_s } " )
356
361
ar = Rex ::Text . to_hex ( buff , '' ) . to_s
357
- mdc = ar [ 86 ..89 ]
362
+ mdc = ar [ 86 ..89 ] . unpack ( 'n*' ) . reverse . pack ( 'n*' ) . to_i ( 16 )
358
363
359
364
case sub_command
360
- when 0x24 # QUERY_FILE_INFO
361
- dprint ( "[query_file_info_24]" )
362
- # path info works here
365
+ when CONST ::TRANS2_QUERY_FILE_INFO_BASIC
366
+ dprint ( "[query_file_info_basic]" )
363
367
smb_cmd_trans_query_path_info_standard ( c , buff )
364
- when 0x7 # QUERY_FILE_INFO
365
- dprint ( "[query_file_info_7 ]" )
366
- loi = ar [ 148 ..151 ]
368
+ when CONST :: TRANS2_QUERY_FILE_INFO_STANDARD
369
+ dprint ( "[query_file_info_standard ]" )
370
+ loi = ar [ 148 ..151 ] . unpack ( 'n*' ) . reverse . pack ( 'n*' ) . to_i ( 16 )
367
371
dprint ( "LOI is: #{ loi } " )
368
372
case loi
369
- when 'ed03' # Query Path Standard Info
373
+ when CONST :: SMB_QUERY_PATH_STANDARD_INFO
370
374
smb_cmd_trans_query_path_info_standard ( c , buff )
371
375
else
372
376
smb_cmd_trans_query_file_info_standard ( c , buff )
373
377
end
374
- when 0x5 # QUERY_PATH_INFO
378
+ when CONST :: TRANS2_QUERY_PATH_INFO
375
379
dprint ( "[query_path_info]" )
376
380
dprint ( "MDC is: #{ mdc } " )
377
- loi = ar [ 144 ..147 ]
381
+ loi = ar [ 144 ..147 ] . unpack ( 'n*' ) . reverse . pack ( 'n*' ) . to_i ( 16 )
378
382
dprint ( "LOI is: #{ loi } " )
379
383
case mdc # MAX DATA COUNT
380
- when '2800'
381
- # Basic is MDC = 40 / 2800 hex
384
+ when CONST ::SMB_QUERY_BASIC_MDC
382
385
case loi
383
- when '0101' # Query File Basic Info
386
+ when CONST :: SMB_QUERY_FILE_BASIC_INFO
384
387
dprint ( "[query_file_info_basic]" )
385
388
smb_cmd_trans_query_file_info_basic ( c , buff )
386
389
else
387
390
dprint ( "[query_path_info_basic]" )
388
391
smb_cmd_trans_query_path_info_basic ( c , buff )
389
392
end
390
- when '1800' , '0201'
391
- # Standard is MDC = 24 / 1800 hex or 258 / 0201 hex
393
+ when CONST ::SMB_QUERY_STANDARD_MDC1 , CONST ::SMB_QUERY_STANDARD_MDC2
392
394
dprint ( "[query_path_info_standard]" )
393
395
smb_cmd_trans_query_path_info_standard ( c , buff )
394
- when '0800'
395
- # Internal File info is MDC = 8 / 0800 hex
396
+ when CONST ::SMB_QUERY_FILE_INTERNAL_INFO_MDC
396
397
dprint ( "[query_file_info_basic]" )
397
398
smb_cmd_trans_query_file_info_standard ( c , buff )
398
- when '3800'
399
- # Query file network open info
399
+ when CONST ::SMB_QUERY_FILE_NETWORK_INFO_MDC
400
400
dprint ( "[query_file_info_network]" )
401
401
smb_cmd_trans_query_file_info_network ( c , buff )
402
402
else
403
403
dprint ( "Unknown MDC - Sending to [query_path_info_standard]: #{ mdc . to_s } " )
404
404
smb_cmd_trans_query_path_info_standard ( c , buff )
405
405
end
406
- when 0x1 # FIND_FIRST2
406
+ when CONST :: TRANS2_FIND_FIRST2
407
407
dprint ( "find_first2" )
408
- loi = ar [ 156 ..159 ]
409
- dprint ( "MDC is: #{ mdc } " )
408
+ loi = ar [ 156 ..159 ] . unpack ( 'n*' ) . reverse . pack ( 'n*' ) . to_i ( 16 )
410
409
dprint ( "LOI is: #{ loi } " )
411
410
case loi
412
- when '0301' # Find File Names Info # 259
411
+ when CONST :: SMB_FIND_FILE_NAMES_INFO
413
412
smb_cmd_trans_find_first2_file ( c , buff )
414
- when '0401' # Find File Both Directory Info # 260
413
+ when CONST :: SMB_FIND_FILE_BOTH_DIRECTORY_INFO
415
414
smb_cmd_trans_find_first2 ( c , buff )
416
- when '0201' # Find File Full Directory Info # 258
415
+ when CONST :: SMB_FIND_FILE_FULL_DIRECTORY_INFO
417
416
smb_cmd_trans_find_first2_full ( c , buff )
418
417
else
419
418
smb_cmd_trans_find_first2 ( c , buff )
@@ -799,7 +798,7 @@ def smb_cmd_trans_query_path_info_standard(c, buff)
799
798
800
799
payload = pkt [ 'Payload' ] . v [ 'SetupData' ] . gsub ( /\x00 / , '' ) . gsub ( /.*\\ / , '' ) . chomp . strip
801
800
ar = Rex ::Text . to_hex ( buff , '' ) . to_s
802
- fid = ar [ 146 ..147 ] + ar [ 144 .. 145 ]
801
+ fid = ar [ 144 ..147 ] . unpack ( 'n*' ) . reverse . pack ( 'n*' )
803
802
dprint ( "[smb_cmd_trans_query_path_info_standard] fid is : #{ fid . hex } , file_id is : " + self . file_id . to_s )
804
803
dprint ( "[smb_cmd_trans_query_path_info_standard] Payload length: #{ payload . length . to_s } " )
805
804
@@ -857,7 +856,7 @@ def smb_cmd_trans_query_file_info_basic(c, buff)
857
856
858
857
ar = Rex ::Text . to_hex ( buff , '' ) . to_s
859
858
dprint ( "[smb_cmd_trans_query_file_info_basic] ar is : #{ ar } " )
860
- fid = ar [ 146 ..147 ] + ar [ 144 .. 145 ]
859
+ fid = ar [ 144 ..147 ] . unpack ( 'n*' ) . reverse . pack ( 'n*' )
861
860
dprint ( "[smb_cmd_trans_query_file_info_basic] fid is : #{ fid . hex } , file_id is : " + self . file_id . to_s )
862
861
if ( fid . hex . eql? ( self . file_id . to_i ) )
863
862
dprint ( "File match" )
@@ -1037,7 +1036,7 @@ def smb_cmd_trans_find_first2(c, buff)
1037
1036
1038
1037
ar = Rex ::Text . to_hex ( buff , '' ) . to_s
1039
1038
dprint ( "[smb_cmd_trans_find_first2] ar is : #{ ar } " )
1040
- fid = ar [ 146 ..147 ] + ar [ 144 .. 145 ]
1039
+ fid = ar [ 144 ..147 ] . unpack ( 'n*' ) . reverse . pack ( 'n*' )
1041
1040
dprint ( "[smb_cmd_trans_find_first2] fid is : #{ fid . hex } , file_id is : " + self . file_id . to_s )
1042
1041
if ( fid . hex . eql? ( self . file_id . to_i ) )
1043
1042
dprint ( "File match" )
@@ -1144,7 +1143,7 @@ def smb_cmd_trans_find_first2_file(c, buff)
1144
1143
1145
1144
ar = Rex ::Text . to_hex ( buff , '' ) . to_s
1146
1145
dprint ( "[smb_cmd_trans_find_first2_file] ar is : #{ ar } " )
1147
- fid = ar [ 146 ..147 ] + ar [ 144 .. 145 ]
1146
+ fid = ar [ 144 ..147 ] . unpack ( 'n*' ) . reverse . pack ( 'n*' )
1148
1147
dprint ( "[smb_cmd_trans_find_first2_file] fid is : #{ fid . hex } , file_id is : " + self . file_id . to_s )
1149
1148
if ( fid . hex . eql? ( self . file_id . to_i ) )
1150
1149
dprint ( "File match" )
@@ -1232,7 +1231,7 @@ def smb_cmd_trans_find_first2_full(c, buff)
1232
1231
1233
1232
ar = Rex ::Text . to_hex ( buff , '' ) . to_s
1234
1233
dprint ( "[smb_cmd_trans_find_first2_full] ar is : #{ ar } " )
1235
- fid = ar [ 146 ..147 ] + ar [ 144 .. 145 ]
1234
+ fid = ar [ 144 ..147 ] . unpack ( 'n*' ) . reverse . pack ( 'n*' )
1236
1235
dprint ( "[smb_cmd_trans_find_first2_full] fid is : #{ fid . hex } , file_id is : " + self . file_id . to_s )
1237
1236
if ( fid . hex . eql? ( self . file_id . to_i ) )
1238
1237
dprint ( "File match" )
0 commit comments