DVWA installieren

Damn Vulnerable Web Application: DVWA Damn Vulnerable Web Application: DVWA

Im vorherigen Beitrag habe ich euch erzählt, was DVWA ist. Nun möchte ich euch zeigen, wie DVWA installiert wird. Als Host gilt hier mein Kali Linux System. PHP5 und MYSQL setze ich als Voraussetzung. PHP7 wird von DVWA nicht untertützt. Falls beide PHP Versionen installiert sind könnt ihr mit a2enmod und a2dismod zwischen den Versionen wechseln.

a2enmod php5.0
a2dismod php7.0

Vorbereitung zur Installation

Für eine erfolgreiche Installation müssen eventuell folgende Pakete nachinstalliert werden.

  • php5 libapache2-mod-p
  • php5-gd
  • php-mysql
apt-get install php5 libapache2-mod-p
apt-get install php5-gd
apt-get install php-mysql

Nun solltet ihr noch einmal eure PHP Version überprüfen.

php5 -v
PHP 5.6.7-1 (cli) (built: Mar 24 2015 12:30:15) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
    with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2015, by Zend Technologies

Für die Registrierung des ReCaptcha benötigt ihr ein Google Account. Dort könnt ihr einen ReCaptcha beantragen, denn ihr für die spätere Konfiguration benötigt. Zum Schluss änderen wir die php.ini und setzen den allow_url_include Wert von OFF auf ON.

nano /etc/php5/apache2/php.ini
allow_url_include = ON

Installation von DVWA

Zu allererst benötigen wir die Dateien aus dem dvwa Verzeichnis auf GitHub.

git clone https://github.com/ethicalhack3r/DVWA

Das gerade heruntergeladene Verzeichnis kopieren wir in unser html Verzeichnis und benennen es um.

mv DVWA /var/www/html/
mv DVWA/ dvwa

Bevor wir weitermachen legen wir noch einen MySQL Benutzer auf unsere DB an. Diesen Benutzer geben wir volle Berechtigung.

service apache2 start && service mysql start
mysql
create user 'dvwa'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PREVILEGES ON *.* TO 'dvwa'@'localhost' WITH GRANT OPTION;

Nehmen wir uns nun weiter die Konfiguration an. Dazu gehen wir in das DVWA Verzeichnis und benennen die Config Datei um.

cd var/www/html/dvwa/config
mv config.inc.php.dist config.inc.php

Weiterhin geben wir in der Config Datei unsere Daten vom Server, Datenbank, DB Benutzer, DB Passwort an. Ebenfalls müssen wir hier unsere von google beantragten ReCaptcha angeben.

Zum Schluss ändern wir noch einige Berechtigungen bevor wir uns auf die Webseite schalten.

chmod -R 777 /var/www/html/dvwa/hackable/uploads/
chmod -R 777 /var/www/html/dvwa/external/phpids/0.6/lib/IDS/tmp/phpids_log.txt

Öffnen wir nun unseren Browser und surfen auf 127.0.0.1/dvwa, sollten wir die Anmeldeseite bekommen.

Die Installation ist nun abgeschlossen. Achtet bittet darauf, dass ihr die Sicherheitseinstellung von „impossible“ auf „LOW“ umstellt. Nun können wir unsere ersten Attacken auf die Webseite machen.

Damn Vulnerable Web App – DVWA

Damn Vulnerable Web Application: DVWA Damn Vulnerable Web Application: DVWA

Damn Vulnerable Web App (DVWA)

Damn Vulnerable Web App, kurz DVWA, ist eine PHP/MYSQL Web Anwendung, die schwer verwundbar ist. Deshalb ist sie für Angreifer ein attraktives Ziel ist. Die Software bietet für IT-Sicherheitsexperten eine Oberfläche, um die eigenen Fähigkeiten in einem legalen Umgebung zu testen. Zusätzlich soll DVWA Webentwickler helfen, sichere Web Anwendungen zu schreiben. Es können unterschiedliche Arten von Webangriffen performt werden, um somit die Seite zu komprimitieren. Unter anderem stellt DVWA Angriffsplatformen für Brute-Force, Command Execution, CSFR, File Injection, SQL Injection und XSS zur Verfügung. Dabei gibt es 3 Sicherheitsstufen. Jede Schwierigkeitsstufe erhöht den Schwierigkeitsgrad. Somit ist vom Anfänger bis hin zum Experten alle Bereiche abgedeckt. Die Applikation kann frei verwendet, modifiziert und verteilt werden.

Installation

Viele Wege führen nach Rom und so ist es auch bei der Installation. DVWA kann unter Windows und Linux installiert und betrieben werden. Am Einfachsten is es mittels XAMPP den Web- und Datenbankserver bereit zu stellen. Ich habe mich aber für eine direkte Installation auf mein Kali Linux System entschieden. Kali ist eine Distribution extra für Pentester entwickelt und bietet schon eine große Anzahl an Werkzeuge. Die Installation von DVWA findet ihr unter folgenden Link. Link zur Installation.

Warnung

