@@ -9,6 +9,7 @@ class MetasploitModule < Msf::Auxiliary
9
9
10
10
# Scanner mixin should be near last
11
11
include Msf ::Auxiliary ::Scanner
12
+ include Msf ::Auxiliary ::Report
12
13
13
14
# Aliases for common classes
14
15
SIMPLE = Rex ::Proto ::SMB ::SimpleClient
@@ -33,13 +34,13 @@ def run_host(ip)
33
34
connect
34
35
35
36
# Only accept NT LM 0.12 dialect and WfW3.0
36
- dialects = [ 'Windows for Workgroups 3.0a' , ' NT LM 0.12']
37
+ dialects = [ 'NT LM 0.12' ]
37
38
data = dialects . collect { |dialect | "\x02 " + dialect + "\x00 " } . join ( '' )
38
39
39
40
pkt = Rex ::Proto ::SMB ::Constants ::SMB_NEG_PKT . make_struct
40
41
pkt [ 'Payload' ] [ 'SMB' ] . v [ 'Command' ] = Rex ::Proto ::SMB ::Constants ::SMB_COM_NEGOTIATE
41
- pkt [ 'Payload' ] [ 'SMB' ] . v [ 'Flags1' ] = 0x98
42
- pkt [ 'Payload' ] [ 'SMB' ] . v [ 'Flags2' ] = 0xc807
42
+ pkt [ 'Payload' ] [ 'SMB' ] . v [ 'Flags1' ] = 0x08
43
+ pkt [ 'Payload' ] [ 'SMB' ] . v [ 'Flags2' ] = 0xc801
43
44
pkt [ 'Payload' ] . v [ 'Payload' ] = data
44
45
45
46
pkt [ 'Payload' ] [ 'SMB' ] . v [ 'ProcessID' ] = rand ( 0x10000 )
@@ -48,8 +49,18 @@ def run_host(ip)
48
49
sock . put ( pkt . to_s )
49
50
res = sock . get_once
50
51
# expecting \xff instead of \xfe
51
- print_good ( "#{ ip } supports SMBv1" ) if res && res . index ( "\xff SMB" )
52
+ if res && res . index ( "\xff SMB" )
53
+ print_good ( "#{ ip } supports SMBv1 dialect." )
54
+ report_note (
55
+ host : ip ,
56
+ proto : 'tcp' ,
57
+ sname : 'smb1' ,
58
+ port : rport ,
59
+ type : "supports SMB 1"
60
+ )
61
+ end
52
62
rescue ::Rex ::ConnectionError
63
+ rescue EOFError
53
64
rescue Errno ::ECONNRESET
54
65
rescue ::Exception => e
55
66
print_error ( "#{ rhost } : #{ e . class } #{ e } #{ e . backtrace } " )
0 commit comments