# frozen_string_literal: true
##
# 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.1
# Based on the contao plugin
WhatWeb::Plugin.define "Contao" do
@author = "Eric Sesterhenn"
@version = "0.1"
@description = "Contao is an OpenSource CMS written in PHP"
@website = "www.contao.org"
@matches = [
{ text: 'This website is powered by Contao Open Source CMS :: Licensed under GNU/LGPL' },
{ text: '' }
]
def aggressive(target)
m = []
url = URI.join(target.uri.to_s, "/contao/").to_s
new_target = WhatWeb::Target.new(url)
if /
[^<]+Contao[^<]+CMS ([^<]+)<\/title>/.match?(new_target.body)
version = body.scan(/[^<]+Contao[^<]+CMS ([^<]+)<\/title>/)[0][0]
m << { name: "login page version", version: version }
end
# the paths are relative to the url path if they don't start with /
# this path, with this md5 = this version
files = [
{ md5: '0469d85ecb18e9a1ede2b0b2d5aa79a9', version: '2.9.0 (2010-07-02)', path: 'CHANGELOG.md' },
{ md5: '24fb115dd0722792961d04b62353954c', version: '2.9.1 (2010-08-09)', path: 'CHANGELOG.md' },
{ md5: '0da80d24450b841298c7ce3cac558e67', version: '2.9.2 (2010-12-02)', path: 'CHANGELOG.md' },
{ md5: 'ef3fde9f072a6aa11b58fa8c84740a4a', version: '2.9.3 (2011-01-06)', path: 'CHANGELOG.md' },
{ md5: 'c793826598074586e98728855620ffd0', version: '2.9.4 (2011-03-08)', path: 'CHANGELOG.md' },
{ md5: '782bb70f82ee7e1a137f20c5e5cce77c', version: '2.9.5 (2011-05-18)', path: 'CHANGELOG.md' },
{ md5: '5aa9e3efbfa5bb1ccb0cc514651d9cdc', version: '2.10.0 (2011-08-11)', path: 'CHANGELOG.md' },
{ md5: 'ad37d582d58f6c247e0913b1f5800476', version: '2.10.1 (2011-08-31)', path: 'CHANGELOG.md' },
{ md5: 'f39cba7429e6ef6d05c42215357dc17a', version: '2.10.2 (2011-10-10)', path: 'CHANGELOG.md' },
{ md5: '008b6f59ae7a0f3cebdfa835ae009b87', version: '2.10.3 (2011-11-07)', path: 'CHANGELOG.md' },
{ md5: 'c95232b9f7744f9cd29fd8da23083b9a', version: '2.10.4 (2011-12-30)', path: 'CHANGELOG.md' },
{ md5: '7e3d69c4f2ecd792435c4afc6770a5ae', version: '2.11.0 (2012-02-15)', path: 'CHANGELOG.md' },
{ md5: '91a4f4c10be6c6dab55b2c51a5e8e381', version: '2.11.2 (XXXX-XX-XX)', path: 'CHANGELOG.md' },
{ md5: '10465b6d6f8dbda6caeeb25e740ff525', version: '2.11.2 (2012-03-14)', path: 'CHANGELOG.md' },
{ md5: '62e2b98bc73e3f895428e2b18d378e83', version: '2.11.3 (2012-05-04)', path: 'CHANGELOG.md' },
{ md5: '8c13ae28a7c70c603521debbb9517133', version: '2.11.4 (2012-06-12)', path: 'CHANGELOG.md' },
{ md5: 'b0689b2c20f3dc8af30030c681ea3a62', version: '2.11.5 (2012-07-25)', path: 'CHANGELOG.md' },
{ md5: '2683898890efc3cea7af0d8d996ade58', version: '2.11.6 (2012-09-26)', path: 'CHANGELOG.md' },
{ md5: '5000fac5d77fe0aacb1871cb12551675', version: '2.11.7 (2012-11-29)', path: 'CHANGELOG.md' },
{ md5: 'd705ac48bd6328771f2956e234d60c87', version: '2.11.8 (2013-01-07)', path: 'CHANGELOG.md' },
{ md5: '190c9e3309125ee3d6ccad71578fd45c', version: '2.11.9 (2013-02-05)', path: 'CHANGELOG.md' },
{ md5: '53a1a84a687662329f5e870563253229', version: '3.0.0/3.0.1', path: 'README.md' },
{ md5: 'c46c1e2bbc8c1a33682de0c0a9f64b87', version: '3.0.2 or later', path: 'README.md' },
]
# Fetch and hash files
to_download = files.map { |x| x[:path] }.sort.uniq
downloads = {}
to_download.each do |d|
url = URI.join(target.uri.to_s, d).to_s
new_target = WhatWeb::Target.new(url)
downloads[d] = { md5sum: new_target.md5sum }
end
# Compare file hashes to known hashes
version = nil
files.each do |thisfile|
unless downloads[thisfile[:path]].nil?
version = thisfile[:version] if downloads[thisfile[:path]][:md5sum] == thisfile[:md5]
end
end
# Set version if present
unless version.nil?
m << { name: "md5 sums of files", version: version }
end
m
end
end