From 341de08866fabceef3fab316fc0b3bb5d02e8337 Mon Sep 17 00:00:00 2001 From: Jesse Osiecki <532841+jesse-osiecki@users.noreply.github.com> Date: Wed, 26 Jan 2022 18:07:41 -0500 Subject: [PATCH 1/6] Update Dockerfile Changing dockerfile comment pointing to https://hub.docker.com/r/andmyhacks/httpscreenshot as it's 5 years out of date --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index f4c2655..77e1b16 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -# docker pull andmyhacks/httpscreenshot +# docker pull jesse-osiecki/httpscreenshot FROM ubuntu:20.04 From 27859be89c0de97a4070138a13f2b4dfe43dfaa2 Mon Sep 17 00:00:00 2001 From: Jesse Osiecki <532841+jesse-osiecki@users.noreply.github.com> Date: Wed, 26 Jan 2022 18:09:05 -0500 Subject: [PATCH 2/6] Update Dockerfile typo --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 77e1b16..18cefde 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -# docker pull jesse-osiecki/httpscreenshot +# docker pull jesseosiecki/httpscreenshot FROM ubuntu:20.04 From 5e73d39dd26e89ff65b9aa6f44db7bf2bed9a540 Mon Sep 17 00:00:00 2001 From: Jesse Osiecki <532841+jesse-osiecki@users.noreply.github.com> Date: Wed, 26 Jan 2022 18:23:11 -0500 Subject: [PATCH 3/6] Update README.md --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index eaae0dd..56ab68f 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,17 @@ # httpscreenshot +### Installation via Docker + +`docker pull jesseosiecki/httpscreenshot` +`docker run -v + ### Installation on Ubuntu #### Via Script Run `install-dependencies.sh` script as root. -This script has been tested on Ubuntu 14.04. +This script has been tested on Ubuntu 20.04 as *root* (sudo). ### Manually From 4397b57b51714e8d8739fce0aaed8728f6842a55 Mon Sep 17 00:00:00 2001 From: Jesse Osiecki Date: Wed, 26 Jan 2022 18:27:52 -0500 Subject: [PATCH 4/6] adding Dockerfile run instructions --- Dockerfile | 2 ++ README.md | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 18cefde..43bc347 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,3 +19,5 @@ RUN ln -s /etc/httpscreenshot/httpscreenshot.py /usr/bin/httpscreenshot RUN mkdir -p /etc/httpscreenshot/images WORKDIR /etc/httpscreenshot/images + +ENTRYPOINT ["httpscreenshot"] diff --git a/README.md b/README.md index 56ab68f..2d87285 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ ### Installation via Docker `docker pull jesseosiecki/httpscreenshot` -`docker run -v +`docker run jesseosiecki/httpscreenshot` ### Installation on Ubuntu From cba2861830f0452ee9d297d9185da4e1a7db8ec7 Mon Sep 17 00:00:00 2001 From: Jesse Osiecki Date: Wed, 26 Jan 2022 17:49:28 -0500 Subject: [PATCH 5/6] - Add switch to cli to allow choice between Chrome/Firefox, keeping the -p headless flag as an option for both Default is Firefox as the previous changes defaulting to Chrome breaks previous functionality --- httpscreenshot.py | 47 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 32 insertions(+), 15 deletions(-) diff --git a/httpscreenshot.py b/httpscreenshot.py index ceb1ff3..6794d8d 100644 --- a/httpscreenshot.py +++ b/httpscreenshot.py @@ -164,7 +164,7 @@ def parseGnmap(inFile, autodetect): return targets -def setupBrowserProfile(headless, proxy): +def setupBrowserProfile(headless, proxy, browserType): browser = None if (proxy is not None): service_args = ['--ignore-ssl-errors=true', '--ssl-protocol=any', '--proxy=' + proxy, '--proxy-type=socks5'] @@ -173,7 +173,18 @@ def setupBrowserProfile(headless, proxy): while (browser is None): try: - if (not headless): + if (browserType == 'Chrome' or browserType == 'Chromium'): + service = Service(ChromeDriverManager(log_level=0).install()) + coptions = Options() + if headless: + coptions.add_argument("--headless") + coptions.add_argument("--no-sandbox") + coptions.add_argument("--window-size=1024x768") + coptions.add_argument("--ignore-certificate-errors") + coptions.add_argument("--ssl-version-min=tls1") + + browser = webdriver.Chrome(service=service, options=coptions) + else: capabilities = DesiredCapabilities.FIREFOX capabilities['acceptSslCerts'] = True fp = webdriver.FirefoxProfile() @@ -185,17 +196,15 @@ def setupBrowserProfile(headless, proxy): fp.set_preference("network.proxy.socks", proxyItems[0]) fp.set_preference("network.proxy.socks_port", int(proxyItems[1])) fp.set_preference("network.proxy.type", 1) - browser = webdriver.Firefox(firefox_profile=fp, capabilities=capabilities) - else: - service = Service(ChromeDriverManager(log_level=0).install()) - coptions = Options() - coptions.add_argument("--headless") - coptions.add_argument("--no-sandbox") - coptions.add_argument("--window-size=1024x768") - coptions.add_argument("--ignore-certificate-errors") - coptions.add_argument("--ssl-version-min=tls1") - browser = webdriver.Chrome(service=service, options=coptions) + fireFoxOptions = webdriver.FirefoxOptions() + if headless: + fireFoxOptions.headless = True + + browser = webdriver.Firefox(firefox_profile=fp, + capabilities=capabilities, + options=fireFoxOptions) + browser.set_window_size(1024, 768) except Exception as e: print(e) @@ -230,6 +239,7 @@ def worker( tryGUIOnFail, smartFetch, proxy, + browserType ): if debug: print("[*] Starting worker") @@ -241,7 +251,7 @@ def worker( display = Display(visible=0, size=(800, 600)) display.start() - browser = setupBrowserProfile(headless, proxy) + browser = setupBrowserProfile(headless, proxy, browserType) except Exception: print("[-] Oh no! Couldn't create the browser, Selenium blew up") @@ -341,7 +351,7 @@ def worker( display.start() print("[+] Attempting to fetch with FireFox: " + curUrl) - browser2 = setupBrowserProfile(False, proxy) + browser2 = setupBrowserProfile(False, proxy, "Firefox") old_url = browser2.current_url try: browser2.get(curUrl.strip()) @@ -385,7 +395,7 @@ def worker( exc_traceback) print("".join("!! " + line for line in lines)) browser.quit() - browser = setupBrowserProfile(headless, proxy) + browser = setupBrowserProfile(headless, proxy, "Firefox") continue browser.quit() display.stop() @@ -513,6 +523,12 @@ def signal_handler(signal, frame): default=False, help="Run in headless mode (using phantomjs)", ) + parser.add_argument( + "-b", + "--browsertype", + default="Firefox", + help="Choose webdriver {Firefox, Chrome}" + ) parser.add_argument("-w", "--workers", default=1, @@ -653,6 +669,7 @@ def signal_handler(signal, frame): args.trygui, args.smartfetch, args.proxy, + args.browsertype ), ) workers.append(p) From 8acef3a78d8dc2e7bfcc0aacf9655d8c23bdeb81 Mon Sep 17 00:00:00 2001 From: Jesse Osiecki Date: Wed, 26 Jan 2022 18:30:16 -0500 Subject: [PATCH 6/6] remove sudo --- install-dependencies.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/install-dependencies.sh b/install-dependencies.sh index 9b0ae20..1d504cd 100755 --- a/install-dependencies.sh +++ b/install-dependencies.sh @@ -1,4 +1,4 @@ -# Installation Script - tested on a fresh install of Ubuntu 20.04.3 LTS +# Installation Script - tested on a fresh install of Ubuntu 20.04.3 LTS as root (sudo) # Show all commands being run #set -x @@ -7,11 +7,11 @@ set -e # Pull packages from apt -sudo apt install -y python3-pip build-essential libssl-dev swig python3-dev +apt install -y python3-pip build-essential libssl-dev swig python3-dev # Install Google Chrome wget -O /tmp/google-chrome-stable_current_amd64.deb https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb -sudo apt install -y /tmp/google-chrome-stable_current_amd64.deb +apt install -y /tmp/google-chrome-stable_current_amd64.deb # Install required python packages -pip3 install -r requirements.txt \ No newline at end of file +pip3 install -r requirements.txt