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.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +4 -0
  3. data/Gemfile.lock +29 -0
  4. data/ident.rb +269 -0
  5. data/intrigue-ident.gemspec +22 -0
  6. data/lib/check_factory.rb +22 -0
  7. data/lib/checks/akamai.rb +22 -0
  8. data/lib/checks/amazon.rb +26 -0
  9. data/lib/checks/aruba.rb +21 -0
  10. data/lib/checks/asp_net.rb +68 -0
  11. data/lib/checks/atlassian.rb +55 -0
  12. data/lib/checks/base.rb +13 -0
  13. data/lib/checks/chef.rb +31 -0
  14. data/lib/checks/cisco.rb +33 -0
  15. data/lib/checks/citrix.rb +24 -0
  16. data/lib/checks/cloudflare.rb +59 -0
  17. data/lib/checks/cloudfront.rb +41 -0
  18. data/lib/checks/cpanel.rb +23 -0
  19. data/lib/checks/django.rb +22 -0
  20. data/lib/checks/drupal.rb +26 -0
  21. data/lib/checks/f5.rb +24 -0
  22. data/lib/checks/fastly.rb +22 -0
  23. data/lib/checks/generic.rb +23 -0
  24. data/lib/checks/gitlab.rb +22 -0
  25. data/lib/checks/google.rb +23 -0
  26. data/lib/checks/grafana.rb +22 -0
  27. data/lib/checks/jenkins.rb +40 -0
  28. data/lib/checks/joomla.rb +23 -0
  29. data/lib/checks/limesuvey.rb +22 -0
  30. data/lib/checks/lithium.rb +30 -0
  31. data/lib/checks/magento.rb +22 -0
  32. data/lib/checks/mcafee.rb +22 -0
  33. data/lib/checks/mediawiki.rb +38 -0
  34. data/lib/checks/microsoft.rb +69 -0
  35. data/lib/checks/nagios.rb +22 -0
  36. data/lib/checks/oracle.rb +38 -0
  37. data/lib/checks/palo_alto.rb +23 -0
  38. data/lib/checks/pardot.rb +22 -0
  39. data/lib/checks/pfsense.rb +25 -0
  40. data/lib/checks/phpmyadmin.rb +22 -0
  41. data/lib/checks/rabbitmq.rb +29 -0
  42. data/lib/checks/spring.rb +31 -0
  43. data/lib/checks/team_city.rb +22 -0
  44. data/lib/checks/telerik.rb +25 -0
  45. data/lib/checks/tomcat.rb +22 -0
  46. data/lib/checks/varnish.rb +27 -0
  47. data/lib/checks/wordpress.rb +120 -0
  48. data/lib/checks/wp_engine.rb +22 -0
  49. 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
@@ -0,0 +1,13 @@
1
+ module Intrigue
2
+ module Ident
3
+ module Check
4
+ class Base
5
+
6
+ def self.inherited(base)
7
+ CheckFactory.register(base)
8
+ end
9
+
10
+ end
11
+ end
12
+ end
13
+ end
@@ -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\ (.*)\ &mdash;/)[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
@@ -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