
Golang search engine scraper intended for identification of published ClickOnce deployments
Tool released in combination with the Less SmartScreen More Caffeine: ClickOnce (Ab)Use for Trusted Code Execution conference presentation / blog post by 0xthirteen and myself.
Golang web scraper that makes use of both chromedp, as well as normal HTTP requests to scrape search engines for published ClickOnce applications. Includes support for AWS API gateway source IP rotation and specifying an HTTP proxy for troubleshooting. Google and Swisscows search engines are currently supported for scraping.
The functionality of ClickonceHunter is controlled by config.yml. There are currently two modes the application will run in:
awsapigateway field(s) within the configValues in the config.yml file relevant to search engine requests include:
Other relevant values in the config.yml file include:
Swisscows scraping has been implemented by making use of the Chrome DevTools protocol with the chromedp project. There are CSRF-like integrity checks included in searches made on the Swisscows search engine, which appear in the form of the X-Request-Signature and X-Request-Nonce headers. For each dork request, a headless chromium browser is used to browse to the Swisscows landing page using the getSwissSecrets() function, and a listening event is created with the listenForSwissSecrets() function for when these headers are identified. The headers are then populated for our dork request to pass the integrity check.
The HTTP proxy option was added to help the users troubleshoot this for if/when the implemented search engines undoubtedly change their response formatting or API endpoints used to make requests. PRs are welcome!
Multithreading / goroutine support to the searches made was not implemented. For the purpose of finding published ClickOnce applications, it didn't seem necessary.