intrigue-ident 0.1
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 +7 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +29 -0
- data/ident.rb +269 -0
- data/intrigue-ident.gemspec +22 -0
- data/lib/check_factory.rb +22 -0
- data/lib/checks/akamai.rb +22 -0
- data/lib/checks/amazon.rb +26 -0
- data/lib/checks/aruba.rb +21 -0
- data/lib/checks/asp_net.rb +68 -0
- data/lib/checks/atlassian.rb +55 -0
- data/lib/checks/base.rb +13 -0
- data/lib/checks/chef.rb +31 -0
- data/lib/checks/cisco.rb +33 -0
- data/lib/checks/citrix.rb +24 -0
- data/lib/checks/cloudflare.rb +59 -0
- data/lib/checks/cloudfront.rb +41 -0
- data/lib/checks/cpanel.rb +23 -0
- data/lib/checks/django.rb +22 -0
- data/lib/checks/drupal.rb +26 -0
- data/lib/checks/f5.rb +24 -0
- data/lib/checks/fastly.rb +22 -0
- data/lib/checks/generic.rb +23 -0
- data/lib/checks/gitlab.rb +22 -0
- data/lib/checks/google.rb +23 -0
- data/lib/checks/grafana.rb +22 -0
- data/lib/checks/jenkins.rb +40 -0
- data/lib/checks/joomla.rb +23 -0
- data/lib/checks/limesuvey.rb +22 -0
- data/lib/checks/lithium.rb +30 -0
- data/lib/checks/magento.rb +22 -0
- data/lib/checks/mcafee.rb +22 -0
- data/lib/checks/mediawiki.rb +38 -0
- data/lib/checks/microsoft.rb +69 -0
- data/lib/checks/nagios.rb +22 -0
- data/lib/checks/oracle.rb +38 -0
- data/lib/checks/palo_alto.rb +23 -0
- data/lib/checks/pardot.rb +22 -0
- data/lib/checks/pfsense.rb +25 -0
- data/lib/checks/phpmyadmin.rb +22 -0
- data/lib/checks/rabbitmq.rb +29 -0
- data/lib/checks/spring.rb +31 -0
- data/lib/checks/team_city.rb +22 -0
- data/lib/checks/telerik.rb +25 -0
- data/lib/checks/tomcat.rb +22 -0
- data/lib/checks/varnish.rb +27 -0
- data/lib/checks/wordpress.rb +120 -0
- data/lib/checks/wp_engine.rb +22 -0
- metadata +133 -0
@@ -0,0 +1,55 @@
|
|
1
|
+
module Intrigue
|
2
|
+
module Ident
|
3
|
+
module Check
|
4
|
+
class Atlassian < Intrigue::Ident::Check::Base
|
5
|
+
|
6
|
+
def generate_checks(uri)
|
7
|
+
[
|
8
|
+
{
|
9
|
+
:name => "Atlassian BitBucket",
|
10
|
+
:description => "Atlassian BitBucket",
|
11
|
+
:version => nil,
|
12
|
+
:type => :content_body,
|
13
|
+
:content => /com.atlassian.bitbucket.server/i,
|
14
|
+
:paths => ["#{uri}"]
|
15
|
+
},
|
16
|
+
{
|
17
|
+
:name => "Atlassian Confluence",
|
18
|
+
:description => "Atlassian Confluence",
|
19
|
+
:version => nil,
|
20
|
+
:type => :content_headers,
|
21
|
+
:content => /X-Confluence-Request-Time/i,
|
22
|
+
:paths => ["#{uri}"]
|
23
|
+
},
|
24
|
+
{
|
25
|
+
:name => "Atlassian Crucible",
|
26
|
+
:description => "Atlassian Crucible",
|
27
|
+
:version => nil,
|
28
|
+
:type => :content_body,
|
29
|
+
:content => /FishEye and Crucible/,
|
30
|
+
:dynamic_version => lambda{|x|
|
31
|
+
if x.body.scan(/Log in to FishEye and Crucible (.*)\</)[0]
|
32
|
+
x.body.scan(/Log in to FishEye and Crucible (.*)\</)[0].first
|
33
|
+
end
|
34
|
+
},
|
35
|
+
:paths => ["#{uri}"]
|
36
|
+
},
|
37
|
+
{
|
38
|
+
:name => "Atlassian Jira",
|
39
|
+
:description => "Atlassian Jira",
|
40
|
+
:version => nil,
|
41
|
+
:type => :content_cookies,
|
42
|
+
:content => /atlassian.xsrf.token/i,
|
43
|
+
:dynamic_version => lambda{ |x|
|
44
|
+
if x.body.scan(/<span id="footer-build-information">(.*)-<span/)[0]
|
45
|
+
x.body.scan(/<span id="footer-build-information">(.*)-<span/)[0].first.gsub("(","")
|
46
|
+
end
|
47
|
+
},
|
48
|
+
:paths => ["#{uri}"]
|
49
|
+
}
|
50
|
+
]
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
data/lib/checks/base.rb
ADDED
data/lib/checks/chef.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
module Intrigue
|
2
|
+
module Ident
|
3
|
+
module Check
|
4
|
+
class Chef < Intrigue::Ident::Check::Base
|
5
|
+
|
6
|
+
def generate_checks(uri)
|
7
|
+
[
|
8
|
+
{
|
9
|
+
:name => "Chef Server",
|
10
|
+
:description => "Chef Server",
|
11
|
+
:version => nil,
|
12
|
+
:type => :content_body,
|
13
|
+
:content => /<title>Chef Server<\/title>/,
|
14
|
+
:dynamic_version => lambda{|x| x.body.scan(/Version\ (.*)\ —/)[0].first },
|
15
|
+
:paths => ["#{uri}"]
|
16
|
+
},
|
17
|
+
{
|
18
|
+
:name => "Chef Server",
|
19
|
+
:description => "Chef Server",
|
20
|
+
:version => nil,
|
21
|
+
:type => :content_cookies,
|
22
|
+
:content => /chef-manage/i,
|
23
|
+
:paths => ["#{uri}"]
|
24
|
+
}
|
25
|
+
]
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/checks/cisco.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
module Intrigue
|
2
|
+
module Ident
|
3
|
+
module Check
|
4
|
+
class Cisco < Intrigue::Ident::Check::Base
|
5
|
+
|
6
|
+
def generate_checks(uri)
|
7
|
+
[
|
8
|
+
{
|
9
|
+
:name => "Cisco SSL VPN",
|
10
|
+
:description => "Cisco SSL VPN",
|
11
|
+
:tags => ["tech:vpn"],
|
12
|
+
:version => nil,
|
13
|
+
:type => :content_cookies,
|
14
|
+
:content => /webvpn/,
|
15
|
+
:hide => false,
|
16
|
+
:paths => ["#{uri}"]
|
17
|
+
},
|
18
|
+
{
|
19
|
+
:name => "Cisco Router",
|
20
|
+
:description => "Cisco Router",
|
21
|
+
:version => nil,
|
22
|
+
:type => :content_headers,
|
23
|
+
:content => /server: cisco-IOS/,
|
24
|
+
:hide => false,
|
25
|
+
:paths => ["#{uri}"]
|
26
|
+
}
|
27
|
+
]
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Intrigue
|
2
|
+
module Ident
|
3
|
+
module Check
|
4
|
+
class Citrix < Intrigue::Ident::Check::Base
|
5
|
+
|
6
|
+
def generate_checks(uri)
|
7
|
+
[
|
8
|
+
{
|
9
|
+
:name => "Citrix Netscaler Gateway",
|
10
|
+
:description => "Citrix Netscaler Gateway",
|
11
|
+
:tags => ["tech:vpn"],
|
12
|
+
:version => nil,
|
13
|
+
:type => :content_body,
|
14
|
+
:content => /<title>Netscaler Gateway/,
|
15
|
+
:hide => false,
|
16
|
+
:paths => ["#{uri}"]
|
17
|
+
}
|
18
|
+
]
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Intrigue
|
2
|
+
module Ident
|
3
|
+
module Check
|
4
|
+
class Cloudflare < Intrigue::Ident::Check::Base
|
5
|
+
|
6
|
+
def generate_checks(uri)
|
7
|
+
[
|
8
|
+
{
|
9
|
+
:name => "Cloudflare",
|
10
|
+
:description => "Cloudflare Accelerated Page",
|
11
|
+
:version => "",
|
12
|
+
:type => :content_cookies,
|
13
|
+
:content => /__cfduid/i,
|
14
|
+
:paths => ["#{uri}"]
|
15
|
+
},
|
16
|
+
{
|
17
|
+
:name => "Cloudflare",
|
18
|
+
:description => "Cloudflare Server",
|
19
|
+
:version => "",
|
20
|
+
:type => :content_headers,
|
21
|
+
:content => /cloudflare-nginx/i,
|
22
|
+
:paths => ["#{uri}"]
|
23
|
+
},
|
24
|
+
{
|
25
|
+
:name => "Cloudflare",
|
26
|
+
:description => "Cloudflare - Direct IP Access",
|
27
|
+
:tags => ["error_page"],
|
28
|
+
:version => "",
|
29
|
+
:type => :content_body,
|
30
|
+
:content => /<title>Direct IP access not allowed \| Cloudflare/,
|
31
|
+
:hide => true,
|
32
|
+
:paths => ["#{uri}"]
|
33
|
+
},
|
34
|
+
{
|
35
|
+
:name => "Cloudflare",
|
36
|
+
:description => "Cloudflare Error",
|
37
|
+
:tags => ["error_page"],
|
38
|
+
:version => "",
|
39
|
+
:type => :content_body,
|
40
|
+
:content => /cferror_details/,
|
41
|
+
:hide => true,
|
42
|
+
:paths => ["#{uri}"]
|
43
|
+
},
|
44
|
+
{
|
45
|
+
:name => "Cloudflare",
|
46
|
+
:description => "Cloudfront Error - Direct IP Access",
|
47
|
+
:version => "",
|
48
|
+
:type => :content_body,
|
49
|
+
:content => /403\ Forbidden<\/h1><\/center>\n<hr><center>cloudflare<\/center>/,
|
50
|
+
:hide => true,
|
51
|
+
:paths => ["#{uri}"]
|
52
|
+
}
|
53
|
+
]
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Intrigue
|
2
|
+
module Ident
|
3
|
+
module Check
|
4
|
+
class Cloudfront < Intrigue::Ident::Check::Base
|
5
|
+
|
6
|
+
def generate_checks(uri)
|
7
|
+
[
|
8
|
+
{
|
9
|
+
:name => "Cloudfront - Error (Body)",
|
10
|
+
:description => "Cloudfront - no configured hostname",
|
11
|
+
:version => "",
|
12
|
+
:type => :content_body,
|
13
|
+
:content => /ERROR: The request could not be satisfied/,
|
14
|
+
:hide => true,
|
15
|
+
:paths => ["#{uri}"]
|
16
|
+
},
|
17
|
+
{
|
18
|
+
:name => "Cloudfront - Error (Headers)",
|
19
|
+
:description => "Cloudfront - no configured hostname",
|
20
|
+
:version => "",
|
21
|
+
:type => :content_headers,
|
22
|
+
:content => /Error from cloudfront/,
|
23
|
+
:hide => true,
|
24
|
+
:paths => ["#{uri}"]
|
25
|
+
},
|
26
|
+
{
|
27
|
+
:name => "Cloudfront - 403 (Body)",
|
28
|
+
:description => "Cloudfront - 403",
|
29
|
+
:version => "",
|
30
|
+
:type => :content_body,
|
31
|
+
:content => /<h1>403 Forbidden<\/h1><\/center>\n<hr><center>cloudflare/,
|
32
|
+
:hide => true,
|
33
|
+
:paths => ["#{uri}"]
|
34
|
+
}
|
35
|
+
]
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Intrigue
|
2
|
+
module Ident
|
3
|
+
module Check
|
4
|
+
class Cpanel < Intrigue::Ident::Check::Base
|
5
|
+
|
6
|
+
def generate_checks(uri)
|
7
|
+
[
|
8
|
+
{
|
9
|
+
:name => "cPanel Hosted - Missing Page",
|
10
|
+
:description => "cPanel Hosted, but either misconfigured, or accessed via ip vs hostname?",
|
11
|
+
:version => nil,
|
12
|
+
:type => :content_body,
|
13
|
+
:content => /URL=\/cgi-sys\/defaultwebpage.cgi/,
|
14
|
+
:hide => true,
|
15
|
+
:paths => ["#{uri}"]
|
16
|
+
}
|
17
|
+
]
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Intrigue
|
2
|
+
module Ident
|
3
|
+
module Check
|
4
|
+
class Django < Intrigue::Ident::Check::Base
|
5
|
+
|
6
|
+
def generate_checks(uri)
|
7
|
+
[
|
8
|
+
{
|
9
|
+
:name => "Django",
|
10
|
+
:description => "Django Admin Page",
|
11
|
+
:version => nil,
|
12
|
+
:type => :content_body,
|
13
|
+
:content => /<title>Log in \| Django site admin<\/title>/,
|
14
|
+
:paths => ["#{uri}/admin"]
|
15
|
+
}
|
16
|
+
]
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Intrigue
|
2
|
+
module Ident
|
3
|
+
module Check
|
4
|
+
class Drupal < Intrigue::Ident::Check::Base
|
5
|
+
|
6
|
+
def generate_checks(uri)
|
7
|
+
[
|
8
|
+
{
|
9
|
+
:name => "Drupal",
|
10
|
+
:description => "Drupal CMS",
|
11
|
+
:version => nil,
|
12
|
+
:type => :content_body,
|
13
|
+
:content => /Drupal/,
|
14
|
+
:dynamic_version => lambda { |x|
|
15
|
+
version = x.body.scan(/^(Drupal.*)[ ,<\.].*$/)[0]
|
16
|
+
return version.first.gsub("Drupal ","").gsub(",","").chomp if version
|
17
|
+
},
|
18
|
+
:paths => ["#{uri}/CHANGELOG.txt"]
|
19
|
+
}
|
20
|
+
]
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/checks/f5.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
module Intrigue
|
2
|
+
module Ident
|
3
|
+
module Check
|
4
|
+
class F5 < Intrigue::Ident::Check::Base
|
5
|
+
|
6
|
+
def generate_checks(uri)
|
7
|
+
[
|
8
|
+
{
|
9
|
+
:name => "F5 BIG-IP APM",
|
10
|
+
:description => "F5 BIG-IP APM",
|
11
|
+
:tags => ["tech:vpn"],
|
12
|
+
:version => nil,
|
13
|
+
:type => :content_cookies,
|
14
|
+
:content => /MRHSession/,
|
15
|
+
:hide => false,
|
16
|
+
:paths => ["#{uri}"]
|
17
|
+
}
|
18
|
+
]
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Intrigue
|
2
|
+
module Ident
|
3
|
+
module Check
|
4
|
+
class Fastly < Intrigue::Ident::Check::Base
|
5
|
+
|
6
|
+
def generate_checks(uri)
|
7
|
+
[
|
8
|
+
{
|
9
|
+
:name => "Fastly",
|
10
|
+
:description => "",
|
11
|
+
:version => "",
|
12
|
+
:type => :content_headers,
|
13
|
+
:content => /x-fastly-backend-reqs/i,
|
14
|
+
:paths => ["#{uri}"]
|
15
|
+
}
|
16
|
+
]
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Intrigue
|
2
|
+
module Ident
|
3
|
+
module Check
|
4
|
+
class Generic < Intrigue::Ident::Check::Base
|
5
|
+
|
6
|
+
def generate_checks(uri)
|
7
|
+
[
|
8
|
+
{
|
9
|
+
:name => "Content Missing (404)",
|
10
|
+
:description => "Content Missing (404) - Could be an API, or just serving something at another location. TODO ... is this ECS-specific? (check header)",
|
11
|
+
:tags => ["error_page"],
|
12
|
+
:version => nil,
|
13
|
+
:type => :content_body,
|
14
|
+
:content => /<title>404 - Not Found<\/title>/,
|
15
|
+
:paths => ["#{uri}"]
|
16
|
+
}
|
17
|
+
]
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Intrigue
|
2
|
+
module Ident
|
3
|
+
module Check
|
4
|
+
class Gitlab < Intrigue::Ident::Check::Base
|
5
|
+
|
6
|
+
def generate_checks(uri)
|
7
|
+
[
|
8
|
+
{
|
9
|
+
:name => "Gitlab",
|
10
|
+
:description => "Gitlab",
|
11
|
+
:version => nil,
|
12
|
+
:type => :content_cookies,
|
13
|
+
:content => /_gitlab_session/i,
|
14
|
+
:paths => ["#{uri}"]
|
15
|
+
}
|
16
|
+
]
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Intrigue
|
2
|
+
module Ident
|
3
|
+
module Check
|
4
|
+
class Google < Intrigue::Ident::Check::Base
|
5
|
+
|
6
|
+
def generate_checks(uri)
|
7
|
+
[
|
8
|
+
{
|
9
|
+
:name => "Google",
|
10
|
+
:description => "Google Missing Page",
|
11
|
+
:type => :content_body,
|
12
|
+
:version => "",
|
13
|
+
:content => /The requested URL <code>\/<\/code> was not found on this server\./,
|
14
|
+
:hide => true,
|
15
|
+
:paths => ["#{uri}"]
|
16
|
+
}
|
17
|
+
]
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|