-
Notifications
You must be signed in to change notification settings - Fork 23
/
Copy pathcheck_anon_ftp.rb
executable file
·79 lines (71 loc) · 1.73 KB
/
check_anon_ftp.rb
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
#!/usr/bin/env ruby
require 'net/ftp'
require 'stringio'
require 'securerandom'
ERROR_MESSAGE = File.basename($PROGRAM_NAME) + " <file_of_ftp_servers>"
if ARGV.size != 1
puts ERROR_MESSAGE
exit
end
file = ARGV[0]
if not File.exists?(file)
puts "#{file} does not exist!"
puts ERROR_MESSAGE
exit
end
modes = [:active, :passive]
servers = IO.readlines(file)
servers.each do |server|
modes.each do |mode|
print "[+] Connecting to #{server.chomp} [#{mode} mode]..."
begin
address, port = server.split(':')
ftp = Net::FTP.new
if mode == :passive
ftp.passive = true
end
if port == nil
ftp.connect(address)
else
ftp.connect(address, port)
end
puts "done"
print "[+] Authenticating using anonymous credentials..."
ftp.login('anonymous', '[email protected]')
puts "done"
print "[+] Listing files in root directory..."
files = ftp.list
if files.empty?
puts "empty"
else
puts ""
end
files.each do |file|
puts " #{file}"
end
# Check if file upload is possible
file = StringIO.new("Test - please delete me if found")
filename = "#{SecureRandom.hex}.txt"
print "[+] Uploading file #{filename}..."
begin
ftp.storlines("STOR #{filename}", file)
puts "allowed"
print "[-] Deleting file #{filename}..."
ftp.delete(filename)
puts "done"
rescue Net::FTPPermError
puts "access denied"
end
rescue SocketError
puts "host or service not known"
rescue Net::FTPPermError
puts "access denied"
rescue Errno::ETIMEDOUT
puts "connection timed out"
rescue Net::FTPReplyError
puts "access denied"
rescue Net::FTPProtoError
puts "error"
end
end
end