recog 3.1.1 → 3.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/Gemfile +6 -0
- data/Rakefile +7 -5
- data/lib/recog/db.rb +67 -68
- data/lib/recog/db_manager.rb +22 -21
- data/lib/recog/fingerprint/regexp_factory.rb +10 -13
- data/lib/recog/fingerprint/test.rb +9 -8
- data/lib/recog/fingerprint.rb +252 -262
- data/lib/recog/fingerprint_parse_error.rb +3 -1
- data/lib/recog/formatter.rb +41 -39
- data/lib/recog/match_reporter.rb +82 -83
- data/lib/recog/matcher.rb +37 -40
- data/lib/recog/matcher_factory.rb +7 -6
- data/lib/recog/nizer.rb +218 -224
- data/lib/recog/verifier.rb +30 -28
- data/lib/recog/verify_reporter.rb +69 -73
- data/lib/recog/version.rb +3 -1
- data/lib/recog.rb +2 -0
- data/recog/bin/recog_match +21 -20
- data/recog/xml/apache_modules.xml +2 -0
- data/recog/xml/dhcp_vendor_class.xml +1 -1
- data/recog/xml/favicons.xml +133 -1
- data/recog/xml/ftp_banners.xml +1 -1
- data/recog/xml/html_title.xml +140 -1
- data/recog/xml/http_cookies.xml +20 -2
- data/recog/xml/http_servers.xml +38 -17
- data/recog/xml/http_wwwauth.xml +17 -4
- data/recog/xml/mdns_device-info_txt.xml +49 -15
- data/recog/xml/sip_banners.xml +0 -2
- data/recog/xml/sip_user_agents.xml +1 -1
- data/recog/xml/snmp_sysdescr.xml +1 -2
- data/recog/xml/ssh_banners.xml +8 -0
- data/recog/xml/telnet_banners.xml +3 -2
- data/recog/xml/tls_jarm.xml +1 -1
- data/recog/xml/x11_banners.xml +1 -0
- data/recog/xml/x509_issuers.xml +1 -1
- data/recog/xml/x509_subjects.xml +0 -1
- data/recog.gemspec +14 -13
- data/spec/lib/recog/db_spec.rb +37 -36
- data/spec/lib/recog/fingerprint/regexp_factory_spec.rb +19 -20
- data/spec/lib/recog/fingerprint_spec.rb +44 -42
- data/spec/lib/recog/formatter_spec.rb +20 -18
- data/spec/lib/recog/match_reporter_spec.rb +35 -30
- data/spec/lib/recog/nizer_spec.rb +85 -101
- data/spec/lib/recog/verify_reporter_spec.rb +45 -44
- data/spec/spec_helper.rb +2 -1
- data.tar.gz.sig +1 -3
- metadata +3 -3
- metadata.gz.sig +0 -0
@@ -1,97 +1,93 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Recog
|
2
|
-
class VerifyReporter
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
end
|
4
|
+
class VerifyReporter
|
5
|
+
attr_reader :formatter, :success_count, :warning_count, :failure_count
|
6
|
+
|
7
|
+
def initialize(options, formatter, path = nil)
|
8
|
+
@options = options
|
9
|
+
@formatter = formatter
|
10
|
+
@path = path
|
11
|
+
reset_counts
|
12
|
+
end
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
def report(fingerprint_count)
|
15
|
+
reset_counts
|
16
|
+
formatter.status_message("\n#{@path}:\n") if detail? && !@path.to_s.empty?
|
17
|
+
yield self
|
18
|
+
summarize(fingerprint_count) unless @options.quiet
|
17
19
|
end
|
18
|
-
yield self
|
19
|
-
summarize(fingerprint_count) unless @options.quiet
|
20
|
-
end
|
21
20
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
21
|
+
def success(text)
|
22
|
+
@success_count += 1
|
23
|
+
formatter.success_message("#{padding}#{text}") if detail?
|
24
|
+
end
|
26
25
|
|
27
|
-
|
28
|
-
|
29
|
-
@warning_count += 1
|
30
|
-
formatter.warning_message("#{path_label(line)}#{padding}WARN: #{text}")
|
31
|
-
end
|
26
|
+
def warning(text, line = nil)
|
27
|
+
return unless @options.warnings
|
32
28
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
29
|
+
@warning_count += 1
|
30
|
+
formatter.warning_message("#{path_label(line)}#{padding}WARN: #{text}")
|
31
|
+
end
|
32
|
+
|
33
|
+
def failure(text, line = nil)
|
34
|
+
@failure_count += 1
|
35
|
+
formatter.failure_message("#{path_label(line)}#{padding}FAIL: #{text}")
|
36
|
+
end
|
37
|
+
|
38
|
+
def print_name(fingerprint)
|
39
|
+
return unless detail? && fingerprint.tests.any?
|
37
40
|
|
38
|
-
def print_name(fingerprint)
|
39
|
-
if detail? && fingerprint.tests.any?
|
40
41
|
name = fingerprint.name.empty? ? '[unnamed]' : fingerprint.name
|
41
42
|
formatter.status_message("\n#{name}")
|
42
43
|
end
|
43
|
-
end
|
44
44
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
45
|
+
def summarize(fingerprint_count)
|
46
|
+
print_fingerprint_count(fingerprint_count) if detail?
|
47
|
+
print_summary
|
48
|
+
end
|
49
49
|
|
50
|
-
|
51
|
-
|
52
|
-
|
50
|
+
def print_fingerprint_count(count)
|
51
|
+
formatter.status_message("\nVerified #{count} fingerprints:")
|
52
|
+
end
|
53
53
|
|
54
|
-
|
55
|
-
|
56
|
-
|
54
|
+
def print_summary
|
55
|
+
colorize_summary(summary_line)
|
56
|
+
end
|
57
57
|
|
58
|
-
|
58
|
+
private
|
59
59
|
|
60
|
-
|
61
|
-
|
62
|
-
|
60
|
+
def reset_counts
|
61
|
+
@success_count = @failure_count = @warning_count = 0
|
62
|
+
end
|
63
63
|
|
64
|
-
|
65
|
-
|
66
|
-
|
64
|
+
def detail?
|
65
|
+
@options.detail
|
66
|
+
end
|
67
67
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
68
|
+
def path_label(line = nil)
|
69
|
+
return if detail?
|
70
|
+
|
71
|
+
line_label = line ? "#{line}:" : ''
|
72
|
+
@path.to_s.empty? ? '' : "#{@path}:#{line_label} "
|
72
73
|
end
|
73
|
-
end
|
74
74
|
|
75
|
-
|
76
|
-
|
77
|
-
|
75
|
+
def padding
|
76
|
+
' ' if @options.detail
|
77
|
+
end
|
78
78
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
summary << ", #{@warning_count} warnings"
|
83
|
-
summary << ", and #{@failure_count} failures"
|
84
|
-
summary
|
85
|
-
end
|
79
|
+
def summary_line
|
80
|
+
"#{path_label}SUMMARY: Test completed with #{@success_count} successful, #{@warning_count} warnings, and #{@failure_count} failures"
|
81
|
+
end
|
86
82
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
83
|
+
def colorize_summary(summary)
|
84
|
+
if @failure_count > 0
|
85
|
+
formatter.failure_message(summary)
|
86
|
+
elsif @warning_count > 0
|
87
|
+
formatter.warning_message(summary)
|
88
|
+
else
|
89
|
+
formatter.success_message(summary)
|
90
|
+
end
|
94
91
|
end
|
95
92
|
end
|
96
93
|
end
|
97
|
-
end
|
data/lib/recog/version.rb
CHANGED
data/lib/recog.rb
CHANGED
data/recog/bin/recog_match
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
require 'optparse'
|
4
5
|
require 'ostruct'
|
@@ -8,47 +9,47 @@ require 'recog/matcher_factory'
|
|
8
9
|
options = OpenStruct.new(color: false, detail: false, json_format: false, fail_fast: false, multi_match: false)
|
9
10
|
|
10
11
|
option_parser = OptionParser.new do |opts|
|
11
|
-
opts.banner = "Usage: #{$
|
12
|
-
opts.separator
|
13
|
-
opts.separator
|
14
|
-
opts.separator
|
12
|
+
opts.banner = "Usage: #{$PROGRAM_NAME} [options] XML_FINGERPRINT_FILE [BANNERS_FILE]"
|
13
|
+
opts.separator 'Identifies the matches and misses between the fingerprints and the banners file or STDIN'
|
14
|
+
opts.separator ''
|
15
|
+
opts.separator 'Options'
|
15
16
|
|
16
|
-
opts.on(
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
17
|
+
opts.on('-f', '--format FORMATTER', %i[summary detail json],
|
18
|
+
'Choose a formatter.',
|
19
|
+
' [s]ummary (default - failure/match msgs)',
|
20
|
+
' [d]etail (msgs with total counts)',
|
21
|
+
' [j]son (JSON failure/match msgs)') do |format|
|
22
|
+
case format
|
23
|
+
when :summary
|
22
24
|
options.detail = false
|
23
25
|
options.json_format = false
|
24
|
-
|
26
|
+
when :detail
|
25
27
|
options.detail = true
|
26
|
-
|
28
|
+
when :json
|
27
29
|
options.json_format = true
|
28
30
|
end
|
29
31
|
end
|
30
32
|
|
31
|
-
opts.on(
|
32
|
-
|
33
|
+
opts.on('--fail-fast [NUM]',
|
34
|
+
'Stop after number of failures (default: 10).') do |num|
|
33
35
|
options.fail_fast = true
|
34
|
-
options.stop_after =
|
36
|
+
options.stop_after = num.to_i == 0 ? 10 : num.to_i
|
35
37
|
end
|
36
38
|
|
37
|
-
opts.on(
|
39
|
+
opts.on('-c', '--color', 'Enable color in the output.') do
|
38
40
|
options.color = true
|
39
41
|
end
|
40
42
|
|
41
|
-
opts.on(
|
43
|
+
opts.on('--[no-]multi-match', 'Enable or disable multiple matches (defaults to disabled)') do |o|
|
42
44
|
options.multi_match = o
|
43
45
|
end
|
44
46
|
|
45
|
-
opts.on(
|
47
|
+
opts.on('-h', '--help', 'Show this message.') do
|
46
48
|
puts opts
|
47
49
|
exit
|
48
50
|
end
|
49
51
|
end
|
50
52
|
|
51
|
-
|
52
53
|
begin
|
53
54
|
option_parser.parse!(ARGV)
|
54
55
|
rescue OptionParser::ParseError => e
|
@@ -65,4 +66,4 @@ end
|
|
65
66
|
ndb = Recog::DB.new(ARGV.shift)
|
66
67
|
options.fingerprints = ndb.fingerprints
|
67
68
|
matcher = Recog::MatcherFactory.build(options)
|
68
|
-
matcher.match_banners(ARGV.shift ||
|
69
|
+
matcher.match_banners(ARGV.shift || '-')
|
@@ -1196,6 +1196,7 @@
|
|
1196
1196
|
<param pos="0" name="service.component.vendor" value="Apache"/>
|
1197
1197
|
<param pos="0" name="service.component.product" value="mod_jk"/>
|
1198
1198
|
<param pos="1" name="service.component.version"/>
|
1199
|
+
<param pos="0" name="service.component.cpe23" value="cpe:/a:apache:mod_jk:{service.component.version}"/>
|
1199
1200
|
</fingerprint>
|
1200
1201
|
|
1201
1202
|
<fingerprint pattern="mod_jk/?$">
|
@@ -1203,6 +1204,7 @@
|
|
1203
1204
|
<example>mod_jk/</example>
|
1204
1205
|
<param pos="0" name="service.component.vendor" value="Apache"/>
|
1205
1206
|
<param pos="0" name="service.component.product" value="mod_jk"/>
|
1207
|
+
<param pos="0" name="service.component.cpe23" value="cpe:/a:apache:mod_jk:-"/>
|
1206
1208
|
</fingerprint>
|
1207
1209
|
|
1208
1210
|
<fingerprint pattern="mod_jk2/(\S+)$">
|
@@ -947,7 +947,7 @@
|
|
947
947
|
<fingerprint pattern="^JNPR\.IVE$">
|
948
948
|
<description>Juniper SSL VPN</description>
|
949
949
|
<example>JNPR.IVE</example>
|
950
|
-
<param pos="0" name="hw.device" value="
|
950
|
+
<param pos="0" name="hw.device" value="VPN"/>
|
951
951
|
<param pos="0" name="hw.vendor" value="Juniper"/>
|
952
952
|
<param pos="0" name="os.vendor" value="Juniper"/>
|
953
953
|
<param pos="0" name="os.product" value="IVE OS"/>
|
data/recog/xml/favicons.xml
CHANGED
@@ -30,6 +30,36 @@
|
|
30
30
|
<param pos="0" name="service.product" value="Media Server"/>
|
31
31
|
</fingerprint>
|
32
32
|
|
33
|
+
<fingerprint pattern="^(?:1a60f7f928a659f763204d525b3cf90d|6d4c72194ecff7ead96f65db45851be9|55ece828b1329741c1d553a6575d71f1)$">
|
34
|
+
<description>Radarr</description>
|
35
|
+
<!-- favicon-16x16.png -->
|
36
|
+
|
37
|
+
<example>1a60f7f928a659f763204d525b3cf90d</example>
|
38
|
+
<!-- favicon-32x32.png -->
|
39
|
+
|
40
|
+
<example>6d4c72194ecff7ead96f65db45851be9</example>
|
41
|
+
<!-- favicon.ico -->
|
42
|
+
|
43
|
+
<example>55ece828b1329741c1d553a6575d71f1</example>
|
44
|
+
<param pos="0" name="service.vendor" value="Radarr"/>
|
45
|
+
<param pos="0" name="service.product" value="Radarr"/>
|
46
|
+
</fingerprint>
|
47
|
+
|
48
|
+
<fingerprint pattern="^(?:b3ae051d2c6b875b2064288104856291|c24b156cfaa12860760793f43b487c21|657ebbffad0e5c71a1010fbc9b279b1e)$">
|
49
|
+
<description>Sonarr</description>
|
50
|
+
<!-- favicon-32x32.png -->
|
51
|
+
|
52
|
+
<example>b3ae051d2c6b875b2064288104856291</example>
|
53
|
+
<!-- favicon-16x16.png -->
|
54
|
+
|
55
|
+
<example>c24b156cfaa12860760793f43b487c21</example>
|
56
|
+
<!-- favicon.ico -->
|
57
|
+
|
58
|
+
<example>657ebbffad0e5c71a1010fbc9b279b1e</example>
|
59
|
+
<param pos="0" name="service.vendor" value="Sonarr"/>
|
60
|
+
<param pos="0" name="service.product" value="Sonarr"/>
|
61
|
+
</fingerprint>
|
62
|
+
|
33
63
|
<fingerprint pattern="^0f584138aacfb79aaba7e2539fc4e642$">
|
34
64
|
<description>Plex Media Server</description>
|
35
65
|
<example>0f584138aacfb79aaba7e2539fc4e642</example>
|
@@ -1303,7 +1333,6 @@
|
|
1303
1333
|
<param pos="0" name="os.family" value="Adaptive Security Appliance"/>
|
1304
1334
|
<param pos="0" name="os.product" value="Adaptive Security Appliance"/>
|
1305
1335
|
<param pos="0" name="os.certainty" value="0.5"/>
|
1306
|
-
<param pos="0" name="os.cpe23" value="cpe:/o:cisco:adaptive_security_appliance_software:-"/>
|
1307
1336
|
<param pos="0" name="hw.vendor" value="Cisco"/>
|
1308
1337
|
<param pos="0" name="hw.family" value="Adaptive Security Appliance"/>
|
1309
1338
|
<param pos="0" name="hw.product" value="Adaptive Security Appliance"/>
|
@@ -1698,6 +1727,7 @@
|
|
1698
1727
|
<param pos="0" name="hw.vendor" value="HP"/>
|
1699
1728
|
<param pos="0" name="hw.product" value="iLO 3"/>
|
1700
1729
|
<param pos="0" name="hw.certainty" value="0.5"/>
|
1730
|
+
<param pos="0" name="hw.cpe23" value="cpe:/h:hp:integrated_lights-out_3:-"/>
|
1701
1731
|
<param pos="0" name="os.vendor" value="HP"/>
|
1702
1732
|
<param pos="0" name="os.device" value="Lights Out Management"/>
|
1703
1733
|
<param pos="0" name="os.family" value="iLO"/>
|
@@ -2128,6 +2158,16 @@
|
|
2128
2158
|
<param pos="0" name="service.cpe23" value="cpe:/a:apache:spark:-"/>
|
2129
2159
|
</fingerprint>
|
2130
2160
|
|
2161
|
+
<fingerprint pattern="^0629ce6bd8a86ff6b5dbb2a24c040849$">
|
2162
|
+
<description>Apache Superset</description>
|
2163
|
+
<!-- favicon.png from version 2.1.0 -->
|
2164
|
+
|
2165
|
+
<example>0629ce6bd8a86ff6b5dbb2a24c040849</example>
|
2166
|
+
<param pos="0" name="service.vendor" value="Apache"/>
|
2167
|
+
<param pos="0" name="service.product" value="Superset"/>
|
2168
|
+
<param pos="0" name="service.cpe23" value="cpe:/a:apache:superset:-"/>
|
2169
|
+
</fingerprint>
|
2170
|
+
|
2131
2171
|
<fingerprint pattern="^a3dcb28303f26786e262e0760781057a$">
|
2132
2172
|
<description>Eltex device web interface</description>
|
2133
2173
|
<example>a3dcb28303f26786e262e0760781057a</example>
|
@@ -2346,4 +2386,96 @@
|
|
2346
2386
|
<param pos="0" name="service.product" value="R1Soft Server Backup Manager"/>
|
2347
2387
|
</fingerprint>
|
2348
2388
|
|
2389
|
+
<fingerprint pattern="^(?:cc21dae362a981ea9ce93138cb855e66|372be2fa33d5836cdcf8c1867e6900c2|54bb0b4a353b89c42e63b8e8bd6ea504)$">
|
2390
|
+
<description>Jellyseerr</description>
|
2391
|
+
<!-- favicon.ico-->
|
2392
|
+
|
2393
|
+
<example>cc21dae362a981ea9ce93138cb855e66</example>
|
2394
|
+
<!-- favicon-16x16.png-->
|
2395
|
+
|
2396
|
+
<example>372be2fa33d5836cdcf8c1867e6900c2</example>
|
2397
|
+
<!-- favicon-32x32.png-->
|
2398
|
+
|
2399
|
+
<example>54bb0b4a353b89c42e63b8e8bd6ea504</example>
|
2400
|
+
<param pos="0" name="service.vendor" value="Jellyseerr"/>
|
2401
|
+
<param pos="0" name="service.product" value="Jellyseerr"/>
|
2402
|
+
</fingerprint>
|
2403
|
+
|
2404
|
+
<fingerprint pattern="^d6abc57c65b787c0418803ffc75a7fa0$">
|
2405
|
+
<description>MeterSphere - Open-source Continuous Testing Platform</description>
|
2406
|
+
<example>d6abc57c65b787c0418803ffc75a7fa0</example>
|
2407
|
+
<param pos="0" name="service.vendor" value="MeterSphere"/>
|
2408
|
+
<param pos="0" name="service.product" value="MeterSphere"/>
|
2409
|
+
<param pos="0" name="service.cpe23" value="cpe:/a:metersphere:metersphere:-"/>
|
2410
|
+
</fingerprint>
|
2411
|
+
|
2412
|
+
<fingerprint pattern="^(?:eddb2b697c8c3dab5a9572de564976d1|b0f000f8041a6f1d2c366972b1dbad69)$">
|
2413
|
+
<description>FatPipe Networks device web interface</description>
|
2414
|
+
<!--
|
2415
|
+
favicon.ico from multiple products and builds:
|
2416
|
+
* FatPipe MPVPN versions: 9.1.2r161p26, 9.1.2r164p5
|
2417
|
+
* FatPipe IPVPN versions: 9.1.2r129, 10.1.2r60p89
|
2418
|
+
* FatPipe WARP versions: 9.1.2r161p19, 9.1.2r161p26, 9.1.2r185
|
2419
|
+
* FatPipe SDWAN versions: unknown
|
2420
|
+
-->
|
2421
|
+
|
2422
|
+
<example>eddb2b697c8c3dab5a9572de564976d1</example>
|
2423
|
+
<!--
|
2424
|
+
favicon.ico from multiple products and builds:
|
2425
|
+
* FatPipe MPVPN version 9.1.2r161p26 to 9.1.2r164p5
|
2426
|
+
* FatPipe IPVPN versions: 9.1.2r129
|
2427
|
+
* FatPipe WARP versions: 9.1.2r161p19, 9.1.2r161p26, 9.1.2r185
|
2428
|
+
-->
|
2429
|
+
|
2430
|
+
<example>b0f000f8041a6f1d2c366972b1dbad69</example>
|
2431
|
+
<param pos="0" name="os.vendor" value="FatPipe Networks"/>
|
2432
|
+
<param pos="0" name="hw.vendor" value="FatPipe Networks"/>
|
2433
|
+
</fingerprint>
|
2434
|
+
|
2435
|
+
<fingerprint pattern="^619e4452da00dad6c3d7b5fd99b9390e$">
|
2436
|
+
<description>3CX Phone System Management Console</description>
|
2437
|
+
<example>619e4452da00dad6c3d7b5fd99b9390e</example>
|
2438
|
+
<param pos="0" name="service.vendor" value="3CX"/>
|
2439
|
+
<param pos="0" name="service.product" value="3CX Web Server"/>
|
2440
|
+
<param pos="0" name="service.cpe23" value="cpe:/a:3cx:3cx_web_server:-"/>
|
2441
|
+
</fingerprint>
|
2442
|
+
|
2443
|
+
<fingerprint pattern="^(?:4764ad78b4c0d93bc48d4d0df3b36c7e|8d8030454ec1d7f96c8fdf670d4eb3c6)$">
|
2444
|
+
<description>PaperCut MF and PaperCut NG - print management system</description>
|
2445
|
+
<!--
|
2446
|
+
favicon.ico across two products and multiple builds
|
2447
|
+
* PaperCut MF builds: 54736 to 65997
|
2448
|
+
* PaperCut NG builds: 59505
|
2449
|
+
-->
|
2450
|
+
|
2451
|
+
<example>4764ad78b4c0d93bc48d4d0df3b36c7e</example>
|
2452
|
+
<!-- favicon.ico from PaperCut MF builds: 47777 -->
|
2453
|
+
|
2454
|
+
<example>8d8030454ec1d7f96c8fdf670d4eb3c6</example>
|
2455
|
+
<param pos="0" name="service.vendor" value="PaperCut"/>
|
2456
|
+
</fingerprint>
|
2457
|
+
|
2458
|
+
<fingerprint pattern="^57801ef5135f6a6e8ea69baef85f8607$">
|
2459
|
+
<description>frp - fast reverse proxy</description>
|
2460
|
+
<!-- favicon.ico from frp version 0.48.0 -->
|
2461
|
+
|
2462
|
+
<example>57801ef5135f6a6e8ea69baef85f8607</example>
|
2463
|
+
<param pos="0" name="service.vendor" value="frp"/>
|
2464
|
+
<param pos="0" name="service.product" value="frp"/>
|
2465
|
+
</fingerprint>
|
2466
|
+
|
2467
|
+
<fingerprint pattern="^(?:924a68d347c80d0e502157e83812bb23|f1ac749564d5ba793550ec6bdc472e7c|ef9c0362bf20a086bb7c2e8ea346b9f0)$">
|
2468
|
+
<description>Roundcube Webmail</description>
|
2469
|
+
<!-- favicon.ico from Roundcube Webmail version 1.5.0+ -->
|
2470
|
+
|
2471
|
+
<example>924a68d347c80d0e502157e83812bb23</example>
|
2472
|
+
<!-- favicon.ico from Roundcube Webmail up to version 1.4.13 -->
|
2473
|
+
|
2474
|
+
<example>f1ac749564d5ba793550ec6bdc472e7c</example>
|
2475
|
+
<example>ef9c0362bf20a086bb7c2e8ea346b9f0</example>
|
2476
|
+
<param pos="0" name="service.vendor" value="Roundcube"/>
|
2477
|
+
<param pos="0" name="service.product" value="Webmail"/>
|
2478
|
+
<param pos="0" name="service.cpe23" value="cpe:/a:roundcube:webmail:-"/>
|
2479
|
+
</fingerprint>
|
2480
|
+
|
2349
2481
|
</fingerprints>
|
data/recog/xml/ftp_banners.xml
CHANGED
@@ -615,7 +615,7 @@ more text</example>
|
|
615
615
|
<param pos="0" name="os.family" value="z/OS"/>
|
616
616
|
<param pos="0" name="os.device" value="Mainframe"/>
|
617
617
|
<param pos="1" name="os.version"/>
|
618
|
-
<param pos="0" name="os.cpe23" value="cpe:/o:ibm:z
|
618
|
+
<param pos="0" name="os.cpe23" value="cpe:/o:ibm:z%2fos:{os.version}"/>
|
619
619
|
<param pos="2" name="host.name"/>
|
620
620
|
</fingerprint>
|
621
621
|
|