
Hier richten wir unser Labor in unserer SEED Ubuntu 16.04 VM ein und wir müssen zuerst den Go Git Service (GOGS) auf unserer VM installieren, bevor wir zur Ausnutzung der SQL-Injection-Sicherheitslücke übergehen können. Zum Einrichten der VM sind folgende Schritte erforderlich:
Schritt 1: Datenbank installieren Sobald wir uns am System angemeldet haben, sollten wir den folgenden Befehl ausführen, um sicherzustellen, dass unsere Bibliotheken und Repos aktualisiert sind: $ sudo apt-get -y update
Wir verwenden im Backend einen MySQL-Server und müssen diesen daher auf unserer VM installieren, was wir mit folgendem Befehl tun können: $ sudo apt-get – y install mysql-server
Während der Installation der Datenbank fordert das System zur Eingabe eines Root-Benutzerpassworts für die Datenbank auf. Nun erstellen wir eine Datei mit dem Namen gogs.sql. Wir haben nano verwendet, aber jeder Datei-Editor funktioniert.
Anschließend fügen wir die folgenden SQL-Anweisungen in die Datei gogs.sql ein und speichern sie. DROP DATABASE IF EXISTS gogs; CREATE DATABASE IF NOT EXISTS gogs CHARACTER SET utf8 COLLATE utf8_general_ci;
Nun führen wir die Datei gogs.sql mit MySQL aus, um die GOGS-Datenbank mit dem Befehl zu erstellen: $ mysql – u root -p < gogs.sql
Wir werden dann nach dem Root-Passwort gefragt, das wir während der Datenbankinstallation erstellt haben, geben es ein und können die GOGS-Datenbank erfolgreich erstellen.
Um GOGS aus dem Quellcode zu installieren, benötigen wir Versionskontrolltools wie Git und Mercurial. Um diese auf unserer VM zu installieren, verwenden wir den folgenden Befehl: $ sudo apt-get -y install mercurial git
Schritt 2: Go installieren GOGS ist in der Programmiersprache Go geschrieben, daher müssen wir Go vor der Kompilierung von GOGS installieren.
Zunächst müssen wir einige Umgebungsvariablen setzen. Dazu bearbeiten wir die Datei ~/.bashrc und fügen die folgenden Zeilen hinzu und speichern die Datei: export GOPATH=/home/git/go export GOROOT=/usr/local/src/go export PATH=${PATH}:$GOROOT/bin
Um sicherzustellen, dass unsere Änderungen erfolgreich übernommen wurden, führen wir den folgenden Befehl aus: $ source ~/.bashrc
Nun verwenden wir den Befehl wget, um eine der kompilierten Versionen von Go zu installieren. Der Befehl lautet wie folgt: $ wget https://storage.googleapis.com/golang/go1.4.2.linux-amd64.tar.gz
Dann entpacken wir es mit folgendem Befehl: $ tar zxf go1.4.2.linux-amd64.tar.gz
Sobald unsere Datei entpackt ist, wechseln wir in das in ~/.bashrc definierte Arbeitsverzeichnis $GOROOT. Der Befehl dafür lautet: $ sudo mv go $GOROOT
Nun überprüfen wir die Installation von Go auf unserer VM mit dem Befehl: $ go
Um auf den Gogs-Ordner mit allen erforderlichen Dokumenten zuzugreifen, klonen Sie einfach das Gogs-Repository in den Pfad $GOPATH/src/github.com/gogits/gogs. Dies kann mit folgendem Befehl erfolgen: $ cd $GOPATH/src/github.com/gogits/gogs
Nun installieren wir Supervisor, um den Gogs-Dienst zu verwalten. Dazu verwenden wir den Befehl: $ sudo apt-get -y install supervisor
Nachdem Supervisor auf unserer VM installiert ist, erstellen wir einen Gogs-Daemon, indem wir einen Supervisor-Konfigurationsabschnitt erstellen. Dazu müssen wir zunächst einen Speicherort für die Logdateien festlegen. Der Speicherort der Logdateien ist /var/log/gogs. Der Befehl dafür lautet: $ sudo mkdir -p /var/log/gogs
Mit einem definierten Speicherort für die Logs bearbeiten wir die Supervisor-Konfigurationsdatei, die sich unter /etc/supervisor/supervisord.conf befindet. Der Befehl dafür lautet: $ sudo nano /etc/supervisor/supervisord.conf
Wir fügen den folgenden Inhalt an die Datei an, um den Gogs-Abschnitt zu erstellen:
[program:gogs] directory=/home/git/go/src/github.com/gogits/gogs/ command=/home/git/go/src/github.com/gogits/gogs/gogs web autostart=true autorestart=true startsecs=10 stdout_logfile=/var/log/gogs/stdout.log stdout_logfile_maxbytes=1MB stdout_logfile_backups=10 stdout_capture_maxbytes=1MB stderr_logfile=/var/log/gogs/stderr.log stderr_logfile_maxbytes=1MB stderr_logfile_backups=10 stderr_capture_maxbytes=1MB environment = HOME="/home/git", USER="git" user = git
Der obige Code definiert die Befehle, die wir ausführen möchten, um Gogs zu starten, Supervisor zu starten, den Speicherort der Logdateien und die entsprechenden Umgebungsvariablen. Nun starten wir Supervisor neu, damit unsere Änderungen wirksam werden. Dazu verwenden wir den Befehl: $ sudo service supervisor restart
Um zu überprüfen, ob Gogs tatsächlich läuft, verwenden wir den folgenden Befehl: $ ps -ef | grep gogs Der Befehl ps zeigt Informationen über die aktiven Prozesse an, und wir durchsuchen diese Ergebnisse mit grep, um Informationen über Gogs zu erhalten.
Eine andere Methode, um zu überprüfen, ob der Server läuft, ist die Überprüfung der stdout.log-Datei mit dem Befehl: $ tail /var/log/gogs/stdout.log
Nun können wir sogar die Webseite besuchen, die die Installationsseite anzeigt. Die URL dafür lautet: http://10.0.2.15:3000
Schritt 4: Nginx als Reverse Proxy einrichten Zunächst müssen wir Nginx installieren, was wir mit folgendem Befehl tun: $ sudo apt-get -y install nginx
Nun erstellen wir eine Nginx-Konfigurationsdatei für Gogs, die sich unter etc/nginx/sites-available/gogs befindet. Wir fügen den folgenden Code in die Datei ein:
server { listen 80; server_name "HIER IP-ADRESSE EINFÜGEN!!!";
proxy_set_header X-Real-IP $remote_addr; # Original-Client-IP weitergeben
location / {
proxy_pass http://localhost:3000;
}
} Wir müssen auch einen symbolischen Link erstellen, damit Nginx auf die Datei zugreifen kann. Der symbolische Link wird zwischen /etc/nginx/sites-available/gogs und /etc/nginx/sites-enabled/gogs erstellt. Wir können den symbolischen Link mit folgendem Befehl erstellen:
$ sudo ln -s /etc/nginx/sites-available/gogs /etc/nginx/sites-enabled/gogs Schließlich müssen wir den Nginx-Dienst neu starten, um die virtuellen Host-Konfigurationen zu aktivieren. Der Befehl zum Neustart lautet: $ sudo service nginx restart
Nun können wir die zuvor verwendete URL ohne Portnummer besuchen. Die URL lautet: http://10.0.2.15
Schritt 5: Gogs initialisieren Bevor wir Gogs initialisieren können, müssen wir auf der Webseite des Servers (deren URL lautet: http://10.0.2.15/install) bestimmte Informationen ausfüllen.
Im ersten Abschnitt füllen wir Informationen zur Datenbank aus, in unserem Fall MySQL. Die Felder sind wie folgt:
Database Type: MySQL Host: 127.0.0.1:3306 User: root Password: seedubuntu Database Name: gogs
Im zweiten Abschnitt füllen wir die allgemeinen Einstellungen von Gogs aus. Die Felder dafür sind: Repository Root Path: /home/git/gogs-repositories Run User: git Domain: 10.0.2.15 HTTP Port: 300 Application URL: http://10.0.2.15:3000
Dann ändern wir den Admin-Benutzernamen und das Passwort unter Admin Account Settings.
Nun klicken wir auf "Install Gogs" und melden uns an.
Schritt 6: Gogs testen Um sicherzustellen, dass Gogs wie vorgesehen funktioniert, führen wir einen einfachen Pull/Push-Test durch. Zuerst gehen wir zur URL http://10.0.2.15/repo/create und erstellen ein Repository mit dem Namen my-test-repo.
Nachdem alle erforderlichen Informationen ausgefüllt sind, können wir mit der Erstellung des Repositories fortfahren, indem wir auf die grüne Schaltfläche "Create Repository" klicken.
Nun können wir dieses Repository auch mit dem Befehl klonen: $ git clone http://10.0.2.15//my-test-repo.git
Wir wechseln dann zum Speicherort des Repositories auf unserer VM und aktualisieren die Datei README.md. Schließlich committen wir alle Änderungen und pushen sie mit dem Befehl: $ git add –-all && git commit -m "init command" && git push origin master
Unser Repository wurde erfolgreich erstellt. Wenn wir nun die URL http://10.0.2.15/iammuskaan/my-test-repo besuchen, können wir unseren Inhalt sehen, der an die README.md-Datei angehängt wurde.