File: plugin-tutorial-7.rb

package info (click to toggle)
whatweb 0.6.1-1
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 23,948 kB
  • sloc: ruby: 43,493; sh: 213; makefile: 41
file content (141 lines) | stat: -rw-r--r-- 6,168 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
##
# This file is part of WhatWeb and may be subject to
# redistribution and commercial restrictions. Please see the WhatWeb
# web site for more information on licensing and terms of use.
# https://morningstarsecurity.com/research/whatweb
##
Plugin.define do
	name "Plugin-Tutorial-7"
	authors [
		"Your preferred name <email@address>", # v0.1 # 2019-01-01 # Created plugin
		# Your preferred name # v0.2 # 2019-01-11 # Added cookie detection
		# Your preferred name # v0.3 # 2019-03-17 # Added plenty of example matches
	]
	version "0.3"
	description "Describe what the plugin identifies"
	website "http://example.com/"

	# Dorks # 
	dorks [
	'"Generic CMS login"',
	'Generic login register linkname',
	]

	# A comment block here is a good place to make notes for yourself and others


	# This is the matches array. 
	# Each match is treated independently.


	##
	# These are the symbols that can be used in matches.
	#
	## Pattern Matching ##
	# :regexp        -- A regular expression in Ruby format, eg. /^foobar$/
	# :text          -- Case insensitive text
	# :ghdb          -- Google Hack Database format. This supports the use of intitle:, inurl: and minus.
	# :md5           -- The MD5 sum hash of the HTTP response body
	# :tagpattern    -- A list of HTML tag names.
	#
	## Where to Search ##
	# :search        -- Can be "body" (default), "all", "headers", or "headers[x]" for a specific HTTP header
	#
	## Naming the plugin match ##
	# :name          -- You can optionally name the match. This name is displayed in verbose output.
	#
	## Returning Data ##
	#  Each of these symbols can be a regular expression or text.
	#
	# :version       -- The version
	# :account       -- A user account name
	# :module        -- A module name
	# :make          -- The make, e.g. NetGear
	# :model         -- The model, e.g. SpeedErr
	# :firmware      -- The firmware, e.g. 6.14.14
	# :filepath      -- A filepath. These can be displayed in error messages
	# :string        -- This is to return data that isn't covered by the symbols above. E.g. an email address.
	#
	## How certain is this pattern? ##
	# :certainty     -- how certain is this match. 100 is certain (default), 75 is probably, and 25 is maybe
	#
	## Limit the match to a URL path or an HTTP status ##
	# :url            -- you can combine this with other variables or use by itself
	# :status         -- The HTTP status of the response
	##


	# Matches #
	matches [

		# This searches for a text string. 
		{ :text => "This page was generated by <b>Generic CMS</b>" },

		# This searches for a regular expression. Note that the slashes are escaped.
		{ :regexp => /This page was generated by <a href="http:\/\/www.genericcms.com\/en\/products\/generic-cms\/">Generic CMS<\/a>/ },

		# This searches for a text string and the match has a name that appears in verbose output
		{ :name => "Meta generator",  :text => '<meta name="generator" content="(c) by Generic CMS"' },

		# The :certainty symbol is used to note matches that are not 100% certain.
		# 		:certainty => 100 is certain' (default)
		#  		:certainty => 75 is probably
		#  		:certainty => 25 is maybe
		 
		# :certainty is 25. If the title tag is matched, then maybe this webpage is the Generic CMS
		{ :name => "title", :certainty => 25, :text => "Generic Links from Generic CMS" }, 

		# :certainty is 75. This means that if the title tag is matched, then this webpage is probably the Generic CMS
		# This plugin match is split across multiple lines. This can aid readability.
		{ :name => "title", 
		  :certainty => 75, 
		  :text => "<title>Generic CMS Homepage</title>" }, 


		# check the presence of an HTTP header
		{ :search => "headers[genericxxx]", :regexp => /^.*$/ },

		# return the contents of an HTTP header
		{ :search => "headers[genericversion]", :version => /^(.*)$/ },


		# This returns the version.
		# The :version symbol is a regular expression. Whatever is found within the parenthesis is returned as the value of :version
		{ :name => "Meta Generator", :version => /<meta name="generator" content="\(c\) by Generic CMS (v[^ ]+)/ }, 

		# This returns a module.
		# The :module symbol is also a regular expression like :version. Note that the parenthesis is now after the text, "with modules"
		{ :name => "Version in Meta Generator", :version => /<meta name="generator" content="\(c\) by Generic CMS v[0-9]+ with modules ([^"]+)/ }, 

		# You don't always have the return the first result from the regular expression.
		# Note the :offset => 1. This returns the result of the second set of parentheses within the regular expression
		# The :module symbol is also a regular expression like :version. Note that the parenthesis is now after the text, "with modules"
		{ :name => "Version in Meta Generator", :version => /<meta name="generator" content="\(c\) by Generic CMS v([0-9]+) with modules ([^"]+)/, :offset => 1 }, 


		# :url can be used to limit a match to a URL path
		# This matches if both the URL path and the text is found
		# When WhatWeb is in aggressive mode, it will check if /admin/login.php exists
		{ :url => '/admin/generic-cms-login.php', :text => 'Generic CMS Login Panel' },


		# Generic CMS has a default favicon that displays the logo of the web application
		# In aggressive mdoe, the /favicon.ico path will be fetched
		# This matches if the HTTP response body, in this case the favicon.co image, has the follow MD5sum hash.
		{ :url => "/favicon.ico", :md5 => '12dead87beef7f00d90cafed82babe5' },


		# GHDB matches pages with a Google Hack Database format. 
		# Very few plugins use the :ghdb symbol.
		{ :ghdb => 'intitle:"Generic CMS" login register', :certainty => 25 },


		# This match uses :tagpattern. This is a comma delimited list of all the HTML tags in the webpage. 
		# Very few plugins use :tagpattern
		{ :url => "/generic-login.php",
		  :name => "Tag pattern for login page", 
		  :tagpattern => "!DOCTYPE,html,head,title,/title,meta,link,link,script,/script,meta,/head,body,div,h1,a,/a,/h1,form,p,label,br,input,/label,/p,p,label,br,input,/label,/p,p,label,input,/label,/p,p,input,input,input,/p,/form,p,a,/a,/p,p,a,/a,/p,/div,script,/script,/body,/html" },

	] 

end