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 @@ "].*hybris.*.js" ], "icon": "SAP.svg", + "js": { + "smartedit": "" + }, "implies": "Java", "pricing": [ "poa" @@ -17607,27 +18280,9 @@ }, "website": "http://www.simplemachines.org" }, - "Smile": { + "SOBI 2": { "cats": [ - 84 - ], - "description": "Smile is a provider of ecommerce loyalty programs.", - "icon": "Smile.svg", - "js": { - "Smile.channel_key": "" - }, - "scripts": "js\\.smile\\.io/v([\\d.]+)/\\;version:\\1", - "saas": true, - "pricing": [ - "freemium", - "mid", - "recurring" - ], - "website": "https://smile.io" - }, - "SOBI 2": { - "cats": [ - 19 + 19 ], "html": "(?: