File: ViewVC.rb

package info (click to toggle)
whatweb 0.4.8~git20120606-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 7,956 kB
  • sloc: ruby: 53,738; sh: 577; makefile: 34
file content (127 lines) | stat: -rw-r--r-- 4,333 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
##
# 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.
# http://www.morningstarsecurity.com/research/whatweb
##
# Version 0.2 # 2011-03-19 #
# Added local file path aggressive match
##
Plugin.define "ViewVC" do
author "Brendan Coles <bcoles@gmail.com>" # 2011-03-18
version "0.2"
description "ViewVC (formerly known as ViewCVS) is a browser interface for CVS and Subversion version control repositories. It generates templatized HTML to present navigable directory, revision, and change log listings. It can display specific versions of files as well as diffs between those versions. - Homepage: http://viewvc.tigris.org/"

# Google results as at 2011-03-19 #
# 288 for "Powered by viewvc"
# 107 for inurl:viewvc.cgi ext:cgi
#  99 for inurl:viewcvs.cgi ext:cgi

# Examples #
examples %w|
webwork.maa.org/viewvc
gcc.gnu.org/viewcvs
src.chromium.org/viewvc/
sources.gentoo.org
cvs.fedoraproject.org/viewvc/
cvs.rpmfusion.org/viewvc/
repoze.org/viewcvs/
www.x86-64.org/viewvc/
svn.cs.brynmawr.edu/viewvc/
www.ncbi.nlm.nih.gov/viewvc/
anonsvn.mit.edu/viewvc/
anonsvn.internet2.edu/cgi-bin/viewvc.cgi
svn.middleware.georgetown.edu/view/
www.gelato.unsw.edu.au/cgi-bin/viewvc.cgi
cvs.gnupg.org/cgi-bin/viewcvs.cgi
www.dlib.indiana.edu/cgi-bin/viewvc/viewvc.cgi
version.1ec5.org/viewvc.cgi
www.farmanager.com/viewvc/
rdos.net/vc/viewvc.cgi
svn.ehas.org/viewvc.cgi
www.tetrasys.homelinux.org/cgi-bin/viewvc.cgi
wikitex.org/viewvc/
debianlive.org/bliss/viewvc/
www.x86-64.org/viewvc/
svn.cs.brynmawr.edu/viewvc/
www.ncbi.nlm.nih.gov/viewvc/
anonsvn.mit.edu/viewvc/
anonsvn.internet2.edu/cgi-bin/viewvc.cgi
svn.middleware.georgetown.edu/view/
www.gelato.unsw.edu.au/cgi-bin/viewvc.cgi
cvs.gnupg.org/cgi-bin/viewcvs.cgi
www.dlib.indiana.edu/cgi-bin/viewvc/viewvc.cgi
version.1ec5.org/viewvc.cgi
www.farmanager.com/viewvc/
rdos.net/vc/viewvc.cgi
svn.ehas.org/viewvc.cgi
www.tetrasys.homelinux.org/cgi-bin/viewvc.cgi
opensvn.csie.org/viewcvs.cgi
www.freepascal.org/cgi-bin/viewcvs.cgi/
cvs.snort.org/viewcvs.cgi/snort/
www.kaffe.org/cgi-bin/viewcvs.cgi
svn.ircd-hybrid.org:8000/viewcvs.cgi
viewvc.slicer.org/viewcvs.cgi
websvn.samba.org/cgi-bin/viewcvs.cgi
www.cs.uoregon.edu/research/ktau/viewcvs-0.9.4/cgi/viewcvs.cgi
|

# Matches #
matches [

# Title
{ :text=>'<title>ViewVC Repository Listing</title>' },

# HTML Comment
{ :text=>'<!-- ViewVC :: http://www.viewvc.org/ -->' },
{ :text=>'<!-- ViewCVS -- http://viewcvs.sourceforge.net/' },

# Version Detection # Powered by link
{ :version=>/<td>Powered by <a href="http:\/\/viewvc.tigris.org\/">ViewVC ([^<]+)<\/a><\/td>/ },
{ :version=>/Powered by <a href="http:\/\/viewcvs.sourceforge.net\/">ViewCVS ([^<]+)<\/a><\/td>/ },

# Version Detection # Meta Generator
{ :version=>/<meta name="generator" content="ViewVC ([^"]+)" \/>/ },
{ :version=>/<meta name="generator" content="ViewCVS ([^"]+)">/ },

]

# Aggressive #
def aggressive
	m=[]

	# Local File Path Detection # Find application base path
	if @base_uri.path =~ /^[^\n]*\/(viewcvs|viewvc)/i

		# Generate Random File Name
                random_fname=rand(36**6).to_s(36)

		# Detect /viewcv/ or /viewcvs/
		target_url = @base_uri.path.scan(/^([^\n]*\/viewvc\/|[^\n]*\/viewcvs\/)/i).flatten.first+"/*docroot*/"+random_fname if @base_uri.path =~ /^([^\n]*\/viewvc\/|[^\n]*\/viewcvs\/)/i

		# Detect /viewvc or /viewcvs
		target_url = @base_uri.path.scan(/^([^\n]*\/viewvc$|^[^\n]*\/viewcvs$)/i).flatten.first+"/*docroot*/"+random_fname if @base_uri.path =~ /^([^\n]*\/viewvc$|[^\n]*\/viewcvs$)/i

		# Detect /viewvc.cgi or /viewcvs.cgi
		target_url = @base_uri.path.scan(/^([^\n]*\/viewvc\.cgi|[^\n]*\/viewcvs\.cgi)/i).flatten.first+"/*docroot*/"+random_fname if @base_uri.path =~ /^([^\n]*\/viewvc\.cgi|[^\n]*\/viewcvs\.cgi)/i

		# Open application base url + "/*docroot*/" + random filename
		unless target_url.nil?

			target = URI.join(@base_uri.to_s,target_url).to_s
			status,url,ip,body,headers=open_target(target)

			# Extract local file path
			m << { :filepath=>body.scan(/\(\[Errno 2\] No such file or directory: '([^']+)#{random_fname}'\)/).flatten } if body =~ /\(\[Errno 2\] No such file or directory: '([^']+)#{random_fname}'\)/

		end

	end

	# Return aggressive matches
	m
end

end