
Im Backend von Ruoyi v4.8.3 besteht eine SQL-Injection-Schwachstelle.
filterKeyword SQL-Injection-UmgehungAutorisierung erforderlich / Nur für autorisierte Tests
Dieses Repository ist ausschließlich für Sicherheitsforschung und autorisierte Tests bestimmt. Verwenden Sie es nicht gegen Systeme ohne ausdrückliche Genehmigung.
Dieses Repository dient ausschließlich der Sicherheitsforschung und autorisierten Tests. Verwenden Sie es nicht gegen nicht autorisierte Systeme.
Die Schnittstelle /tool/gen/createTable im Code-Generierungsmodul von RuoYi v4.8.3 erlaubt Backend-Benutzern, SQL zum Erstellen von Tabellen zu übermitteln. Die Schnittstelle ruft SqlUtil.filterKeyword() auf, um eine Keyword-Blacklist zu filtern, aber in der Implementierung werden zunächst alle Leerzeichen aus der Eingabe entfernt, bevor Keywords, die nachgestellte Leerzeichen enthalten (z. B. select , insert , drop ), abgeglichen werden, sodass die entsprechenden Regeln nicht greifen.
Mithilfe einer CREATE TABLE ... AS SELECT ...-Anweisung (CTAS) kann ein SELECT ausgeführt werden, während gleichzeitig die Typüberprüfung von Druids MySqlCreateTableStatement bestanden wird. Ein Angreifer mit einer gültigen Backend-Sitzung kann so eine boolesche blinde SQL-Injection konstruieren, vertrauliche Informationen aus der Datenbank lesen und Datenbanktabellen erstellen.
JSESSIONID.Das Verifizierungsskript verwendet die folgende Logik, um den Passwort-Hash und Salt des admin-Benutzers aus der Tabelle sys_user zu extrahieren:
login_name, password und salt kopiert.WHERE-Klausel wird eine SUBSTRING()-Bedingung eingefügt./tool/gen/list abfragbar.requests, urllib3Abhängigkeiten installieren:
python -m pip install requests urllib3
Öffnen Sie exp.py und ersetzen Sie die folgenden beiden Zeilen im Konfigurationsbereich am Anfang der Datei:
TARGET = "http://127.0.0.1:8080"
COOKIE = "JSESSIONID=your_session_id"
Wobei:
TARGET: Ersetzen Sie dies durch die zu testende RuoYi-URL, z. B. http://127.0.0.1:8080.COOKIE: Ersetzen Sie dies durch eine gültige JSESSIONID-Sitzung, die Sie nach dem Anmelden im Backend erhalten haben.Nachdem Sie die Änderungen vorgenommen haben, führen Sie das Skript aus:
python exp.py
Das Skript erstellt eine Zwischentabelle und viele boolesche Testtabellen in der Zieldatenbank. Verwenden Sie es nur in einer isolierten oder autorisierten Umgebung und lassen Sie die erstellten Tabellen nach dem Test vom Datenbankadministrator entfernen.
exp.png zeigt eine erfolgreiche Verifizierung in einer autorisierten lokalen Umgebung:

filterKeyword(), aber betrachten Sie sie nicht als einzige Sicherheitsmaßnahme.Der Endpunkt /tool/gen/createTable im Code-Generierungsmodul von RuoYi v4.8.3 akzeptiert SQL zum Erstellen von Tabellen von authentifizierten Backend-Benutzern. Der Endpunkt ruft SqlUtil.filterKeyword() auf, um gefährliche SQL-Keywords zu blockieren. Die Implementierung entfernt jedoch alle Leerzeichen aus der Eingabe, bevor sie Blacklist-Einträge prüft, die nachgestellte Leerzeichen enthalten, wie z. B. select , insert und drop . Daher können diese Einträge die normalisierte Eingabe nicht erkennen.
Eine CREATE TABLE ... AS SELECT ...-Anweisung (CTAS) kann die Typüberprüfung von Druids MySqlCreateTableStatement bestehen, während sie dennoch ein SELECT ausführt. Ein Angreifer mit einer gültigen Backend-Sitzung kann dieses Verhalten für boolesche blinde SQL-Injection, Extraktion sensibler Daten und Tabellenerstellung nutzen.
JSESSIONID.Das Skript stellt den Passwort-Hash und Salt des admin aus sys_user mithilfe des folgenden Orakels wieder her:
login_name, password und salt.SUBSTRING()-Bedingung./tool/gen/list sichtbar ist.requests, urllib3Abhängigkeiten installieren:
python -m pip install requests urllib3
Öffnen Sie exp.py und ersetzen Sie die folgenden beiden Zeilen im Konfigurationsbereich am Anfang der Datei:
TARGET = "http://127.0.0.1:8080"
COOKIE = "JSESSIONID=your_session_id"
Wobei:
TARGET ist die zu testende RuoYi-Basis-URL, z. B. http://127.0.0.1:8080.COOKIE ist eine gültige authentifizierte Backend-JSESSIONID-Sitzung.Nach dem Ersetzen von URL und Sitzung führen Sie aus:
python exp.py
Das Skript erstellt eine Zwischentabelle und viele boolesche Testtabellen in der Zieldatenbank. Verwenden Sie es nur in einer isolierten oder explizit autorisierten Umgebung und lassen Sie die erstellten Tabellen nach dem Test vom Datenbankadministrator entfernen.
exp.png zeigt eine erfolgreiche Verifizierung in einer autorisierten lokalen Umgebung:

filterKeyword(), aber betrachten Sie sie nicht als alleinige Sicherheitsmaßnahme.exp.py - verification script / Verifizierungsskriptexp.png - successful verification screenshot / Screenshot der erfolgreichen VerifizierungREADME.md - bilingual vulnerability documentation / Zweisprachige Schwachstellendokumentation