Files
Presentations/community_gesundheitsämter_17_06_2026/phishing-demo-ms-login.html
T
2026-06-15 18:12:40 +02:00

246 lines
11 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Anmelden bei Ihrem Konto</title>
<!--
============================================================================
SCHULUNGS-DEMO PHISHING-AWARENESS
----------------------------------------------------------------------------
Diese Seite IMITIERT optisch einen Microsoft-Login, ist aber bewusst
HARMLOS gebaut:
* Es werden KEINE Daten gespeichert, gesendet oder weitergeleitet.
* Es gibt KEINE Verbindung zu Microsoft und KEINEN echten Login.
* Alle Eingaben bleiben ausschliesslich lokal im Browser und werden
nach der Demo dem Teilnehmer zu Aufklaerungszwecken angezeigt.
Verwendung nur in Schulungen mit Einwilligung der Teilnehmenden.
============================================================================
-->
<style>
* { box-sizing: border-box; }
html, body { height: 100%; margin: 0; }
body {
font-family: "Segoe UI", "Segoe UI Web", Arial, sans-serif;
color: #1b1b1b;
background: #fff;
display: flex; align-items: center; justify-content: center;
min-height: 100%;
/* Microsoft-typischer heller Verlauf-Hintergrund */
background-image: linear-gradient(rgba(255,255,255,0.0), rgba(255,255,255,0.0));
}
/* Schulungs-Banner */
#demoBanner {
position: fixed; top: 0; left: 0; right: 0;
background: #ffb900; color: #1b1b1b;
font-size: 13px; font-weight: 600; text-align: center;
padding: 6px 12px; z-index: 1000;
border-bottom: 2px solid #d29200;
}
.card {
width: 440px; max-width: 96vw;
background: #fff;
box-shadow: 0 2px 6px rgba(0,0,0,0.2);
padding: 44px 44px 36px;
position: relative;
}
.logo { display: flex; align-items: center; margin-bottom: 16px; }
.logo svg { width: 24px; height: 24px; margin-right: 6px; }
.logo span { font-size: 15px; color: #5e5e5e; font-weight: 600; }
h1 { font-size: 24px; font-weight: 600; margin: 8px 0 4px; }
.sub { font-size: 15px; margin: 0 0 12px; }
.field { width: 100%; border: none; border-bottom: 1px solid #666;
font-size: 15px; padding: 6px 0; outline: none; margin: 6px 0 4px; }
.field:focus { border-bottom: 2px solid #0067b8; }
.row-actions { display: flex; justify-content: flex-end; margin-top: 24px; }
.links { font-size: 13px; margin: 16px 0 0; }
.links a { color: #0067b8; text-decoration: none; }
.links a:hover { text-decoration: underline; }
.btn {
background: #0067b8; color: #fff; border: none;
font-size: 15px; min-width: 108px; height: 32px; cursor: pointer;
}
.btn:hover { background: #005da6; }
.btn.secondary { background: #eaeaea; color: #1b1b1b; margin-right: 8px; }
.btn.secondary:hover { background: #dcdcdc; }
.back { font-size: 13px; color: #1b1b1b; margin-bottom: 12px; display: flex; align-items: center; }
.acct { font-size: 15px; margin: 4px 0 16px; color: #1b1b1b; }
.hint { font-size: 13px; color: #666; margin: 8px 0 0; }
.step { display: none; }
.step.active { display: block; }
.footer {
position: fixed; bottom: 0; right: 0;
font-size: 12px; color: #666; padding: 10px 18px;
}
.footer a { color: #666; text-decoration: none; margin-left: 18px; }
/* Aufklaerungs-Screen */
#reveal { width: 620px; max-width: 96vw; display: none; }
#reveal .card2 {
background: #fff; border: 2px solid #c0392b;
box-shadow: 0 4px 14px rgba(0,0,0,0.18); padding: 32px;
}
#reveal h2 { color: #c0392b; margin-top: 0; font-size: 26px; }
#reveal .captured {
background: #faf2f2; border-left: 4px solid #c0392b;
padding: 14px 16px; font-family: Consolas, "Courier New", monospace;
font-size: 14px; margin: 16px 0; word-break: break-all;
}
#reveal ul { font-size: 15px; line-height: 1.55; }
#reveal .restart { background:#0067b8; color:#fff; border:none; padding:8px 18px;
font-size:14px; cursor:pointer; margin-top:8px; }
</style>
</head>
<body>
<div id="demoBanner">⚠️ SCHULUNGS-DEMO Nachgebauter Login zu Awareness-Zwecken. Es werden KEINE Daten gespeichert oder gesendet. Keine echte Microsoft-Seite.</div>
<!-- ===================== LOGIN-NACHBAU ===================== -->
<div class="card" id="loginCard">
<div class="logo">
<svg viewBox="0 0 23 23" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
<rect x="1" y="1" width="10" height="10" fill="#f25022"/>
<rect x="12" y="1" width="10" height="10" fill="#7fba00"/>
<rect x="1" y="12" width="10" height="10" fill="#00a4ef"/>
<rect x="12" y="12" width="10" height="10" fill="#ffb900"/>
</svg>
<span>Microsoft</span>
</div>
<!-- Schritt 1: E-Mail -->
<div class="step active" id="step-email">
<h1>Anmelden</h1>
<input class="field" id="email" type="text" placeholder="E-Mail, Telefon oder Skype" autocomplete="off">
<p class="links">Kein Konto? <a href="#" onclick="return false;">Erstellen Sie jetzt eins!</a></p>
<p class="links"><a href="#" onclick="return false;">Sie können nicht auf Ihr Konto zugreifen?</a></p>
<div class="row-actions">
<button class="btn" id="toPw">Weiter</button>
</div>
</div>
<!-- Schritt 2: Passwort -->
<div class="step" id="step-pw">
<div class="back"> <span id="acctShow" style="margin-left:6px;"></span></div>
<h1>Kennwort eingeben</h1>
<input class="field" id="password" type="password" placeholder="Kennwort" autocomplete="off">
<p class="links"><a href="#" onclick="return false;">Kennwort vergessen</a></p>
<div class="row-actions">
<button class="btn" id="toMfa">Anmelden</button>
</div>
</div>
<!-- Schritt 3: Zweiter Faktor -->
<div class="step" id="step-mfa">
<div class="logo" style="margin-bottom:8px;">
<svg viewBox="0 0 23 23" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
<rect x="1" y="1" width="10" height="10" fill="#f25022"/>
<rect x="12" y="1" width="10" height="10" fill="#7fba00"/>
<rect x="1" y="12" width="10" height="10" fill="#00a4ef"/>
<rect x="12" y="12" width="10" height="10" fill="#ffb900"/>
</svg>
</div>
<p class="acct" id="acctShow2"></p>
<h1>Code eingeben</h1>
<p class="sub">Geben Sie den Code aus Ihrer Authenticator-App ein.</p>
<input class="field" id="otp" type="text" inputmode="numeric" placeholder="Code" autocomplete="off" maxlength="8">
<div class="row-actions">
<button class="btn" id="finish">Überprüfen</button>
</div>
</div>
</div>
<!-- ===================== AUFKLAERUNGS-SCREEN ===================== -->
<div id="reveal">
<div class="card2">
<h2>Stopp das war eine Phishing-Simulation</h2>
<p>Hätten Sie das auf einer echten Angreiferseite getan, besäße der Angreifer jetzt:</p>
<div class="captured" id="capturedBox"></div>
<p><strong>Worauf hätten Sie achten können?</strong></p>
<ul>
<li><strong>Die Adresszeile (URL):</strong> Der echte Login läuft nur über <em>login.microsoftonline.com</em> / <em>login.live.com</em> niemals über eine fremde Domain.</li>
<li><strong>Unerwartete Aufforderung:</strong> Eine Mail/SMS, die Sie zur Anmeldung drängt, ist verdächtig besonders bei Zeitdruck.</li>
<li><strong>Auch MFA schützt nicht immer:</strong> Moderne Angriffe leiten Ihren Code in Echtzeit weiter. Deshalb zählt, gar nicht erst Daten einzugeben.</li>
<li><strong>Phishing-resistente Verfahren:</strong> Passkeys / FIDO2-Sicherheitsschlüssel lassen sich nicht über gefälschte Seiten abgreifen.</li>
</ul>
<p>Im Zweifel: Seite schließen, URL selbst eintippen oder Lesezeichen nutzen, und die IT informieren.</p>
<button class="restart" id="restart">Demo zurücksetzen</button>
</div>
</div>
<div class="footer">
<a href="#" onclick="return false;">Nutzungsbedingungen</a>
<a href="#" onclick="return false;">Datenschutz &amp; Cookies</a>
</div>
<script>
/* ----------------------------------------------------------------------------
WICHTIG: Diese Demo sendet bewusst NICHTS. Es gibt keinen fetch/XHR/Submit
nach aussen. Eingaben bleiben in JS-Variablen und werden nur lokal zur
Aufklaerung angezeigt. So ist die Seite als Angriffswerkzeug unbrauchbar.
---------------------------------------------------------------------------- */
(function () {
var data = { email: "", password: "", otp: "" };
function show(stepId) {
document.querySelectorAll('.step').forEach(function (s) { s.classList.remove('active'); });
document.getElementById(stepId).classList.add('active');
}
document.getElementById('toPw').addEventListener('click', function () {
var v = document.getElementById('email').value.trim();
if (!v) { document.getElementById('email').focus(); return; }
data.email = v;
document.getElementById('acctShow').textContent = v;
document.getElementById('acctShow2').textContent = v;
show('step-pw');
document.getElementById('password').focus();
});
document.getElementById('toMfa').addEventListener('click', function () {
var v = document.getElementById('password').value;
if (!v) { document.getElementById('password').focus(); return; }
data.password = v;
show('step-mfa');
document.getElementById('otp').focus();
});
document.getElementById('finish').addEventListener('click', function () {
data.otp = document.getElementById('otp').value.trim();
// Keine Validierung, kein Versand direkt zum Aufklaerungs-Screen.
var masked = data.password.length ? data.password[0] + '•'.repeat(Math.max(0, data.password.length - 1)) : '(leer)';
document.getElementById('capturedBox').innerHTML =
'Benutzername: ' + escapeHtml(data.email) + '<br>' +
'Kennwort: ' + escapeHtml(data.password) + ' (vollständig erfasst)<br>' +
'MFA-Code: ' + escapeHtml(data.otp || '(leer)');
document.getElementById('loginCard').style.display = 'none';
document.querySelector('.footer').style.display = 'none';
document.getElementById('reveal').style.display = 'block';
});
document.getElementById('restart').addEventListener('click', function () {
data = { email: "", password: "", otp: "" };
document.getElementById('email').value = '';
document.getElementById('password').value = '';
document.getElementById('otp').value = '';
document.getElementById('reveal').style.display = 'none';
document.getElementById('loginCard').style.display = 'block';
document.querySelector('.footer').style.display = 'block';
show('step-email');
document.getElementById('email').focus();
});
// Enter-Taste je Schritt
document.getElementById('email').addEventListener('keydown', function (e) { if (e.key === 'Enter') document.getElementById('toPw').click(); });
document.getElementById('password').addEventListener('keydown', function (e) { if (e.key === 'Enter') document.getElementById('toMfa').click(); });
document.getElementById('otp').addEventListener('keydown', function (e) { if (e.key === 'Enter') document.getElementById('finish').click(); });
function escapeHtml(s) {
return String(s).replace(/[&<>"']/g, function (c) {
return { '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;' }[c];
});
}
})();
</script>
</body>
</html>