diff --git a/internal/devtools_browser.py b/internal/devtools_browser.py
index 243637943..104235b7a 100644
--- a/internal/devtools_browser.py
+++ b/internal/devtools_browser.py
@@ -946,7 +946,15 @@ def wappalyzer_detect(self, task, request_headers):
if self.devtools is not None:
try:
logging.debug('wappalyzer_detect')
- detect_script = self.wappalyzer_script(request_headers)
+ cookies = {}
+ response = self.devtools.send_command("Storage.getCookies", {}, wait=True, timeout=30)
+ if response is not None and 'result' in response and 'cookies' in response['result']:
+ for cookie in response['result']['cookies']:
+ name = cookie['name'].lower()
+ if name not in cookies:
+ cookies[name] = []
+ cookies[name].append(cookie['value'])
+ detect_script = self.wappalyzer_script(request_headers, cookies)
response = self.devtools.send_command("Runtime.evaluate",
{'expression': detect_script,
'awaitPromise': True,
@@ -971,7 +979,7 @@ def wappalyzer_detect(self, task, request_headers):
task['page_data']['wappalyzer_failed'] = 1
self.profile_end('dtbrowser.wappalyzer_detect')
- def wappalyzer_script(self, response_headers):
+ def wappalyzer_script(self, response_headers, cookies):
"""Build the wappalyzer script to run in-browser"""
script = None
try:
@@ -1012,6 +1020,7 @@ def wappalyzer_script(self, response_headers):
headers[key].append(value)
script = script.replace('%WAPPALYZER%', wappalyzer)
script = script.replace('%JSON%', json_data)
+ script = script.replace('%COOKIES%', json.dumps(cookies))
script = script.replace('%RESPONSE_HEADERS%', json.dumps(headers))
except Exception:
logging.exception('Error building wappalyzer script')
diff --git a/internal/support/Wappalyzer/script.js b/internal/support/Wappalyzer/script.js
index cc1342afd..0178a6736 100644
--- a/internal/support/Wappalyzer/script.js
+++ b/internal/support/Wappalyzer/script.js
@@ -1,7 +1,8 @@
(async function() {
%WAPPALYZER%;
const json = %JSON%;
- var responseHeaders = %RESPONSE_HEADERS%;
+ const cookies = %COOKIES%;
+ const responseHeaders = %RESPONSE_HEADERS%;
Wappalyzer.setTechnologies(json.technologies);
Wappalyzer.setCategories(json.categories);
@@ -35,6 +36,7 @@
},
{}
)
+
// Run the analysis
const detections = await Wappalyzer.analyze({
url: window.top.location.href,
@@ -42,6 +44,7 @@
css: css,
headers: responseHeaders,
meta: meta,
+ cookies: cookies,
scripts: scripts
});
const dom_detections = await analyzeDom(Wappalyzer.technologies);
diff --git a/internal/support/Wappalyzer/technologies.json b/internal/support/Wappalyzer/technologies.json
index d9546b232..a54b22d9f 100644
--- a/internal/support/Wappalyzer/technologies.json
+++ b/internal/support/Wappalyzer/technologies.json
@@ -324,6 +324,30 @@
"84": {
"name": "Loyalty & rewards",
"priority": 9
+ },
+ "85": {
+ "name": "Feature management",
+ "priority": 9
+ },
+ "86": {
+ "name": "Segmentation",
+ "priority": 9
+ },
+ "87": {
+ "name": "WordPress plugins",
+ "priority": 9
+ },
+ "88": {
+ "name": "Hosting",
+ "priority": 9
+ },
+ "89": {
+ "name": "Translation",
+ "priority": 9
+ },
+ "90": {
+ "name": "Reviews",
+ "priority": 9
}
},
"technologies": {
@@ -332,25 +356,25 @@
1,
6
],
+ "cookies": {
+ "BITRIX_SM_GUEST_ID": "",
+ "BITRIX_SM_LAST_IP": "",
+ "BITRIX_SM_SALE_UID": ""
+ },
"description": "1C-Bitrix is a system of web project management, universal software for the creation, support and successful development of corporate websites and online stores.",
- "icon": "1C-Bitrix.svg",
"headers": {
"Set-Cookie": "BITRIX_",
"X-Powered-CMS": "Bitrix Site Manager"
},
- "cookies": {
- "BITRIX_SM_LAST_IP": "",
- "BITRIX_SM_SALE_UID": "",
- "BITRIX_SM_GUEST_ID": ""
- },
- "scripts": "bitrix(?:\\.info/|/js/main/core)",
+ "icon": "1C-Bitrix.svg",
"implies": "PHP",
- "saas": true,
"pricing": [
"onetime",
"mid",
"recurring"
],
+ "saas": true,
+ "scripts": "bitrix(?:\\.info/|/js/main/core)",
"website": "http://www.1c-bitrix.ru"
},
"33Across": {
@@ -462,17 +486,17 @@
32
],
"description": "AD EBiS is an advertising and marketing platform that offers advertisement effectiveness measurement, access and user analysis.",
- "icon": "ebis.png",
"dom": "a[href*='.ebis.ne.jp/'][target='_blank']",
+ "icon": "ebis.png",
"js": {
"ebis.c.pageurl": ""
},
- "scripts": "\\.ebis\\.ne\\.jp/",
- "saas": true,
"pricing": [
"freemium",
"payg"
],
+ "saas": true,
+ "scripts": "\\.ebis\\.ne\\.jp/",
"website": "http://www.ebis.ne.jp"
},
"AMP": {
@@ -492,13 +516,14 @@
"AMP Plugin": {
"cats": [
1,
- 5
+ 5,
+ 87
],
"icon": "Accelerated-Mobile-Pages.svg",
- "implies": "WordPress",
"meta": {
"generator": "^AMP Plugin v(\\d+\\.\\d+.*)$\\;version:\\1"
},
+ "requires": "WordPress",
"website": "https://amp-wp.org"
},
"AOLserver": {
@@ -738,6 +763,27 @@
],
"website": "https://www.actito.com"
},
+ "ActiveCampaign": {
+ "cats": [
+ 32,
+ 75
+ ],
+ "description": "ActiveCampaign is email and marketing automation software.",
+ "icon": "ActiveCampaign.svg",
+ "js": {
+ "acEnableTracking": ""
+ },
+ "pricing": [
+ "low",
+ "recurring"
+ ],
+ "saas": true,
+ "scripts": [
+ "plugins/activecampaign-subscription-forms/site_tracking\\.js",
+ "\\.activehosted\\.com/"
+ ],
+ "website": "https://www.activecampaign.com"
+ },
"Acuity Scheduling": {
"cats": [
72
@@ -1023,6 +1069,22 @@
"saas": true,
"website": "https://www.adobe.com/analytics/adobe-analytics.html"
},
+ "Adobe Audience Manager": {
+ "cats": [
+ 86
+ ],
+ "cookies": {
+ "aam_uuid": ""
+ },
+ "description": "Adobe Audience Manager is a versatile audience data management platform.",
+ "icon": "Adobe.svg",
+ "pricing": [
+ "high",
+ "recurring"
+ ],
+ "saas": true,
+ "website": "https://business.adobe.com/products/audience-manager/adobe-audience-manager.html"
+ },
"Adobe ColdFusion": {
"cats": [
18
@@ -1262,10 +1324,10 @@
"js": {
"AeroEvents.on": ""
},
- "saas": true,
"pricing": [
"poa"
],
+ "saas": true,
"website": "https://www.aerocommerce.com"
},
"Affiliate B": {
@@ -1289,6 +1351,21 @@
"scripts": "tags\\.affiliatefuture\\.com",
"website": "http://affiliatefuture.com"
},
+ "Affirm": {
+ "cats": [
+ 41
+ ],
+ "description": "Affirm is a loan company that allows users to buy goods or services offered by online merchants and pay off those purchases in fixed monthly payments.",
+ "dom": "link[href*='.affirm.com']",
+ "icon": "Affirm.svg",
+ "js": {
+ "_affirm_config": "",
+ "affirm.Rollbar": ""
+ },
+ "saas": true,
+ "scripts": "\\.affirm\\.com/js/v([\\d\\.]+)/affirm\\.js\\;version:\\1",
+ "website": "https://www.affirm.com"
+ },
"Afosto": {
"cats": [
6
@@ -1515,6 +1592,27 @@
"icon": "akka-http.png",
"website": "http://akka.io"
},
+ "Aksara CMS": {
+ "cats": [
+ 1
+ ],
+ "description": "Aksara CMS is a CodeIgniter based CRUD toolkit.",
+ "dom": "div.aksara-footer",
+ "icon": "Aksara CMS.svg",
+ "implies": [
+ "PHP",
+ "MySQL",
+ "CodeIgniter",
+ "Bootstrap",
+ "jQuery",
+ "OpenLayers"
+ ],
+ "oss": true,
+ "pricing": [
+ "freemium"
+ ],
+ "website": "https://aksaracms.com"
+ },
"Albacross": {
"cats": [
10,
@@ -1567,13 +1665,14 @@
},
"All in One SEO Pack": {
"cats": [
- 54
+ 54,
+ 87
],
"cpe": "cpe:/a:semperfiwebdesign:all_in_one_seo_pack",
"description": "All in One SEO plugin optimizes WordPress website and its content for search engines.",
"html": "||\\;version:\\1"
],
"icon": "NextGEN Gallery.png",
- "implies": "WordPress",
+ "requires": "WordPress",
"scripts": "/nextgen-gallery/js/",
"website": "https://www.imagely.com/wordpress-gallery-plugin"
},
@@ -13935,16 +14472,17 @@
6
],
"description": "Nuvemshop is a website builder with customizable layouts, product, shipping and payment management, marketing tools and a mobile app.",
+ "dom": "a[href*='www.nuvemshop.com.br'][title*='Nuvemshop'][target='_blank']",
"icon": "Nuvemshop.svg",
- "dom": "a[href*='www.nuvemshop.com.br'][target='_blank']",
"js": {
- "LS.store.url": "^.+nuvem.com.br$"
+ "LS.store.url": "^.+nuvem.com.br$",
+ "nuvemShopIdProduct": ""
},
- "saas": true,
"pricing": [
"low",
"recurring"
],
+ "saas": true,
"website": "https://www.nuvemshop.com.br"
},
"Nuxt.js": {
@@ -14049,6 +14587,30 @@
"scripts": "app\\.getoccasion\\.com",
"website": "https://www.getoccasion.com"
},
+ "OceanWP": {
+ "cats": [
+ 80
+ ],
+ "description": "OceanWP is a fast-loading WordPress theme that has great support for third-party plugins and drag-and-drop page builders.",
+ "dom": {
+ "body[class*='oceanwp-theme']": {
+ "text": ""
+ },
+ "link[id*='oceanwp']": {
+ "attributes": {
+ "href": "oceanwp\\S*\\.css(?:\\?ver=([0-9.]+))?\\;version:\\1"
+ }
+ }
+ },
+ "icon": "OceanWP.png",
+ "pricing": [
+ "low",
+ "recurring"
+ ],
+ "requires": "WordPress",
+ "scripts": "themes/oceanwp\\S*\\.js(?:\\?ver=([0-9.]+))?\\;version:\\1",
+ "website": "https://oceanwp.org"
+ },
"Ochanoko": {
"cats": [
6
@@ -14120,8 +14682,7 @@
},
"Okendo": {
"cats": [
- 5,
- 76
+ 90
],
"description": "Okendo is a customer marketing platform with product ratings and reviews, customer photos and videos to help personalise experiences.",
"dom": {
@@ -14614,6 +15175,10 @@
"cats": [
74
],
+ "cookies": {
+ "optimizelyEndUserId": ""
+ },
+ "description": "Optimizely is an American company that provides digital experience platform software as a service.",
"icon": "Optimizely.svg",
"js": {
"optimizely": ""
@@ -14637,6 +15202,23 @@
"icon": "Oracle.png",
"website": "http://www.oracle.com/technetwork/middleware/ias/overview/index.html"
},
+ "Oracle BlueKai": {
+ "cats": [
+ 86
+ ],
+ "description": "Oracle BlueKai is a cloud-based big data platform that enables companies to personalise online, offline, and mobile marketing campaigns.",
+ "dom": "link[href*='tags.bluekai.com'],link[href*='tags.bkrtx.com']",
+ "icon": "Oracle.png",
+ "js": {
+ "bluekaiLoaded": ""
+ },
+ "pricing": [
+ "poa"
+ ],
+ "saas": true,
+ "scripts": "tags\\.(?:bluekai|bkrtx)\\.com/",
+ "website": "https://www.oracle.com/cx/marketing/data-management-platform"
+ },
"Oracle Commerce": {
"cats": [
6
@@ -14747,18 +15329,22 @@
6
],
"description": "Orckestra is a provider of cloud-based digital unified and omnichannel commerce solutions for retail and manufacturing industries.",
+ "headers": {
+ "x-powered-by": "Orckestra",
+ "x-orckestra-commerce": ".NET Client"
+ },
"icon": "Orckestra.svg",
"implies": "Microsoft ASP.NET",
"meta": {
"generator": "^C1 CMS Foundation - Free Open Source from Orckestra and https://github.com/Orckestra/C1-CMS-Foundation$"
},
"oss": true,
- "saas": true,
"pricing": [
"freemium",
"mid",
"recurring"
],
+ "saas": true,
"website": "https://www.orckestra.com"
},
"Oribi": {
@@ -14806,9 +15392,34 @@
"recurring"
],
"saas": true,
- "scripts": "cookieconsent\\.min\\.js",
+ "scripts": [
+ "cookieconsent\\.min\\.js",
+ "cmp\\.osano\\.com/"
+ ],
"website": "https://www.osano.com"
},
+ "OutSystems": {
+ "cats": [
+ 47
+ ],
+ "description": "OutSystems is a low-code platform which provides tools for companies to develop, deploy and manage omnichannel enterprise applications.",
+ "icon": "OutSystems.svg",
+ "implies": [
+ "Windows Server",
+ "IIS"
+ ],
+ "js": {
+ "OutSystemsDebugger": "",
+ "outsystems": ""
+ },
+ "pricing": [
+ "high",
+ "recurring"
+ ],
+ "saas": true,
+ "scripts": "scripts/OutSystems(?:[\\w]+)?\\.js",
+ "website": "https://www.outsystems.com"
+ },
"Outbrain": {
"cats": [
5,
@@ -14861,7 +15472,8 @@
},
"Oxygen": {
"cats": [
- 51
+ 51,
+ 87
],
"description": "Oxygen Builder is a tool to build a WordPress website.",
"html": [
@@ -14869,7 +15481,7 @@
"]*href=(?:\"|')[^>]*wp-content/plugins/oxygen/"
],
"icon": "Oxygen.png",
- "implies": "WordPress",
+ "requires": "WordPress",
"scripts": [
"wp-content/plugins/oxygen"
],
@@ -15029,7 +15641,8 @@
},
"Pagely": {
"cats": [
- 62
+ 62,
+ 88
],
"headers": {
"Server": "^Pagely"
@@ -15209,7 +15822,8 @@
],
"saas": true,
"scripts": "paypalobjects\\.com",
- "website": "https://paypal.com"
+ "website": "https://paypal.com",
+ "xhr": "\\.paypal\\.com"
},
"Peek": {
"cats": [
@@ -15522,11 +16136,11 @@
6
],
"cpe": "cpe:/a:pimcore:pimcore",
+ "description": "Pimcore is an open-source digital platform that aggregates, enriches, and manages enterprise data and provides up-to-date, consistent, and personalised experiences to customers.",
"dom": ".pimcore_area_content",
"headers": {
"X-Powered-By": "^pimcore$"
},
- "description": "Pimcore is an open-source digital platform that aggregates, enriches, and manages enterprise data and provides up-to-date, consistent, and personalised experiences to customers.",
"icon": "pimcore.svg",
"implies": "PHP",
"oss": true,
@@ -15712,6 +16326,23 @@
"implies": "Scala",
"website": "https://www.playframework.com"
},
+ "Plentymarkets": {
+ "cats": [
+ 6
+ ],
+ "description": "Plentymarkets is a cloud-based all-in-one ecommerce ERP solution.",
+ "headers": {
+ "X-Plenty-Shop": ""
+ },
+ "icon": "plentymarkets.svg",
+ "meta": {
+ "generator": "plentymarkets"
+ },
+ "scripts": [
+ "plenty\\.shop\\.(?:min\\.)?js"
+ ],
+ "website": "https://www.plentymarkets.com/"
+ },
"Pleroma": {
"cats": [
2
@@ -16097,6 +16728,27 @@
"website": "https://prismic.io",
"xhr": "\\.cdn\\.prismic\\.io"
},
+ "Privy": {
+ "cats": [
+ 32,
+ 75
+ ],
+ "description": "Privy is a all-in-one marketing automation platform for ecommerce.",
+ "icon": "Privy.svg",
+ "js": {
+ "PrivyWidget": "",
+ "privySettings": "",
+ "Privy": ""
+ },
+ "scripts": "\\.privy\\.com/",
+ "saas": true,
+ "pricing": [
+ "low",
+ "freemium",
+ "recurring"
+ ],
+ "website": "https://www.privy.com"
+ },
"Profitwell": {
"cats": [
10
@@ -16367,9 +17019,11 @@
41
],
"description": "Quadpay is a payment platform.",
+ "dom": "link[href*='widgets.quadpay.com/'], div[data-quadpay-src*='.quadpay.com/']",
"icon": "Quadpay.svg",
"js": {
- "QuadPayShopify": ""
+ "QuadPayShopify": "",
+ "quadpayID": ""
},
"pricing": [
"payg"
@@ -16401,15 +17055,12 @@
],
"description": "Quantcast Choice is a free consent management platform to meet key privacy requirements stemming from ePrivacy Directive, GDPR, and CCPA.",
"icon": "Quantcast.png",
- "js": {
- "__tcfapi": ""
- },
- "scripts": "quantcast\\.mgr\\.consensu\\.org",
- "saas": true,
"pricing": [
"freemium",
"poa"
],
+ "saas": true,
+ "scripts": "quantcast\\.mgr\\.consensu\\.org",
"website": "https://www.quantcast.com/products/choice-consent-management-platform"
},
"Quantcast Measure": {
@@ -16421,12 +17072,12 @@
"js": {
"quantserve": ""
},
- "scripts": "\\.quantserve\\.com/quant\\.js",
- "saas": true,
"pricing": [
"freemium",
"poa"
],
+ "saas": true,
+ "scripts": "\\.quantserve\\.com/quant\\.js",
"website": "https://www.quantcast.com/products/measure-audience-insights"
},
"Qubit": {
@@ -16984,6 +17635,23 @@
"scripts": "\\.refersion\\.com",
"website": "http://refersion.com"
},
+ "Reflektion": {
+ "cats": [
+ 76
+ ],
+ "description": "Reflektion is a customer centric personalisation platform that optimizes customer experiences on an individual basis in real time.",
+ "icon": "Reflektion.png",
+ "js": {
+ "RFK_DEPLOY_TIME": "",
+ "RfkParams": ""
+ },
+ "pricing": [
+ "poa"
+ ],
+ "saas": true,
+ "scripts": "\\.cloudfront\\.net/js/reflektion\\.js",
+ "website": "https://reflektion.com"
+ },
"Regiondo": {
"cats": [
5,
@@ -17212,13 +17880,15 @@
},
"Revslider": {
"cats": [
- 19
+ 19,
+ 87
],
"description": "Slider Revolution is a WordPress plugin that allows you to create responsive sliders with many animation effects, text, image and video layers, and many other features.",
"html": [
"]* href=[\\'\"][^']+revslider[/\\w-]+\\.css\\?ver=([0-9.]+)[\\'\"]\\;version:\\1"
],
"icon": "revslider.png",
+ "requires": "WordPress",
"scripts": "/revslider/[/\\w-]+/js",
"website": "https://revolution.themepunch.com/"
},
@@ -17329,6 +17999,7 @@
10,
16
],
+ "description": "Riskified is a privately held company that provides SaaS fraud and chargeback prevention technology.",
"headers": {
"server": "Riskified Server"
},
@@ -17336,7 +18007,6 @@
"<[^>]*beacon\\.riskified\\.com",
"<[^>]*c\\.riskified\\.com"
],
- "description": "Riskified is a privately held company that provides SaaS fraud and chargeback prevention technology.",
"icon": "Riskified.svg",
"js": {
"RISKX": "",
@@ -17543,6 +18213,9 @@
"