Weder ich noch der Hersteller tragen Verantwortung für die Installation und Verwendung der Software. Dies geschieht unter der festen Verantwortung des Benutzers. Veröffentlicht die Seite nicht auf ein frei zugänglichen Webseite. Es wird empfohlen eine virtuelle Maschine aufzusetzen. Die Maschine sollte die NAT networking mode beherrschen.

 

 

PHP Datenbank Klasse verwenden

Im vorherigen Artikel habe ich gezeigt, wie ich den Zugriff auf einer Datenbank durch meine Klasse bereitstelle. Ich werde darauf jetzt nicht mehr direkt eingehen und euch zeigen, wie die Datenbank Klasse verwendet wird.

Zuerst muss ein neue Objekt der Datenbank angelegt und die erwarteten Werte mitgegeben werden. Damit wären die Weichen für eine Datenbankverbindung schon einmal gestellt.

$db = new DB("Server","DB","User","Password");

Vorweg definiere ich die Query für die spätere Abfrage Funktion.

$query = "select * from Table";

Datenbankabfragen haben meist mehr als nur eine Zeile. Die Werte stammen aus dem Array der Funktion execute_query(). Im Foreach ist dadurch mein Aufruf für die eigentliche SQL Abfrage gegeben. Über das $view Objekt werde ich hier nicht sprechen, da es nicht relevant für die Datenbank Abfrage ist.

foreach($db->execute_query($query) as $info){

    $view->draw_table($info[0],$info[2],$info[3],$info[4]);
    
    }

Zum Schluss wird natürlich nur noch die Session wieder geschlossen.

$db_machines->closeSQL();

 

Hier der komplette Code.

db = new DB("Server","DB","User","Password"); 
$query = "select * from Table"; 

foreach($db->execute_query($query) as $info)
{
  $view->draw_table($info[0],$info[2],$info[3],$info[4]);
 }
 
 $db_machines->closeSQL();

 

Hinweis

Da ich bisher noch nicht auf Sicherheit bedacht war, empfehle ich die Klasse nur für interne Projekte und nicht für externe benutzen. Ich möchte hiermit auch nur Denkanstöße geben, wie eine Klasse aussehen könnte.

PHP Datenbank Klasse

Damit ich mir die Arbeit für den Datenbankzugriff und die jeweilige Auswertung der Daten vereinfachen kann, habe ich die Datenbank Klasse geschrieben.

In der Klasse habe ich 6 private Variablen erzeugt, die die Daten der Datenbank Session speichern.

private $_connection;
private $_connectionInfo = array();
private $_host;
private $_username;
private $_db;
private $_password;

Der Konstruktor erwartet die Übergabe des Server, Zugangsdaten und die Datenbank und speichert diese in die privaten Variablen ab.

public function __construct($host,$db,$username,$password)
    {
    $this->_host					= $host;
    $this->_db						= $db;
    $this->_username			= $username;
    $this->_password			= $password;
    $this->_connectionInfo	=array("Database" => $this->_db, "UID"=>$this->_username,"PWD"=>$this->_password);
        $this->_connection = sqlsrv_connect( $this->_host, $this->_connectionInfo);
    }

Somit sind die Zugangsdaten der Klasse bekannt. Damit wir noch ein Nutzen daraus ziehen können, fehlt natürlich noch die SQL Abfrage. Dafür habe ich die function execute_query angelegt, die überprüft, ob eine Datenbank Session erstellt wurde. Als Übergabeparameter wird eine SQL Abfrage erwartet. Das Ergebnis der SQL Abfrage wird in einem mehrdimensionalen Array abgelegt. Die erste Dimension des Arrays ist für die Zeilen der Abfrage, während die zweite Dimension die jeweiligen Daten beinhaltet. Das komplette Array dient als Rückgabewert.

public function execute_query($query)
  {
    $var 	= array();
    $e	= 0;
      if($this->_connection)
      {
        
        $stmt1 = sqlsrv_query($this->_connection, $query);
        while( $row = sqlsrv_fetch_array($stmt1,  SQLSRV_FETCH_NUMERIC))
        {
          
          for($i=0;$i<sizeof($row);$i++){
            $var[$e][$i] = $row[$i];
          }
          $e++;
        }
        
      }else{
        
        echo "<p style='color:red; font-size:20px;'>Connection could not be established to SQL.<br /></p>";
        die( print_r( sqlsrv_errors(), true));
           
       } 
    
    return $var;
  }

Zwar nicht notwendig, aber übersichtshalber habe ich die Funktion closeSQL angelegt, die nichts weiter macht als die aktuelle DB Session zu schliessen.

public function closeSQL(){
  sqlsrv_close($this->_connection);
}

Zum Schluss noch einmal der komplette Code der Datenbank Kasse.

<?php
/********************************Informationen**************************************************

Author: Stefan Többen
Developed: 24.08.2017

**************************************Funktion***************************************************



************************************TODO*********************************************************

alles erledigt

************************************************************************************************/

