
Absichtlich verwundbare PHP/MariaDB-Webanwendung zum Üben gängiger Websicherheitsschwachstellen auf mehreren Schwierigkeitsstufen in einer legalen, kontrollierten Umgebung.
Damn Vulnerable Web Application (DVWA) ist eine PHP/MariaDB-Webanwendung, die verdammt verwundbar ist. Ihr Hauptziel ist es, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Werkzeuge in einer legalen Umgebung zu testen, Webentwicklern ein besseres Verständnis für die Prozesse der Absicherung von Webanwendungen zu vermitteln und sowohl Studenten als auch Lehrern zu helfen, etwas über Websicherheit in einer kontrollierten Klassenzimmerumgebung zu lernen.
Das Ziel von DVWA ist es, einige der häufigsten Web-Sicherheitslücken mit verschiedenen Schwierigkeitsgraden in einer einfachen und übersichtlichen Oberfläche zu üben. Bitte beachten Sie, dass diese Software sowohl dokumentierte als auch undokumentierte Sicherheitslücken enthält. Dies ist beabsichtigt. Sie sind aufgefordert, so viele Probleme wie möglich zu entdecken.
Die Damn Vulnerable Web Application ist verdammt verwundbar! Laden Sie sie nicht in das öffentliche HTML-Verzeichnis Ihres Hosting-Anbieters oder auf einen Server mit Internetzugang hoch, da sie kompromittiert werden. Es wird empfohlen, eine virtuelle Maschine (wie VirtualBox oder VMware) zu verwenden, die im NAT-Netzwerkmodus eingestellt ist. In der Gastmaschine können Sie XAMPP für den Webserver und die Datenbank herunterladen und installieren.
Wir übernehmen keine Verantwortung für die Art und Weise, wie jemand diese Anwendung (DVWA) nutzt. Wir haben die Zwecke der Anwendung klargestellt und sie sollte nicht böswillig verwendet werden. Wir haben Warnungen ausgesprochen und Maßnahmen ergriffen, um zu verhindern, dass Benutzer DVWA auf Live-Webservern installieren. Wenn Ihr Webserver durch eine Installation von DVWA kompromittiert wird, liegt dies nicht in unserer Verantwortung, sondern in der Verantwortung der Person(en), die sie hochgeladen und installiert haben.
Diese Datei ist Teil der Damn Vulnerable Web Application (DVWA).
Damn Vulnerable Web Application (DVWA) ist freie Software: Sie können sie unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß Version 3 der Lizenz oder (nach Ihrer Wahl) jeder späteren Version.
Damn Vulnerable Web Application (DVWA) wird in der Hoffnung verbreitet, dass sie nützlich sein wird, jedoch OHNE JEGLICHE GEWÄHRLEISTUNG; auch ohne die stillschweigende Garantie der MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Weitere Einzelheiten finden Sie in der GNU General Public License.
Sie sollten eine Kopie der GNU General Public License zusammen mit Damn Vulnerable Web Application (DVWA) erhalten haben. Falls nicht, siehe https://www.gnu.org/licenses/.
Diese Datei ist in mehreren Sprachen verfügbar:
Wenn Sie eine Übersetzung beisteuern möchten, reichen Sie bitte einen PR ein. Beachten Sie jedoch, dass dies nicht bedeutet, dass Sie es einfach durch Google Translate jagen und das einsenden können – solche werden abgelehnt. Reichen Sie Ihre übersetzte Version ein, indem Sie eine neue 'README.xx.md'-Datei hinzufügen, wobei xx der zweistellige Code Ihrer gewünschten Sprache ist (basierend auf ISO 639-1).
Obwohl es verschiedene Versionen von DVWA gibt, ist die einzige unterstützte Version die neueste Quelle aus dem offiziellen GitHub-Repository. Sie können es entweder aus dem Repository klonen:```sh git clone https://github.com/digininja/DVWA.git
Oder [laden Sie ein ZIP der Dateien herunter](https://github.com/digininja/DVWA/archive/master.zip).
- - -
## Installation
### Automatisierte Installation 🛠️
**Hinweis: Dies ist kein offizielles DVWA-Skript, es wurde von [IamCarron](https://github.com/iamCarron/) geschrieben. Es wurde viel Arbeit in die Erstellung des Skripts gesteckt, und als es erstellt wurde, führte es nichts Bösartiges aus. Es wird jedoch empfohlen, das Skript zu überprüfen, bevor Sie es blind auf Ihrem System ausführen, nur für den Fall. Melden Sie Fehler bitte an [IamCarron](https://github.com/iamCarron/), nicht hier.**
Ein automatisiertes Konfigurationsskript für DVWA auf Debian-basierten Maschinen, einschließlich Kali, Ubuntu, Kubuntu, Linux Mint, Zorin OS...
**Hinweis: Dieses Skript erfordert Root-Rechte und ist für Debian-basierte Systeme ausgelegt. Stellen Sie sicher, dass Sie es als Root-Benutzer ausführen.**
#### Installationsanforderungen
- **Betriebssystem:** Debian-basiertes System (Kali, Ubuntu, Kubuntu, Linux Mint, Zorin OS)
- **Berechtigungen:** Als Root-Benutzer ausführen
#### Installationsschritte
##### Einzeiler
Dies lädt ein Installationsskript herunter, das von [@IamCarron](https://github.com/IamCarron) geschrieben wurde, und führt es automatisch aus. Dies wäre nicht hier enthalten, wenn wir dem Autor und dem Skript in dem von uns geprüften Zustand nicht vertrauen würden, aber es besteht immer die Möglichkeit, dass jemand unehrlich handelt. Wenn Sie sich nicht sicher fühlen, den Code eines anderen auszuführen, ohne ihn selbst zu überprüfen, folgen Sie dem manuellen Prozess und können Sie ihn nach dem Herunterladen überprüfen.```sh
sudo bash -c "$(curl --fail --show-error --silent --location https://raw.githubusercontent.com/IamCarron/DVWA-Script/main/Install-DVWA.sh)"
Der einfachste Weg, DVWA zu installieren, ist XAMPP herunterzuladen und zu installieren, falls Sie noch keinen Webserver eingerichtet haben.
XAMPP ist eine sehr einfach zu installierende Apache-Distribution für Linux, Solaris, Windows und Mac OS X. Das Paket enthält den Apache-Webserver, MySQL, PHP, Perl, einen FTP-Server und phpMyAdmin.
Dieses Video führt Sie durch den Installationsprozess für Windows, aber es sollte für andere Betriebssysteme ähnlich sein.
Dank an hoang-himself und JGillam wird bei jedem Commit in den master-Branch ein Docker-Image erstellt und kann aus dem GitHub Container Registry heruntergeladen werden.
Weitere Informationen darüber, was Sie erhalten, finden Sie in den vorgefertigten Docker-Images.
Voraussetzungen: Docker und Docker Compose.
Wir bieten Support für die neueste Docker-Version wie oben gezeigt. Wenn Sie Linux und das Docker-Paket verwenden, das mit Ihrem Paketmanager kam, wird es wahrscheinlich auch funktionieren, aber der Support erfolgt nur nach bestem Wissen und Gewissen.
Ein Upgrade von Docker von der Paketmanager-Version auf die Upstream-Version erfordert, dass Sie die alten Versionen deinstallieren, wie in den Handbüchern für Ubuntu, Fedora und andere beschrieben. Ihre Docker-Daten (Container, Images, Volumes usw.) sollten nicht betroffen sein, aber falls doch ein Problem auftritt, wenden Sie sich an Docker und nutzen Sie in der Zwischenzeit Suchmaschinen.
Um loszulegen:
Führen Sie docker version und docker compose version aus, um zu sehen, ob Docker und Docker Compose ordnungsgemäß installiert sind. Sie sollten deren Versionen in der Ausgabe sehen können.
Zum Beispiel:
>>> docker version
Client:
[...]
Version: 23.0.5
[...]
Server: Docker Desktop 4.19.0 (106363)
Engine:
[...]
Version: 23.0.5
[...]
>>> docker compose version
Docker Compose version v2.17.3
Wenn Sie nichts sehen oder einen Befehl-nicht-gefunden-Fehler erhalten, folgen Sie den Voraussetzungen, um Docker und Docker Compose einzurichten.
Klonen oder laden Sie dieses Repository herunter und extrahieren Sie es (siehe Download).
Öffnen Sie ein Terminal Ihrer Wahl und wechseln Sie das Arbeitsverzeichnis in diesen Ordner (DVWA).
Führen Sie docker compose up -d aus.
DVWA ist jetzt unter http://localhost:4280 verfügbar.
Beachten Sie, dass der Webserver beim Ausführen von DVWA in Containern auf Port 4280 statt dem üblichen Port 80 lauscht. Weitere Informationen zu dieser Entscheidung finden Sie unter Ich möchte DVWA auf einem anderen Port ausführen.
Wenn Sie lokale Änderungen vorgenommen haben und das Projekt lokal erstellen möchten, gehen Sie zu compose.yml und ändern Sie pull_policy: always in pull_policy: build.
Das Ausführen von docker compose up -d sollte Docker dazu veranlassen, ein Image lokal zu erstellen, unabhängig davon, was in der Registry verfügbar ist.
Siehe auch: pull_policy.
Wenn Sie lokale Änderungen vornehmen und das Projekt nicht bei jeder Änderung neu erstellen möchten:
compose.yml und kommentieren Sie aus:
# volumes:
# - ./:/var/www/html
cp config/config.inc.php.dist config/config.inc.php aus, um die Standardkonfigurationsdatei zu kopieren.docker compose up -d aus, und Änderungen an lokalen Dateien werden im Container übernommen.Idealerweise sollten Sie die neueste stabile Version von PHP verwenden, da dies die Version ist, mit der diese App entwickelt und getestet wird.
Es wird kein Support für Personen geleistet, die PHP 5.x verwenden möchten.
Versionen unter 7.3 haben bekannte Probleme, die zu Fehlfunktionen führen. Der Großteil der App wird funktionieren, aber einige Dinge können zufällig nicht funktionieren. Solange Sie keinen sehr guten Grund haben, eine so alte Version zu verwenden, wird kein Support gewährt.
Wenn Sie eine Debian-basierte Linux-Distribution verwenden, müssen Sie die folgenden Pakete installieren (oder deren Entsprechung):
Ich empfehle, vorher ein Update durchzuführen, um sicherzustellen, dass Sie die neueste Version von allem erhalten.```sh apt update apt install -y apache2 mariadb-server mariadb-client php php-mysqli php-gd libapache2-mod-php
Die Seite funktioniert auch mit MySQL anstelle von MariaDB, aber wir empfehlen dringend MariaDB, da es sofort einsatzbereit ist, während Sie Änderungen vornehmen müssen, damit MySQL korrekt funktioniert.
### Apache-Module
Wenn Sie das API-Lab verwenden möchten, müssen Sie das Apache-Modul `mod_rewrite` aktiviert haben. Führen Sie dazu unter Linux Folgendes aus:
sudo a2enmod rewrite```
a2enmod rewrite
Und dann starten Sie Apache neu mit:``` apachectl restart
### Vendor-Dateien
Wenn Sie das API-Modul verwenden möchten, müssen Sie eine Reihe von Vendor-Dateien mit [Composer](https://getcomposer.org/) installieren.
Stellen Sie zunächst sicher, dass Composer installiert ist. Es scheint Abwärtskompatibilitätsprobleme zu geben, daher hole ich mir immer die neueste Version von hier:
https://getcomposer.org/doc/00-intro.md
Folgen Sie den Anweisungen auf der Website, um es zu installieren.
Gehen Sie nun in das Verzeichnis `vulnerabilities/api` und führen Sie aus:```
composer.phar install
Falls Sie Composer nicht im Systempfad installiert haben, stellen Sie sicher, dass Sie auf den vollständigen Pfad verweisen.
DVWA wird mit einer Dummy-Kopie der Konfigurationsdatei ausgeliefert, die Sie an die richtige Stelle kopieren und dann die entsprechenden Änderungen vornehmen müssen. Unter Linux, vorausgesetzt Sie befinden sich im DVWA-Verzeichnis, kann dies wie folgt durchgeführt werden:
cp config/config.inc.php.dist config/config.inc.php
Unter Windows kann dies etwas schwieriger sein, wenn Sie Dateierweiterungen ausblenden. Wenn Sie sich unsicher sind, erklärt dieser Blogbeitrag mehr dazu:
Anstatt die Konfigurationsdatei zu ändern, können Sie die meisten Einstellungen auch über Umgebungsvariablen setzen. In einer Docker- oder Kubernetes-Bereitstellung können Sie so die Konfiguration ändern, ohne ein neues Docker-Image zu erstellen. Die Variablen finden Sie in der Datei config/config.inc.php.dist.
Wenn Sie die Standardsicherheitsstufe auf "low" setzen möchten, fügen Sie einfach die folgende Zeile zur Datei compose.yml hinzu:```yml environment:
### Datenbank-Setup
Um die Datenbank einzurichten, klicken Sie einfach auf den `Setup DVWA`-Button im Hauptmenü und dann auf den `Create / Reset Database`-Button. Dadurch wird die Datenbank für Sie erstellt/zurückgesetzt, mit einigen Daten darin.
Wenn Sie beim Versuch, Ihre Datenbank zu erstellen, einen Fehler erhalten, stellen Sie sicher, dass Ihre Datenbank-Anmeldedaten in `./config/config.inc.php` korrekt sind. _Dies unterscheidet sich von config.inc.php.dist, einer Beispieldatei._
Die Variablen sind standardmäßig wie folgt gesetzt:```php
$_DVWA[ 'db_server'] = '127.0.0.1';
$_DVWA[ 'db_port'] = '3306';
$_DVWA[ 'db_user' ] = 'dvwa';
$_DVWA[ 'db_password' ] = 'p@ssw0rd';
$_DVWA[ 'db_database' ] = 'dvwa';
Hinweis: Wenn Sie MariaDB anstelle von MySQL verwenden (MariaDB ist in Kali standardmäßig installiert), können Sie nicht den Datenbank-Root-Benutzer verwenden. Sie müssen einen neuen Datenbankbenutzer erstellen. Gehen Sie dazu wie folgt vor: Stellen Sie eine Verbindung zur Datenbank als Root-Benutzer her und verwenden Sie dann die folgenden Befehle:```mariadb MariaDB [(none)]> create database dvwa; Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> create user dvwa@localhost identified by 'p@ssw0rd'; Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> grant all on dvwa.* to dvwa@localhost; Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> flush privileges; Query OK, 0 rows affected (0.00 sec)
### Authentifizierung deaktivieren
Einige Tools funktionieren nicht gut mit Authentifizierung und können daher nicht mit DVWA verwendet werden. Um dies zu umgehen, gibt es eine Konfigurationsoption, um die Authentifizierungsprüfung zu deaktivieren. Setzen Sie dazu einfach Folgendes in der Konfigurationsdatei:```php
$_DVWA[ 'disable_authentication' ] = true;
Sie müssen auch die Sicherheitsstufe auf eine Stufe setzen, die für die gewünschten Tests geeignet ist:```php $_DVWA[ 'default_security_level' ] = 'low';
In diesem Zustand können Sie auf alle Funktionen zugreifen, ohne sich anzumelden oder Cookies zu setzen.
### Ordnerberechtigungen
- `./hackable/uploads/` - Muss vom Webservice beschreibbar sein (für Datei-Upload).
### PHP-Konfiguration
Auf Linux-Systemen wahrscheinlich in `/etc/php/x.x/fpm/php.ini` oder `/etc/php/x.x/apache2/php.ini` zu finden.
- Um Remote File Inclusions (RFI) zu erlauben:
- `allow_url_include = on` [[allow_url_include](https://secure.php.net/manual/en/filesystem.configuration.php#ini.allow-url-include)]
- `allow_url_fopen = on` [[allow_url_fopen](https://secure.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen)]
- Um sicherzustellen, dass PHP alle Fehlermeldungen anzeigt:
- `display_errors = on` [[display_errors](https://secure.php.net/manual/en/errorfunc.configuration.php#ini.display-errors)]
- `display_startup_errors = on` [[display_startup_errors](https://secure.php.net/manual/en/errorfunc.configuration.php#ini.display-startup-errors)]
Stellen Sie sicher, dass Sie den PHP-Dienst oder Apache nach den Änderungen neu starten.
### reCAPTCHA
Dies wird nur für das "Insecure CAPTCHA"-Lab benötigt. Wenn Sie dieses Lab nicht verwenden, können Sie diesen Abschnitt ignorieren.
Generieren Sie ein Paar API-Schlüssel von <https://www.google.com/recaptcha/admin/create>.
Diese werden dann in den folgenden Abschnitten von `./config/config.inc.php` eingetragen:
- `$_DVWA[ 'recaptcha_public_key' ]`
- `$_DVWA[ 'recaptcha_private_key' ]`
### Standard-Anmeldedaten
**Standard-Benutzername = `admin`**
**Standard-Passwort = `password`**
_...kann leicht durch Brute-Force ermittelt werden ;)_
Login-URL: <http://127.0.0.1/login.php>
_Hinweis: Dies ist anders, wenn Sie DVWA in ein anderes Verzeichnis installiert haben._
- - -
## Fehlerbehebung
Diese Annahmen gelten für eine Debian-basierte Distribution wie Debian, Ubuntu und Kali. Für andere Distributionen folgen Sie der Anleitung, passen Sie jedoch bei Bedarf die Befehle an.
Wenn Sie lieber ein Video ansehen statt zu lesen, werden die häufigsten Probleme im Video [Fixing DVWA Setup Issues](https://youtu.be/C-kig5qrPSA?si=_a4Bop505-1tXb_F) behandelt.
### Container
#### Ich möchte auf die Logs zugreifen
Wenn Sie Docker Desktop verwenden, können Sie über die grafische Anwendung auf die Logs zugreifen.
Einige kleinere Details können sich mit neueren Versionen ändern, aber die Zugriffsmethode sollte gleich bleiben.


Logs können auch über das Terminal abgerufen werden.
1. Öffnen Sie ein Terminal und wechseln Sie das Arbeitsverzeichnis zu DVWA
2. Zeigen Sie die zusammengeführten Logs an
```sh
docker compose logs
```
Falls Sie die Logs in eine Datei exportieren möchten, z.B. `dvwa.log` ```sh
docker compose logs > dvwa.log
Wir verwenden standardmäßig aus mehreren Gründen nicht Port 80:
net.ipv4.ip_unprivileged_port_start) ist erforderlich, aber Sie müssen selbst recherchieren.Sie können DVWA auf einem anderen Port verfügbar machen, indem Sie die Portbindung in der compose.yml-Datei ändern.
Zum Beispiel können Sie ändern```yml
ports:
zu```yml
ports:
- 127.0.0.1:8806:80
DVWA ist nun unter http://localhost:8806 erreichbar.
Falls Sie möchten, dass DVWA nicht nur ausschließlich von Ihrem eigenen Gerät aus zugänglich ist, sondern auch in Ihrem lokalen Netzwerk (z. B. weil Sie einen Testrechner für einen Workshop einrichten), können Sie das 127.0.0.1: aus dem Port-Mapping entfernen (oder durch Ihre LAN-IP ersetzen). Auf diese Weise wird es auf allen verfügbaren Geräten lauschen. Die sichere Voreinstellung sollte immer sein, nur auf Ihrem lokalen Loopback-Gerät zu lauschen. Schließlich ist es eine verdammt verwundbare Webanwendung, die auf Ihrem Rechner läuft.
Die enthaltene compose.yml Datei führt DVWA und seine Datenbank automatisch aus, wenn Docker startet.
Um dies zu deaktivieren, können Sie die Zeilen restart: unless-stopped in der compose.yml Datei löschen oder auskommentieren.
Wenn Sie dieses Verhalten vorübergehend deaktivieren möchten, können Sie docker compose stop ausführen oder Docker Desktop verwenden, dort dvwa finden und auf Stop klicken. Zusätzlich können Sie die Container löschen oder docker compose down ausführen.
Unter Linux-Systemen generiert Apache standardmäßig zwei Logdateien, access.log und error.log. Auf Debian-basierten Systemen befinden sich diese normalerweise in /var/log/apache2/.
Wenn Sie Fehlerberichte, Probleme oder ähnliches einreichen, fügen Sie bitte mindestens die letzten fünf Zeilen jeder dieser Dateien bei. Auf Debian-basierten Systemen können Sie diese wie folgt abrufen:```sh tail -n 5 /var/log/apache2/access.log /var/log/apache2/error.log
### Ich habe die Seite aufgerufen und erhalte einen 404-Fehler oder die Apache2-Standardseite
[Video-Hilfe](https://youtu.be/C-kig5qrPSA?si=wTS3Aj8fycW3Idfr&t=141)
Wenn Sie dieses Problem haben, müssen Sie die Dateipfade verstehen. Standardmäßig ist das Apache-Dokumentenwurzelverzeichnis (der Ort, an dem Apache nach Webinhalten sucht) `/var/www/html`. Wenn Sie die Datei `hello.txt` in dieses Verzeichnis legen, würden Sie unter `http://localhost/hello.txt` darauf zugreifen.
Wenn Sie ein Verzeichnis erstellt und die Datei dort abgelegt haben – `/var/www/html/mydir/hello.txt` – müssten Sie unter `http://localhost/mydir/hello.txt` darauf zugreifen.
Linux beachtet standardmäßig die Groß-/Kleinschreibung. Wenn Sie im obigen Beispiel versuchen würden, auf eine der folgenden Adressen zuzugreifen, würden Sie einen `404 Not Found` erhalten:
- `http://localhost/MyDir/hello.txt`
- `http://localhost/mydir/Hello.txt`
- `http://localhost/MYDIR/hello.txt`
Wie wirkt sich das auf DVWA aus? Die meisten Leute verwenden git, um DVWA nach `/var/www/html` zu klonen. Dadurch erhalten sie das Verzeichnis `/var/www/html/DVWA/` mit allen DVWA-Dateien darin. Sie rufen dann `http://localhost/` auf und erhalten entweder einen `404` oder die Standard-Apache-Begrüßungsseite. Da sich die Dateien im Verzeichnis DVWA befinden, müssen Sie `http://localhost/DVWA` aufrufen.
Ein weiterer häufiger Fehler ist der Aufruf von `http://localhost/dvwa`, der einen `404` ergibt, da `dvwa` für die Linux-Verzeichniszuordnung nicht `DVWA` ist.
Wenn Sie nach der Einrichtung versuchen, die Seite aufzurufen und einen `404` erhalten, überlegen Sie, wo Sie die Dateien installiert haben, wo sie relativ zum Dokumentenwurzelverzeichnis liegen und welche Groß-/Kleinschreibung das verwendete Verzeichnis hat.
### Ich habe die Seite aufgerufen und erhalte einen leeren Bildschirm
[Video-Hilfe](https://youtu.be/C-kig5qrPSA?si=wTS3Aj8fycW3Idfr&t=243)
Dies ist in der Regel ein Konfigurationsproblem, das ein anderes Problem verdeckt. Standardmäßig zeigt PHP keine Fehler an. Wenn Sie daher während der Einrichtung vergessen haben, die Fehleranzeige zu aktivieren, wird die App bei anderen Problemen, z. B. fehlgeschlagener Datenbankverbindung, nicht geladen, aber die Meldung, die Ihnen sagt, was falsch ist, wird ausgeblendet.
Um dies zu beheben, stellen Sie sicher, dass Sie `display_errors` und `display_startup_errors` wie im Abschnitt [PHP-Konfiguration](#php-konfiguration) beschrieben setzen, und starten Sie Apache neu.
### "Access denied" beim Ausführen der Einrichtung
Wenn Sie beim Ausführen des Einrichtungsskripts Folgendes sehen, stimmen der Benutzername oder das Passwort in der Konfigurationsdatei nicht mit denen in der Datenbank überein. [Video-Hilfe](https://youtu.be/C-kig5qrPSA?si=_a4Bop505-1tXb_F&t=973)```mariadb
Database Error #1045: Access denied for user 'notdvwa'@'localhost' (using password: YES).
Der Fehler sagt Ihnen, dass Sie den Benutzernamen notdvwa verwenden.
Der folgende Fehler besagt, dass Sie die Konfigurationsdatei auf die falsche Datenbank verweisen. Video Help```mariadb SQL: Access denied for user 'dvwa'@'localhost' to database 'notdvwa'
Es besagt, dass Sie den Benutzer `dvwa` verwenden und versuchen, eine Verbindung zur Datenbank `notdvwa` herzustellen.
Das erste, was zu tun ist, ist zu überprüfen, ob das, was Sie Ihrer Meinung nach in die Konfigurationsdatei eingetragen haben, tatsächlich dort steht.
Wenn es Ihren Erwartungen entspricht, besteht der nächste Schritt darin, zu überprüfen, ob Sie sich als dieser Benutzer in der Befehlszeile anmelden können. Angenommen, Sie haben einen Datenbankbenutzer `dvwa` und ein Passwort `p@ssw0rd`, führen Sie den folgenden Befehl aus:```sh
mysql -u dvwa -pp@ssw0rd -D dvwa
Hinweis: Nach dem -p befindet sich kein Leerzeichen
Wenn Sie das Folgende sehen, ist das Passwort korrekt:```mariadb Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 14 Server version: 10.3.22-MariaDB-0ubuntu0.19.10.1 Ubuntu 19.10
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [dvwa]>
Da Sie sich in der Befehlszeile verbinden können, liegt wahrscheinlich ein Fehler in der Konfigurationsdatei vor. Überprüfen Sie diese und erstellen Sie ein Ticket, wenn Sie es immer noch nicht zum Laufen bringen.
Wenn Sie Folgendes sehen, ist der von Ihnen verwendete Benutzername oder das Passwort falsch. Wiederholen Sie die Schritte unter [Database Setup](#database-setup) und stellen Sie sicher, dass Sie während des gesamten Vorgangs denselben Benutzernamen und dasselbe Passwort verwenden.```mariadb
ERROR 1045 (28000): Access denied for user 'dvwa'@'localhost' (using password: YES)
Wenn Sie Folgendes erhalten, sind die Benutzeranmeldedaten korrekt, aber der Benutzer hat keinen Zugriff auf die Datenbank. Wiederholen Sie die Einrichtungsschritte und überprüfen Sie den verwendeten Datenbanknamen.```mariadb ERROR 1044 (42000): Access denied for user 'dvwa'@'localhost' to database 'dvwa'
Der letzte Fehler, den Sie erhalten könnten, ist dieser:```mariadb
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Dies ist kein Authentifizierungsproblem, sondern weist darauf hin, dass der Datenbankserver nicht läuft. Starten Sie ihn mit dem folgenden```sh sudo service mysql start
### Verbindung verweigert
[Video Help](https://youtu.be/C-kig5qrPSA?si=_a4Bop505-1tXb_F&t=444)
Ein ähnlicher Fehler wie dieser:```mariadb
Fatal error: Uncaught mysqli_sql_exception: Connection refused in /var/sites/dvwa/non-secure/htdocs/dvwa/includes/dvwaPage.inc.php:535
Bedeutet, dass Ihr Datenbankserver nicht läuft oder Sie die falsche IP-Adresse in der Konfigurationsdatei haben.
Überprüfen Sie diese Zeile in der Konfigurationsdatei, um zu sehen, wo der Datenbankserver erwartet wird:```php $_DVWA[ 'db_server' ] = '127.0.0.1';
Dann gehen Sie zu diesem Server und überprüfen Sie, ob er läuft. Unter Linux kann dies mit:```sh
systemctl status mariadb.service
Und Sie suchen nach so etwas, der wichtige Teil ist, dass dort active (running) steht.```sh
● mariadb.service - MariaDB 10.5.19 database server
Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; preset: enabled)
Active: active (running) since Thu 2024-03-14 16:04:25 GMT; 1 week 5 days ago
Falls es nicht läuft, starten Sie es mit:```sh
sudo systemctl stop mariadb.service
Beachten Sie das sudo und geben Sie bei Aufforderung Ihr Linux-Benutzerkennwort ein.
Unter Windows überprüfen Sie den Status in der XAMPP-Konsole.
Mit den neuesten Versionen von MySQL kann PHP nicht mehr im Standardkonfigurationszustand mit der Datenbank kommunizieren. Wenn Sie versuchen, das Setup-Skript auszuführen, und die folgende Meldung erhalten, bedeutet dies, dass Sie eine Konfiguration haben.```mariadb Database Error #2054: The server requested authentication method unknown to the client.
Sie haben zwei Möglichkeiten; am einfachsten ist es, MySQL zu deinstallieren und MariaDB zu installieren. Im Folgenden finden Sie die offizielle Anleitung des MariaDB-Projekts:
<https://mariadb.com/resources/blog/how-to-migrate-from-mysql-to-mariadb-on-linux-in-five-steps/>
Alternativ können Sie wie folgt vorgehen:
1. Bearbeiten Sie als root die folgende Datei: `/etc/mysql/mysql.conf.d/mysqld.cnf`
1. Fügen Sie unter der Zeile `[mysqld]` folgendes hinzu:
`default-authentication-plugin=mysql_native_password`
1. Starten Sie die Datenbank neu: `sudo service mysql restart`
1. Überprüfen Sie die Authentifizierungsmethode für Ihren Datenbankbenutzer:
```sql
mysql> select Host,User, plugin from mysql.user where mysql.user.User = 'dvwa';
+-----------+------------------+-----------------------+
| Host | User | plugin |
+-----------+------------------+-----------------------+
| localhost | dvwa | caching_sha2_password |
+-----------+------------------+-----------------------+
1 rows in set (0.00 sec)
```
1. Sie werden wahrscheinlich `caching_sha2_password` sehen. Falls ja, führen Sie folgenden Befehl aus:
```sql
mysql> ALTER USER dvwa@localhost IDENTIFIED WITH mysql_native_password BY 'p@ssw0rd';
```
1. Wenn Sie die Überprüfung erneut durchführen, sollten Sie jetzt `mysql_native_password` sehen.
```sql
mysql> select Host,User, plugin from mysql.user where mysql.user.User = 'dvwa';
+-----------+------+-----------------------+
| Host | User | plugin |
+-----------+------+-----------------------+
| localhost | dvwa | mysql_native_password |
+-----------+------+-----------------------+
1 row in set (0.00 sec)
```
Nach alledem sollte der Einrichtungsprozess nun normal funktionieren.
Wenn Sie weitere Informationen wünschen, lesen Sie bitte die folgende Seite: <https://www.php.net/manual/en/mysqli.requirements.php>.
### Datenbankfehler #2002: No such file or directory
Der Datenbankserver läuft nicht. In einer Debian-basierten Distribution kann dies wie folgt behoben werden:```sh
sudo service mysql start
Es gibt einige Gründe, warum Sie diese Fehler erhalten könnten, aber der wahrscheinlichste ist, dass die von Ihnen verwendete Datenbankserver-Version nicht mit der PHP-Version kompatibel ist.
Dies tritt am häufigsten auf, wenn Sie die neueste Version von MySQL ausführen, da PHP und MySQL nicht gut zusammenarbeiten. Bester Rat: Verzichten Sie auf MySQL und installieren Sie MariaDB, da dies etwas ist, das wir nicht unterstützen können.
Weitere Informationen finden Sie unter:
Möglicherweise haben Sie Probleme mit SELinux. Deaktivieren Sie entweder SELinux oder führen Sie diesen Befehl aus, um dem Webserver die Kommunikation mit der Datenbank zu ermöglichen:```sh setsebool -P httpd_can_network_connect_db 1
### MariaDB Docker startet nicht
Wenn Sie beim Starten von MariaDB den folgenden Fehler in den Docker-Protokollen sehen, liegt dies wahrscheinlich daran, dass der Host-Rechner nicht genügend Arbeitsspeicher hat. Wenn Sie dies in einer gehosteten Umgebung verwenden, ist die beste Lösung, eine größere Maschinengröße zu wählen, um mehr Speicher zu erhalten und es erneut zu versuchen.```
[Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:10.11.15+maria~ubu2204 started.
[Warn] [Entrypoint]: /sys/fs/cgroup///memory.pressure not writable, functionality unavailable to MariaDB
Möglicherweise müssen Sie auch die folgende Zeile zum volumes-Abschnitt Ihrer compose.yml-Datei hinzufügen:```
Das würde den Abschnitt „volumes“ einer Standard-Konfigurationsdatei wie folgt ändern:```
volumes:
- dvwa:/var/lib/mysql
- /sys/fs/cgroup/memory.pressure:/sys/fs/cgroup/memory.pressure
Weitere Informationen dazu, warum dies funktioniert, finden Sie in diesem Issue.
Aktuelle Fehlerbehebungsinformationen finden Sie in den offenen und geschlossenen Tickets im Git-Repository:
Bevor Sie ein Ticket einreichen, stellen Sie bitte sicher, dass Sie die neueste Version des Codes aus dem Repository verwenden. Dabei handelt es sich nicht um das neueste Release, sondern um den neuesten Code aus dem Master-Branch.
Wenn Sie ein Ticket einreichen, geben Sie bitte mindestens die folgenden Informationen an:
Ich werde versuchen, einige Tutorial-Videos zusammenzustellen, die durch einige der Schwachstellen führen und zeigen, wie man sie erkennt und dann ausnutzt. Hier sind die, die ich bisher erstellt habe:
Der Support dafür ist begrenzt. Bevor Sie Probleme melden, stellen Sie bitte sicher, dass Sie bereit sind, an der Fehlersuche zu arbeiten. Behaupten Sie nicht einfach, "es funktioniert nicht".
Standardmäßig werden SQLi und Blind SQLi gegen den von der Site verwendeten MariaDB/MySQL-Server durchgeführt, aber es ist möglich, umzustellen, um die SQLi-Tests stattdessen gegen SQLite3 durchzuführen.
Ich werde nicht darauf eingehen, wie man SQLite3 mit PHP zum Laufen bringt, aber es sollte sich um eine einfache Installation des php-sqlite3-Pakets und dessen Aktivierung handeln.
Um die Umstellung vorzunehmen, bearbeiten Sie einfach die Konfigurationsdatei und fügen Sie die folgenden Zeilen hinzu oder bearbeiten Sie sie:```php $_DVWA["SQLI_DB"] = "sqlite"; $_DVWA["SQLITE_DB"] = "sqli.db";
Standardmäßig wird die Datei `database/sqli.db` verwendet. Falls Sie diese beschädigen, kopieren Sie einfach `database/sqli.db.dist` darüber.
Die Herausforderungen sind exakt dieselben wie bei MariaDB, laufen jedoch gegen SQLite3.
- - -
👨💻 Mitwirkende
-----
Vielen Dank für all Ihre Beiträge und dafür, dass Sie dieses Projekt auf dem neuesten Stand halten. :heart:
Wenn Sie eine Idee, eine Verbesserung oder einfach nur Lust auf Mitarbeit haben, sind Sie herzlich eingeladen, zum Projekt beizutragen und daran teilzunehmen. Senden Sie uns gerne Ihren PR.
<p align="center">
<a href="https://github.com/digininja/DVWA/graphs/contributors">
<img src="https://contrib.rocks/image?repo=digininja/DVWA&max=500">
</a>
</p>
- - -
## Melden von Schwachstellen
Um es einfach zu sagen: Bitte nicht!
Etwa einmal im Jahr reicht jemand einen Bericht über eine in der App gefundene Schwachstelle ein. Manche sind gut geschrieben, manchmal sogar besser als Berichte aus bezahlten Pen-Tests, andere sind einfach nur „Ihnen fehlen Header, zahlen Sie mir“.
Im Jahr 2023 eskalierte dies auf eine ganz neue Ebene, als jemand beschloss, eine CVE für eine der Schwachstellen zu beantragen. Es wurde [CVE-2023-39848](https://nvd.nist.gov/vuln/detail/CVE-2023-39848) vergeben. Es gab viel Gelächter und es wurde Zeit verschwendet, dies zu korrigieren.
Die App hat Schwachstellen – das ist beabsichtigt. Die meisten sind die gut dokumentierten, die Sie als Lektionen durcharbeiten, andere sind „versteckte“ – solche, die Sie selbst finden müssen. Wenn Sie wirklich Ihre Fähigkeiten unter Beweis stellen wollen, die versteckten Extras zu finden, schreiben Sie einen Blogbeitrag oder erstellen Sie ein Video, denn es gibt wahrscheinlich Leute da draußen, die daran interessiert wären, davon zu erfahren und wie Sie sie gefunden haben. Wenn Sie uns den Link schicken, nehmen wir ihn vielleicht sogar in die Referenzen auf.
## Links
Project Home: <https://github.com/digininja/DVWA>
_Erstellt vom DVWA-Team_