colloide

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 63b787b47710a61f237bf0e8128a8d2acaee1899
parent 2b03bd67a5ae63ee266a1a2017bf7541dd831ef4
Author: Michael Constantine Dimopoulos <31562759+MichaelDim02@users.noreply.github.com>
Date:   Tue, 28 Aug 2018 06:31:05 +0000

Update and rename colloide100.py to colloide101.py
Diffstat:
Dcolloide100.py | 425-------------------------------------------------------------------------------
Acolloide101.py | 461+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 461 insertions(+), 425 deletions(-)

diff --git a/colloide100.py b/colloide100.py @@ -1,425 +0,0 @@ -#!/usr/bin/python -# -# MCD's Colloide v1.0.0 -# Thessaloniki, GREECE 2017 - greekhacking.gr -# Michael Constantine Dimopoulos -# GNU General Public Lisence -# Pronounced: Kow Lawd -# -# DO NOT USE FOR MALICIOUS PURPOSES! -# THE DEVELOPER HAS NO RESPONSIBLITY FOR ANY DAMAGE CAUSED! -# -# -# _.:' VERSION DIARY ':._ -# -# In version 0.1: -# Program is working! -# In version 0.2: -# Minor bugs fixed -# Updated the links file -# In version 0.3: -# Major bug fixed -# Minor bugs fixed as well -# Updated the links file -# Added option / argument parsing -# Added legals -# In version 0.4: -# Minor bugs fixed -# General stracture has been updated -# Wordlist option added - Only links.txt could be used before this update -# Added ASCII logo -# Added the sexy ASCII wolf -# In version 0.5 MAJOR RELEASE -# Minor bugs fixed -# Major bug fixed -# Updated ASCII logo -# Updated ASCII wolf -# Program has been released to the masses! -# In version 0.6: -# Minor bugs fixed -# Option to save the pages into a txt page added -# Added some comments to help contributors read the code -# Added a function that checks whether the URL is valid or not -# In version 0.7: -# One major bug fixed -# Minor bugs fixed as well -# In version 0.8: -# Added colors -# In version 0.8.5 -# Added status code next to links -# Added more link wordlists, more specific to each language -# In version 0.9: -# Added status code method -# In version 0.9.5 -# Quick robots.txt check added -# In version 1.0.0 -# Directory option added (-f) to search inside of a particular dir -# Fixed major bug in the status method (false status code retrieved) -# Removed status code from the urlerror method -# Red when unauthorized or forbidden in the status method -#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Project on GitHub: -# http://yamechanic.com/C3vc -# Website: -# http://yamechanic.com/C41V -# -# Report bugs: anivsante2@gmail.com -# or /issues if you use github -# -# # # # # # # # # # # # # # # # # # # # # # # # - -# MODULES / LIBRARIES: - -from __future__ import print_function #because some print functions print quotation marks and commas -#SYSTEM MODULES# -import sys -import os -import argparse -#NETWORK MODULES# -import httplib -import socket -import urllib2 -import requests -from urllib2 import Request, urlopen, URLError, HTTPError -#STYLE MODULES# -import colorama -from colorama import Fore, Back, Style - -# CODE: - -def banner(): #banner with logo - patorjk.com - print("MCD's") - print("_________ .__ .__ .__ .___ ") - print("\_ ___ \ ____ | | | | ____ |__| __| _/____ ") - print("/ \ \/ / _ \| | | | / _ \| |/ __ |/ __ \ ") - print("\ \___( <_> ) |_| |_( <_> ) / /_/ \ ___/") - print(" \______ /\____/|____/____/\____/|__\____ |\___ >") - print(" \/ \/ \/ ") - print("MCD's") - print("Colloide v 1.0.0") - print("Michael C. Dimopoulos 2017") - print("www.greekhacking.gr\n\n") -def opts(): - print(" --robots Check for robots.txt file") - print(" -u --URL The URL to the website") - print(" -c --content Display contents of robots.txt") - print(" -d --dump Dump the contents to a text file\n") - print(" --status Use the HTTP status code method (Faster)") - print(" --urlerror Use the HTTP/URL error method (More reliable)") - print(" -h --help Display the help panel (Shown right now)") - print(" -u --URL The URL to the website") - print(" -f --folder Directory to search in") - print(" -p --pages Path to the wordlist with the page names / links") - print(" -l --legals License & legal disclaimer") - print(" -s --save Save pages on a text file (name of the file)") - print(" -L --limit Add limit to the pages (Integer)") - print(" -v --verbose Show all attempts\n\n") -def legals(): - #License - print("MCD's Colloide version 1.0.0 is free software. It can be re-distributed ") - print("and / or modified under the terms of the GNU General Public License") - print("as published by the Free Software Foundation; For more information") - print("read the GNU General Public License that comes") - print("along with this program.\n\n") - #Disclaimer - print("[!] Legal Disclaimer [!]") - print("Information distributed by this tool may be used maliciously.") - print("The developer has no responsibility for any damage caused by") - print("this script or any unauthorized use of it.\n") -def wolf(): - #prints the ASCII colloide wolf - print(" ___________________ , ,") - print("[ COLLOIDE MISSION! ] |\---/| __--__") - print(" / [ ,:',. (`. ") - print(" __.-'| / | `'_. .|") - print(" __ ___.-' \__) | _ : () _ |") - print(" .-' ' : : _/ | . . |") - print(" / , . . _ | ':_) ,_|'") - print(" : ; : : _/ -- ") - print(" | | .' __: / ") - print(" | : /'----'| \ | __________") - print(" \ |\ | | /| |_______,-----'") - print(" '.'| /__,----| \ | ") - print("_______| /|.' '.l \\\_") - print(" || || '-'") - print(" '-''-'\n") -def robots_check(): - print("MCD's Colloide v1.0.0") - print("Report bugs: anivsante2@gmail.com") - print("Robots.txt check function\n") - print("INFO:") - print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~") - print("URL = ", URL) - robots_link = "http://"+URL+"/robots.txt" - robots_value = False #robots_value - if it has been found or not - try: - IP = socket.gethostbyname(URL) - print("IP = ", IP) - robot = urllib2.urlopen(robots_link) - print("robots = True") - robots_value = True - #robots_value - if it has been found or not - - #if it encouters url error or httperror / exception robots.txt doesn't exist and it prints false - #WARNING: This could also mean the given URL is not correct - #so it is prevented like so: - except socket.gaierror: - print("[!] Incorrect URL address") - except URLError as e: - print("robots = False") - robots_value = False - except HTTPError as e: - print("robots = False") - robots_value = False - print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n") - if robots_value == True: - contentspage = robot.read() - #the content that will be dumped / displayed - if content: - print("CONTENT:") - print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n") - print(contentspage) - print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~") - if dump: - dump_name = "robots_%s.txt" % URL - rf = open(dump_name, "w+") - rf.write(str(contentspage)) - rf.close() - print("\nCONTENT DUMPED AT: ", dump_name) - -def scan_start(): - print(Fore.RED + Style.BRIGHT + "[!] Report bugs: anivsante2@gmail.com \n" + Style.RESET_ALL) - #OR https://github.com/MichaelDim02/colloide.py/issues - print(Fore.RED + Style.BRIGHT + "[!] Press Ctrl + C to terminate the process.\n" + Style.RESET_ALL) - -def check_names(infile): #Checking the path to the wordlist - if os.path.exists(infile): - if status_method: - banner() #calls the banner function - wolf() #calls the sexy ASCII wolf wallpaper - statusfindAdmin() #calls the function that basically does the job - elif error_method: - banner() - wolf() - findAdmin() - else: #in case wordlist cant be found - banner() - opts() - print(Fore.RED + Style.BRIGHT + "[-] Invalid path to the wordlist. File could not be found.\n" + Style.RESET_ALL) -# THIS IS THE STATUS CODE METHOD -def statusfindAdmin(): - if txt: - tfilename = txt - f = open(str(tfilename) ,'w+') - f.write("MCD's Colloide v1.0.0\n") - f.write("Michel Constantine Dimopoulos\n") - f.write("Thessaloniki, Greece 2017\n") - f.write("greekhacking.gr\n") - print("\n") - scan_start() - try: - IP = socket.gethostbyname(URL) - print(Fore.RED + Style.BRIGHT + "[!] Attacking host: ", IP, " - ", URL, "\n" + Style.RESET_ALL) - if txt: - f.write("Attacking:\n") - f.write("\n") - f.write(str(URL)) - f.write("\n") - f.write(str(IP)) - f.write("\n\n") - except socket.gaierror: - print(Fore.RED + Style.BRIGHT + "[!] Invalid URL address. Connection could not be established;\n" + Style.RESET_ALL) - sys.exit(0) - fi = open(links,"r"); - found = 0 - while (found <= int(limit)): - try: - sub_link = fi.readline() #Page name - if not sub_link: - break - link = URL #website name - req_link = "http://"+link+"/"+sub_link #Final link for attempt - if directory: - req_link = "http://"+link+directory+sub_link - req = Request(req_link) - con_link = link + "/" + sub_link - con_ = requests.head(req_link) - int_status_code_ = con_.status_code - status_code_ = str(int_status_code_) - notworking = "[ATTEMPT] - "+ status_code_ + " - " + req_link - unauth = "[ANAUTHORIZED] - "+ status_code_+ " - " + req_link - forbid = "[FORBIDDEN] - " + status_code_ + " - " + req_link - if status_code_.startswith("4"): - if ver: - if int_status_code_ == 401: - print(Fore.RED + unauth.rstrip() + Style.RESET_ALL) - elif int_status_code_ == 403: - print(Fore.RED + forbid.rstrip() + Style.RESET_ALL) - else: - print(Fore.GREEN + notworking.rstrip() + Style.RESET_ALL) - #notworking.rstrip() So it does not print lines between attempt output line - #identifies links that show up HTTP error - else: - if ver != True: - print("[+] Link Found" + " - " + status_code_ +" -"+ " -> " + req_link + "") - # if verbose if off - if ver: - print("\n[+] Link Found" + " - " + status_code_ +" -"+ " -> " + req_link + "") - #because in verbose mode failed attempts don't have \n at the end - found = found + 1 - if txt: - f = open(str(tfilename) ,'a') - f.write(req_link + "\n") - else: - pass - except KeyboardInterrupt: - print(Fore.RED + Style.BRIGHT + "\n[!] Process has been terminated - Ctrl + C has been pressed.\n" + Style.RESET_ALL) - if txt: - print("All working pages have been saved at: ", tfilename, "\n") - sys.exit(0) - if found > int(limit): - print(Fore.RED + Style.BRIGHT + "[!] Process has been terminated due to the limitation that has been set\n" + Style.RESET_ALL) - if txt: - print("All working pages have been saved at: ", tfilename, "\n") - f.close() -# THIS IS THE HTTP/URL ERROR METHOD -def findAdmin(): - if txt: - tfilename = txt - f = open(str(tfilename) ,'w+') - f.write("MCD's Colloide v1.0.0\n") - f.write("Michel Constantine Dimopoulos\n") - f.write("Thessaloniki, Greece 2017\n") - f.write("greekhacking.gr\n") - print("\n") - scan_start() - try: - IP = socket.gethostbyname(URL) - print(Fore.RED + Style.BRIGHT + "[!] Attacking host: ", IP, " - ", URL, "\n" + Style.RESET_ALL) - if txt: - f.write("Attacking:\n") - f.write("\n") - f.write(str(URL)) - f.write("\n") - f.write(str(IP)) - f.write("\n\n") - except socket.gaierror: - print(Fore.RED + Style.BRIGHT + "[!] Invalid URL address. Connection could not be established;\n" + Style.RESET_ALL) - sys.exit(0) - fi = open(links,"r"); - found = 0 - while (found <= int(limit)): - try: - sub_link = fi.readline() #Page name - if not sub_link: - break - link = URL #website name - req_link = "http://"+link+"/"+sub_link #Final link for attempt - if directory: - req_link = "http://"+link+directory+sub_link - req = Request(req_link) - if ver: - notworking = "[ATTEMPT] - " + req_link - #notworking.rstrip() So it does not print lines between attempt output line - #identifies links that show up HTTP error - try: - response = urlopen(req) - except HTTPError as e: - if ver: - print(Fore.GREEN + notworking.rstrip() + Style.RESET_ALL) - continue - except URLError as e: - if ver: - print(Fore.GREEN + notworking.rstrip() + Style.RESET_ALL) - continue - else: #prints working link - if ver != True: - print("[+] Link Found" + " -> " + req_link + "") - # if verbose if off - if ver: - print("\n[+] Link Found" + " -> " + req_link + "") - #because in verbose mode failed attempts don't have \n at the end - found = found + 1 - if txt: - f = open(str(tfilename) ,'a') - f.write(req_link + "\n") - else: - pass - except KeyboardInterrupt: - print(Fore.RED + Style.BRIGHT + "\n[!] Process has been terminated - Ctrl + C has been pressed.\n" + Style.RESET_ALL) - if txt: - print("All working pages have been saved at: ", tfilename, "\n") - sys.exit(0) - if found > int(limit): - print(Fore.RED + Style.BRIGHT + "[!] Process has been terminated due to the limitation that has been set\n" + Style.RESET_ALL) - if txt: - print("All working pages have been saved at: ", tfilename, "\n") - -#Argument parsing -parser = argparse.ArgumentParser() -parser.add_argument("--robots", action="store_true", help="Check for robots.txt file") -parser.add_argument("-d", "--dump", action="store_true", help="Dump the contents to a text file") -parser.add_argument("-c", "--content", action="store_true", help="Display the contents of robots.txt") -#robots exclusive -parser.add_argument("--status", action="store_true", help="Use the HTTP status code method") -parser.add_argument("--urlerror", action="store_true", help="Use the HTTP/URL error method") -parser.add_argument("-u", "--URL", help="The URL to the website") -parser.add_argument("-f", "--folder", help="Directory to search in (must end and start with '/')") -parser.add_argument("-p", "--pages", help="Path to the wordlist with the page names / links") -parser.add_argument("-l", "--legals", action='store_true', help="License & legal disclaimer") -parser.add_argument("-s", "--save", help="Save all working pages on a text file") -parser.add_argument("-L", "--limit", help="Add limit to the pages. Integer", default="10") -parser.add_argument("-v", "--verbose", help="Show all attempts", action="store_true") - -#Declaring Argument Variables -args = parser.parse_args() -status_method = args.status -error_method = args.urlerror -links = args.pages -URL = args.URL -directory = args.folder -txt = args.save -limit = args.limit -ver = args.verbose -#robots exclusive options / arguments -robots = args.robots -dump = args.dump -content = args.content - -if error_method: - status_method = False - robots = False -elif error_method == False: - status_method = True - robots = False -elif error_method == False and status_method == False: - robots = True - -if args.URL and args.pages: - check_names(links) -elif args.robots and args.URL: - robots_check() -elif args.legals: - banner() - legals() -else: - banner() - opts() -print("Usage: python colloide100.py --[method] -u [URL] -p [WORDLIST] -s [TEXT FILE] -L [NUMBER] -v") -print("Robots: ptyhon colloide100.py --robots -u [URL] -d -c") - -# -# MCD's -# Colloide v1.0.0 -# Can be modified -# Can be distributed commercially -# Can be distributed non-commercially -# Under the terms of the GNU general public license (2007) -# Michael Constantine Dimopoulos -# Project on GitHub: -# http://yamechanic.com/C3vc -# Website: -# http://yamechanic.com/C41V -# -# # # # # # # # # # # # # # # # # # # # # # # # # diff --git a/colloide101.py b/colloide101.py @@ -0,0 +1,461 @@ +#!/usr/bin/python +# +# MCD's Colloide v1.0.1 +# Thessaloniki, GREECE 2017 - greekhacking.gr +# Michael Constantine Dimopoulos +# GNU General Public Lisence +# Pronounced: Kow Lawd +# +# DO NOT USE FOR MALICIOUS PURPOSES! +# THE DEVELOPER HAS NO RESPONSIBLITY FOR ANY DAMAGE CAUSED! +# +# +# _.:' VERSION DIARY ':._ +# +# In version 0.1: +# Program is working! +# In version 0.2: +# Minor bugs fixed +# Updated the links file +# In version 0.3: +# Major bug fixed +# Minor bugs fixed as well +# Updated the links file +# Added option / argument parsing +# Added legals +# In version 0.4: +# Minor bugs fixed +# General stracture has been updated +# Wordlist option added - Only links.txt could be used before this update +# Added ASCII logo +# Added the sexy ASCII wolf +# In version 0.5 MAJOR RELEASE +# Minor bugs fixed +# Major bug fixed +# Updated ASCII logo +# Updated ASCII wolf +# Program has been released to the masses! +# In version 0.6: +# Minor bugs fixed +# Option to save the pages into a txt page added +# Added some comments to help contributors read the code +# Added a function that checks whether the URL is valid or not +# In version 0.7: +# One major bug fixed +# Minor bugs fixed as well +# In version 0.8: +# Added colors +# In version 0.8.5 +# Added status code next to links +# Added more link wordlists, more specific to each language +# In version 0.9: +# Added status code method +# In version 0.9.5 +# Quick robots.txt check added +# In version 1.0.0 +# Directory option added (-f) to search inside of a particular dir +# Fixed major bug in the status method (false status code retrieved) +# Removed status code from the urlerror method +# Red when unauthorized or forbidden in the status method +# In version 1.0.1 +# Users are able to disable/enable ascii by typing -a +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Project on GitHub: +# http://yamechanic.com/C3vc +# Website: +# http://yamechanic.com/C41V +# +# Report bugs: anivsante2@gmail.com +# or /issues if you use github +# +# # # # # # # # # # # # # # # # # # # # # # # # + +# MODULES / LIBRARIES: + +from __future__ import print_function #because some print functions print quotation marks and commas +#SYSTEM MODULES# +import sys +import os +import argparse +#NETWORK MODULES# +import httplib +import socket +import urllib2 +import requests +from urllib2 import Request, urlopen, URLError, HTTPError +#STYLE MODULES# +import colorama +from colorama import Fore, Back, Style + +# CODE: + +def logo(): #logo - patorjk.com + print("MCD's") + print("_________ .__ .__ .__ .___ ") + print("\_ ___ \ ____ | | | | ____ |__| __| _/____ ") + print("/ \ \/ / _ \| | | | / _ \| |/ __ |/ __ \ ") + print("\ \___( <_> ) |_| |_( <_> ) / /_/ \ ___/") + print(" \______ /\____/|____/____/\____/|__\____ |\___ >") + print(" \/ \/ \/ ") +def checkasciilogo(): + check_value = open(".ascii_disable_option_value.txt","r") + checkvalue = check_value.read(1) + if checkvalue == "0": + logo() + check_value.close() +def banner(): #banner with logo - patorjk.com + checkasciilogo() + print("MCD's") + print("Colloide v 1.0.1") + print("Michael C. Dimopoulos 2017") + print("www.greekhacking.gr\n\n") +def opts(): + print(" --robots Check for robots.txt file") + print(" -u --URL The URL to the website") + print(" -c --content Display contents of robots.txt") + print(" -d --dump Dump the contents to a text file\n") + print(" --status Use the HTTP status code method (Faster)") + print(" --urlerror Use the HTTP/URL error method (More reliable)") + print(" -h --help Display the help panel (Shown right now)") + print(" -u --URL The URL to the website") + print(" -f --folder Directory to search in") + print(" -p --pages Path to the wordlist with the page names / links") + print(" -l --legals License & legal disclaimer") + print(" -s --save Save pages on a text file (name of the file)") + print(" -L --limit Add limit to the pages (Integer)") + print(" -v --verbose Show all attempts\n") + print(" -a --ascii Enable/Disabla ASCII\n\n") +def legals(): + #License + print("MCD's Colloide version 1.0.1 is free software. It can be re-distributed ") + print("and / or modified under the terms of the GNU General Public License") + print("as published by the Free Software Foundation; For more information") + print("read the GNU General Public License that comes") + print("along with this program.\n\n") + #Disclaimer + print("[!] Legal Disclaimer [!]") + print("Information distributed by this tool may be used maliciously.") + print("The developer has no responsibility for any damage caused by") + print("this script or any unauthorized use of it.\n") +def wolf(): + #prints the ASCII colloide wolf + print(" ___________________ , ,") + print("[ COLLOIDE MISSION! ] |\---/| __--__") + print(" / [ ,:',. (`. ") + print(" __.-'| / | `'_. .|") + print(" __ ___.-' \__) | _ : () _ |") + print(" .-' ' : : _/ | . . |") + print(" / , . . _ | ':_) ,_|'") + print(" : ; : : _/ -- ") + print(" | | .' __: / ") + print(" | : /'----'| \ | __________") + print(" \ |\ | | /| |_______,-----'") + print(" '.'| /__,----| \ | ") + print("_______| /|.' '.l \\\_") + print(" || || '-'") + print(" '-''-'\n") +def checkasciiwolf(): + check_value = open(".ascii_disable_option_value.txt","r") + checkvalue = check_value.read(1) + if checkvalue == "0": + wolf() + else: + print(" ___________________ ") + print("[ COLLOIDE MISSION! ]\n\n") + check_value.close() +def robots_check(): + print("MCD's Colloide v1.0.0") + print("Report bugs: anivsante2@gmail.com") + print("Robots.txt check function\n") + print("INFO:") + print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~") + print("URL = ", URL) + robots_link = "http://"+URL+"/robots.txt" + robots_value = False #robots_value - if it has been found or not + try: + IP = socket.gethostbyname(URL) + print("IP = ", IP) + robot = urllib2.urlopen(robots_link) + print("robots = True") + robots_value = True + #robots_value - if it has been found or not + + #if it encouters url error or httperror / exception robots.txt doesn't exist and it prints false + #WARNING: This could also mean the given URL is not correct + #so it is prevented like so: + except socket.gaierror: + print("[!] Incorrect URL address") + except URLError as e: + print("robots = False") + robots_value = False + except HTTPError as e: + print("robots = False") + robots_value = False + print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n") + if robots_value == True: + contentspage = robot.read() + #the content that will be dumped / displayed + if content: + print("CONTENT:") + print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n") + print(contentspage) + print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~") + if dump: + dump_name = "robots_%s.txt" % URL + rf = open(dump_name, "w+") + rf.write(str(contentspage)) + rf.close() + print("\nCONTENT DUMPED AT: ", dump_name) + +def scan_start(): + print(Fore.RED + Style.BRIGHT + "[!] Report bugs: anivsante2@gmail.com \n" + Style.RESET_ALL) + #OR https://github.com/MichaelDim02/colloide.py/issues + print(Fore.RED + Style.BRIGHT + "[!] Press Ctrl + C to terminate the process.\n" + Style.RESET_ALL) + +def check_names(infile): #Checking the path to the wordlist + if os.path.exists(infile): + if status_method: + banner() #calls the banner function + checkasciiwolf() #calls the sexy ASCII wolf wallpaper + statusfindAdmin() #calls the function that basically does the job + elif error_method: + banner() + checkasciiwolf() + findAdmin() + else: #in case wordlist cant be found + banner() + opts() + print(Fore.RED + Style.BRIGHT + "[-] Invalid path to the wordlist. File could not be found.\n" + Style.RESET_ALL) +# THIS IS THE STATUS CODE METHOD +def statusfindAdmin(): + if txt: + tfilename = txt + f = open(str(tfilename) ,'w+') + f.write("MCD's Colloide v1.0.1\n") + f.write("Michel Constantine Dimopoulos\n") + f.write("Thessaloniki, Greece 2017\n") + f.write("greekhacking.gr\n") + print("\n") + scan_start() + try: + IP = socket.gethostbyname(URL) + print(Fore.RED + Style.BRIGHT + "[!] Attacking host: ", IP, " - ", URL, "\n" + Style.RESET_ALL) + if txt: + f.write("Attacking:\n") + f.write("\n") + f.write(str(URL)) + f.write("\n") + f.write(str(IP)) + f.write("\n\n") + except socket.gaierror: + print(Fore.RED + Style.BRIGHT + "[!] Invalid URL address. Connection could not be established;\n" + Style.RESET_ALL) + sys.exit(0) + fi = open(links,"r"); + found = 0 + while (found <= int(limit)): + try: + sub_link = fi.readline() #Page name + if not sub_link: + break + link = URL #website name + req_link = "http://"+link+"/"+sub_link #Final link for attempt + if directory: + req_link = "http://"+link+directory+sub_link + req = Request(req_link) + con_link = link + "/" + sub_link + con_ = requests.head(req_link) + int_status_code_ = con_.status_code + status_code_ = str(int_status_code_) + notworking = "[ATTEMPT] - "+ status_code_ + " - " + req_link + unauth = "[ANAUTHORIZED] - "+ status_code_+ " - " + req_link + forbid = "[FORBIDDEN] - " + status_code_ + " - " + req_link + if status_code_.startswith("4"): + if ver: + if int_status_code_ == 401: + print(Fore.RED + unauth.rstrip() + Style.RESET_ALL) + elif int_status_code_ == 403: + print(Fore.RED + forbid.rstrip() + Style.RESET_ALL) + else: + print(Fore.GREEN + notworking.rstrip() + Style.RESET_ALL) + #notworking.rstrip() So it does not print lines between attempt output line + #identifies links that show up HTTP error + else: + if ver != True: + print("[+] Link Found" + " - " + status_code_ +" -"+ " -> " + req_link + "") + # if verbose if off + if ver: + print("\n[+] Link Found" + " - " + status_code_ +" -"+ " -> " + req_link + "") + #because in verbose mode failed attempts don't have \n at the end + found = found + 1 + if txt: + f = open(str(tfilename) ,'a') + f.write(req_link + "\n") + else: + pass + except KeyboardInterrupt: + print(Fore.RED + Style.BRIGHT + "\n[!] Process has been terminated - Ctrl + C has been pressed.\n" + Style.RESET_ALL) + if txt: + print("All working pages have been saved at: ", tfilename, "\n") + sys.exit(0) + if found > int(limit): + print(Fore.RED + Style.BRIGHT + "[!] Process has been terminated due to the limitation that has been set\n" + Style.RESET_ALL) + if txt: + print("All working pages have been saved at: ", tfilename, "\n") + f.close() +# THIS IS THE HTTP/URL ERROR METHOD +def findAdmin(): + if txt: + tfilename = txt + f = open(str(tfilename) ,'w+') + f.write("MCD's Colloide v1.0.1\n") + f.write("Michel Constantine Dimopoulos\n") + f.write("Thessaloniki, Greece 2017\n") + f.write("greekhacking.gr\n") + print("\n") + scan_start() + try: + IP = socket.gethostbyname(URL) + print(Fore.RED + Style.BRIGHT + "[!] Attacking host: ", IP, " - ", URL, "\n" + Style.RESET_ALL) + if txt: + f.write("Attacking:\n") + f.write("\n") + f.write(str(URL)) + f.write("\n") + f.write(str(IP)) + f.write("\n\n") + except socket.gaierror: + print(Fore.RED + Style.BRIGHT + "[!] Invalid URL address. Connection could not be established;\n" + Style.RESET_ALL) + sys.exit(0) + fi = open(links,"r"); + found = 0 + while (found <= int(limit)): + try: + sub_link = fi.readline() #Page name + if not sub_link: + break + link = URL #website name + req_link = "http://"+link+"/"+sub_link #Final link for attempt + if directory: + req_link = "http://"+link+directory+sub_link + req = Request(req_link) + if ver: + notworking = "[ATTEMPT] - " + req_link + #notworking.rstrip() So it does not print lines between attempt output line + #identifies links that show up HTTP error + try: + response = urlopen(req) + except HTTPError as e: + if ver: + print(Fore.GREEN + notworking.rstrip() + Style.RESET_ALL) + continue + except URLError as e: + if ver: + print(Fore.GREEN + notworking.rstrip() + Style.RESET_ALL) + continue + else: #prints working link + if ver != True: + print("[+] Link Found" + " -> " + req_link + "") + # if verbose if off + if ver: + print("\n[+] Link Found" + " -> " + req_link + "") + #because in verbose mode failed attempts don't have \n at the end + found = found + 1 + if txt: + f = open(str(tfilename) ,'a') + f.write(req_link + "\n") + else: + pass + except KeyboardInterrupt: + print(Fore.RED + Style.BRIGHT + "\n[!] Process has been terminated - Ctrl + C has been pressed.\n" + Style.RESET_ALL) + if txt: + print("All working pages have been saved at: ", tfilename, "\n") + sys.exit(0) + if found > int(limit): + print(Fore.RED + Style.BRIGHT + "[!] Process has been terminated due to the limitation that has been set\n" + Style.RESET_ALL) + if txt: + print("All working pages have been saved at: ", tfilename, "\n") + +def change_ascii(): + ascii_file = open(".ascii_disable_option_value.txt", "r") + checkascii = ascii_file.read(1) + ascii_file.close() + changeascii = open(".ascii_disable_option_value.txt", "w") + if checkascii == "1": + changeascii.write("0") + print("[+] ASCII enabled") + elif checkascii == "0": + changeascii.write("1") + print("[+] ASCII disabled") + +#Argument parsing +parser = argparse.ArgumentParser() +parser.add_argument("--robots", action="store_true", help="Check for robots.txt file") +parser.add_argument("-d", "--dump", action="store_true", help="Dump the contents to a text file") +parser.add_argument("-c", "--content", action="store_true", help="Display the contents of robots.txt") +#robots exclusive +parser.add_argument("--status", action="store_true", help="Use the HTTP status code method") +parser.add_argument("--urlerror", action="store_true", help="Use the HTTP/URL error method") +parser.add_argument("-u", "--URL", help="The URL to the website") +parser.add_argument("-f", "--folder", help="Directory to search in (must end and start with '/')") +parser.add_argument("-p", "--pages", help="Path to the wordlist with the page names / links") +parser.add_argument("-l", "--legals", action='store_true', help="License & legal disclaimer") +parser.add_argument("-s", "--save", help="Save all working pages on a text file") +parser.add_argument("-L", "--limit", help="Add limit to the pages. Integer", default="10") +parser.add_argument("-v", "--verbose", help="Show all attempts", action="store_true") +parser.add_argument("-a", "--ascii", help="Enable/Disabla ASCII", action="store_true") + +#Declaring Argument Variables +args = parser.parse_args() +status_method = args.status +error_method = args.urlerror +links = args.pages +URL = args.URL +directory = args.folder +txt = args.save +limit = args.limit +ver = args.verbose +ascii = args.ascii +#robots exclusive options / arguments +robots = args.robots +dump = args.dump +content = args.content + +if error_method: + status_method = False + robots = False +elif error_method == False: + status_method = True + robots = False +elif error_method == False and status_method == False: + robots = True + +if args.URL and args.pages: + check_names(links) +elif args.robots and args.URL: + robots_check() +elif args.legals: + banner() + legals() +elif args.ascii: + change_ascii() +else: + banner() + opts() +print("Usage: python colloide100.py --[method] -u [URL] -p [WORDLIST] -s [TEXT FILE] -L [NUMBER] -v") +print("Robots: ptyhon colloide100.py --robots -u [URL] -d -c") + +# +# MCD's +# Colloide v1.0.1 +# Can be modified +# Can be distributed commercially +# Can be distributed non-commercially +# Under the terms of the GNU general public license (2007) +# Michael Constantine Dimopoulos +# Project on GitHub: +# http://yamechanic.com/C3vc +# Website: +# http://yamechanic.com/C41V +# +# # # # # # # # # # # # # # # # # # # # # # # # #