class DB{
  private $_connection;
  private $_connectionInfo = array();
  private $_host;
  private $_username;
  private $_db;
  private $_password;
  
  

/*****************************************************************************************************/
/*****************************************************************************************************/
public function __construct($host,$db,$username,$password)
    {
    $this->_host					= $host;
    $this->_db						= $db;
    $this->_username			= $username;
    $this->_password			= $password;
    $this->_connectionInfo	=array("Database" => $this->_db, "UID"=>$this->_username,"PWD"=>$this->_password);
        $this->_connection = sqlsrv_connect( $this->_host, $this->_connectionInfo);
    }
  
/*****************************************************************************************************/
/*****************************************************************************************************/	
public function execute_query($query)
  {
    $var 	= array();
    $e	= 0;
      if($this->_connection)
      {
        
        $stmt1 = sqlsrv_query($this->_connection, $query);
        while( $row = sqlsrv_fetch_array($stmt1,  SQLSRV_FETCH_NUMERIC))
        {
          
          for($i=0;$i<sizeof($row);$i++){
            $var[$e][$i] = $row[$i];
          }
          $e++;
        }
        
      }else{
        
        echo "<p style='color:red; font-size:20px;'>Connection could not be established to SQL.<br /></p>";
        die( print_r( sqlsrv_errors(), true));
           
       } 
    
    return $var;
  }
  
/*****************************************************************************************************/
/*****************************************************************************************************/	
public function closeSQL(){
  sqlsrv_close($this->_connection);
}	
  
  
}
?>

Wie die Datenbank Klasse verwendet wird, zeige ich in meinem nächsten Beitrag. PHP Datenbank Klasse verwenden

Rückblende: Sao Paulo

Als ich meine Reise nach Brasilien antrat, war ich aufgrund meines ersten Interkontinentalfluges aufgeregt. Für mich war es das erste Mal, dass ich das Große Wasser überquerte. Als ich in Sao Paulo angekommen bin, wurde ich von einem Taxifahrer abgeholt und erstmal zur Firma gebracht. Dort wurde ich vom Betriebsleiter und Geschäftsführer freundlich empfangen. Ziel der Reise war es, die Netzwerkumgebung und Serverstruktur in unsere Umgebung zu integrieren. Alle Rechner, Drucker und Server mussten in unsere Domäne. Schnell stellte sich heraus, dass die Sprachbarriere ein Problem wird, denn dort wurde nur grob Englisch gesprochen. So wurde oft der Google Translater benutzt, damit ich mich überhaupt mit der Belegschaft ordentlich unterhalten konnte.

Geschäftsessen

In Erinnerung wird mir vorallem das Geschäftsessen bleiben, welches in einem guten brasilianischen Restaurant stattgefunden hat. Die brasilianische Küche hat einiges zu bieten. Interessant war das servieren der Speißen, denn dort gingen die Kellner mit den Fleischsorten von Tisch zu Tisch. Ist man satt, wird die Karte, die auf dem Platz liegt, umgedreht. Damit signalisiere ich, dass ich satt bin und nichts mehr möchte.

Sight Seeing in Sao paulo

Insgesamt blieb ich 7 Tage in Brasilien. Am am Samstag bekam ich eine Rundreise durch Sao Paulo. Sao Paulo hat ca 22 Millionen Einwohner. Diese Stadt ist monströs. Viel Zeit und viele Sehenswürdigkeiten rundeten das Sight seeing ab. Unter anderm war ein Museum, ein Garten und viele Statuen Ziel der Besichtigung. Bilder meiner Tour können in meiner Gallerie besichtig werden. Folgt dazu diesen Link Gallerie.

Geschäftsreise Budapest (Ungarn)

Vor kurzem war ich auf Geschäftreise in Budapest/Ungarn. An für sich eine sehr schöne Stadt. Als Hauptstadt von Ungarn wohnen hier ca. 2 Millionen Menschen, wohingegen Ungarn nur 10 Millionen Einwohner hat. Insgesamt ware ich 4 Tage vor Ort, wobei ich am letzten Tag noch Zeit hatte und mir es erlaubt war für knappe 2 Stunden eine Stadttour zu machen, ehe mein Flug nach Deutschland zurück ging. Da die Zeit knapp war, konnte ich mir nicht alle Sehenswürdigkeiten anschauen und hatte auch nur begrenzt Zeit mir jene anzuschauen.

Unteranderem waren die älteste Kettenbrücke, der Heldenplatz, die Matthiaskirche und das Parlamentsgebäude Teil meiner Tour. Gestartet bin ich mit einem Rundgang der Zitadelle. Leider konnte ich nicht das innere Sehen ,da sie aufgrund eines kleines Konflikts zwischen Stadt und Eigentümer vorübergehend geschlossen. Die Zitadelle liegt höher als Budapest selber, sodass mir von hier einige schöne Ausblicke gewärt worden sind. An der Zitadelle gelegen ist die Freiheitsstatue von Budapest, die für die Befreiung Ungarns im 2.ten Weltkrieg zur Ehrung der Soldaten errichtet worde ist. Gefallen hat mir auch der Burgpalast in mitten der Stadt. Dieses riesige Gebäude hinterlässt eine beeinträchtgenden  Eindruck. Budapest ist eine sehr schöne Stadt und ich freue mich schon auf den nächsten Besuch. Alle meine Bilder von Budapest gibt es hier zu sehen.