Einstieg
0
Beispiel
0
HTML 1
1
HTML
Kodierung
2
CSS 1
3
CSS
HTML 2
Bonus
HTML
Nachricht
4
Crypto
Formular
5
HTML
CSS 2
Bonus
CSS
Was bin ich?
6
Archiv
7
Spiel
8
JS
Requests
9
HTTP
Steganographie
10
fetching Fun
11
HTTP
Link
12
HTML
Requests 2
Bonus
HTTP
Verhext
13
Web Security
14
Link 2
Bonus
HTML
Repository
15
Reverse Engineering 1
Bonus
???
16
???
17
???
18
???
19
???
20
???
21
???
22
???
23
???
24
Einstieg
Willkommen beim Hacking-Adventskalender 2025.
Ab dem 01.12.2025 wirst du hier bis Weihnachten jeden Tag eine neue einzigartige Challenge finden.
Bei jeder Challenge gibt es etwas Neues über das Internet, den Aufbau von Webseiten, Computer und vieles mehr zu erfahren.
Bei allen der über 24 Aufgaben muss zudem ein Lösungswort gefunden werden. Dieses Lösungswort ist immer im Format 'flag{Lösung}' abzugeben.
Die Aufgaben sind an Schüler und für an Informatik Interessierte gerichtet und sollten ab der 8. Klasse bearbeitet werden können.
Für besonders Interessierte gibt es an manchen Tagen schwere optionale Bonusaufgaben.
Eine geeignete Google-Suche kann oft weiterhelfen :).
Auch KI kann oft weiterhelfen. Versuche jedoch die Schritte nachzuvollziehen, damit du bei den Aufgaben etwas lernen kannst oder lass dir von der KI nur Tipps geben.
Besondere Informatikkenntnisse sind nicht erforderlich.
Beispielaufgabe:
Hier ist die Flag für Dich. Das Lösungswort ist jedoch noch nicht sichtbar...
(Für diese Aufgabe erhältst du keine Punkte.)
Ab dem 01.12.2025 wirst du hier bis Weihnachten jeden Tag eine neue einzigartige Challenge finden.
Bei jeder Challenge gibt es etwas Neues über das Internet, den Aufbau von Webseiten, Computer und vieles mehr zu erfahren.
Bei allen der über 24 Aufgaben muss zudem ein Lösungswort gefunden werden. Dieses Lösungswort ist immer im Format 'flag{Lösung}' abzugeben.
Die Aufgaben sind an Schüler und für an Informatik Interessierte gerichtet und sollten ab der 8. Klasse bearbeitet werden können.
Für besonders Interessierte gibt es an manchen Tagen schwere optionale Bonusaufgaben.
Eine geeignete Google-Suche kann oft weiterhelfen :).
Auch KI kann oft weiterhelfen. Versuche jedoch die Schritte nachzuvollziehen, damit du bei den Aufgaben etwas lernen kannst oder lass dir von der KI nur Tipps geben.
Besondere Informatikkenntnisse sind nicht erforderlich.
Beispielaufgabe:
Hier ist die Flag für Dich. Das Lösungswort ist jedoch noch nicht sichtbar...
flag{Hintergrundfarbe}(Für diese Aufgabe erhältst du keine Punkte.)
Beispiel
Beispielaufgabe aus dem letzten Jahr:
In dieser Reihe von Nullen und Einsen ist die Flag gespeichert:
(Für diese Aufgabe erhältst du keine Punkte.)
In dieser Reihe von Nullen und Einsen ist die Flag gespeichert:
01100110011011000110000101100111011110110110111101101110011011000111100100110001001100000101010001111001011100000110010101110011010011110110011001010000011001010110111101110000011011000110010101111101
(Für diese Aufgabe erhältst du keine Punkte.)
HTML 1
HTML
HTML definiert den Inhalt und dessen Layout in jeder Webseite.
Schau dir doch mal den HTML-Quelltext dieser Seite an:
Falls du auf
Für Interessierte:
HTML lernen (en): https://www.htmlforpeople.com/
Schau dir doch mal den HTML-Quelltext dieser Seite an:
Rechtsklick -> "Untersuchen (Q)"oderRechtsklick -> "Seitenquelltext anzeigen"
Falls du auf
"Untersuchen (Q)" geklickt hast, kannst du hier sogar den HTML-Code der Seite mit einem Doppelklick bearbeiten.Für Interessierte:
HTML lernen (en): https://www.htmlforpeople.com/
Um eine Flag einzureichen, musst du eingeloggt sein.
Kodierung
Solch eine Zeichenkette, wie sie unten zu sehen ist, kommt im Internet häufiger vor - sei es zur Speicherung von Spielständen in Online-Games oder zur Enkodierung von bereits verschlüsselten Daten. Dennoch handelt es sich dabei nicht direkt um Verschlüsselung. Kannst du den Text dekodieren und die Flag offenbaren?
ZmxhZ3tiYXNlNjQtaXMtbjB0LWVuY3J5cHQxMG59Cg==
Um eine Flag einzureichen, musst du eingeloggt sein.
CSS 1
CSS
Oh nein! Die einzelnen Pixel des Pixel-Arts sind falsch angeordnet.
Ändere den style des div-Containers, in welchem sich die Pixel befinden, mithilfe des
Nachdem du das div auf der linken Seite im Inspektor angeklickt hast, kannst du nun auf der rechten Seite den style des Elements bearbeiten.
Du kannst hier die einzelnen CSS-Attribute ändern oder neue hinzufügen. Diese definieren die visuelle Darstellung von Elementen auf der Website.
Zur richtigen Anzeige des Pixel-Arts muss der Container eine Flexbox sein.
Danach muss noch der Umbruch der Flexbox-Elemente aktiviert werden.
Für Interessierte:
Mehr über Flexboxen lernen (en): https://flexboxfroggy.com/
Ändere den style des div-Containers, in welchem sich die Pixel befinden, mithilfe des
"Inspector"-Tabs der Dev-Tools:Nachdem du das div auf der linken Seite im Inspektor angeklickt hast, kannst du nun auf der rechten Seite den style des Elements bearbeiten.
Du kannst hier die einzelnen CSS-Attribute ändern oder neue hinzufügen. Diese definieren die visuelle Darstellung von Elementen auf der Website.
Zur richtigen Anzeige des Pixel-Arts muss der Container eine Flexbox sein.
Danach muss noch der Umbruch der Flexbox-Elemente aktiviert werden.
Für Interessierte:
Mehr über Flexboxen lernen (en): https://flexboxfroggy.com/
Um eine Flag einzureichen, musst du eingeloggt sein.
HTML 2
HTML
Dies ist eine schwierige optionale Bonus-Challenge.
Für Bonus-Challenges erhältst du keine Punkte.
Die Flag
Für Bonus-Challenges erhältst du keine Punkte.
Die Flag
(
war im HTML-Code für diese Challenge versteckt.
flag{25dc052e}) Um eine Flag einzureichen, musst du eingeloggt sein.
Nachricht
Crypto
Unser römischer Freund hat für euch eine Nachricht hinterlassen:
Yvror Nqiragf-Unpxre,
vue unog qra Fpuyüffry "13" trshaqra. Fhcre!
Uvre vfg qvr Synt süe rhpu:
synt{sehrurIrefpuyhrffryhat}.
Yvror Teüßr,
Pnrfne
Mit dieser Scheibe sollte die Nachricht zu entschlüsseln sein.
vue unog qra Fpuyüffry "13" trshaqra. Fhcre!
Uvre vfg qvr Synt süe rhpu:
synt{sehrurIrefpuyhrffryhat}.
Yvror Teüßr,
Pnrfne
Um eine Flag einzureichen, musst du eingeloggt sein.
Formular
HTML
Um die Flag zu bekommen, müssen beide Checkboxen angekreuzt sein.
Vielleicht kann dir die Challenge von Tag 1 (HTML 1) weiterhelfen.
Hinweis (zum Anzeigen anklicken): Wieso ist die zweite Box nicht anklickbar? (Was unterscheidet sie im HTML von der ersten?)
Vielleicht kann dir die Challenge von Tag 1 (HTML 1) weiterhelfen.
Hinweis (zum Anzeigen anklicken): Wieso ist die zweite Box nicht anklickbar? (Was unterscheidet sie im HTML von der ersten?)
Um eine Flag einzureichen, musst du eingeloggt sein.
CSS 2
CSS
Dies ist eine schwierige optionale Bonus-Challenge.
Für Bonus-Challenges erhältst du keine Punkte.
Die Flag wird ein Buchstabe pro Zeile von oben nach unten gelesen:
Für Bonus-Challenges erhältst du keine Punkte.
Die Flag wird ein Buchstabe pro Zeile von oben nach unten gelesen:
Um eine Flag einzureichen, musst du eingeloggt sein.
Was bin ich?
Mit der angehängten Datei scheint etwas nicht zu stimmen. Schaffst du es, die Datei und deren Inhalt zu retten?
Um eine Flag einzureichen, musst du eingeloggt sein.
Archiv
Uns sind leider die Challenges ausgegangen.
Die Challenge für den heutigen Tag ist deshalb dieselbe wie vorletztes Jahr.
Viel Spaß! ;)
Die Challenge für den heutigen Tag ist deshalb dieselbe wie vorletztes Jahr.
Viel Spaß! ;)
Um eine Flag einzureichen, musst du eingeloggt sein.
Spiel
JS
Evil-Santa steht in Konkurrenz zum Weihnachtsmann und versucht, ebenfalls Geschenke herzustellen.
Wenn du ihm beim Herstellen von 1.000.000 Geschenken hilfst kannst du die Flag von ihm bekommen.
Für diese Challenge könnte der Debugger in den Dev-Tools nützlich sein (
Hinweis (zum Anzeigen anklicken): Nicht nur das HTML sondern auch JavaScript-Inhalte einer Seite kann man nach dem Laden der Seite bearbeiten. Nutze dafür die Konsole des
Für Interessierte:
JS Hacking-Spiel (en): https://alexnisnevich.github.io/untrusted/
Wenn du ihm beim Herstellen von 1.000.000 Geschenken hilfst kannst du die Flag von ihm bekommen.
Für diese Challenge könnte der Debugger in den Dev-Tools nützlich sein (
F12 -> "Debugger"-Tab).Hinweis (zum Anzeigen anklicken): Nicht nur das HTML sondern auch JavaScript-Inhalte einer Seite kann man nach dem Laden der Seite bearbeiten. Nutze dafür die Konsole des
"Console"-Tabs in den Dev-Tools.
Für Interessierte:
JS Hacking-Spiel (en): https://alexnisnevich.github.io/untrusted/
Um eine Flag einzureichen, musst du eingeloggt sein.
Requests
HTTP
Die Flag wurde dir bereits geschickt. Doch sie wird im Moment nirgends angezeigt.
Um die Flag zu finden öffne zunächst die Dev-Tools (Developer-Tools) des Browsers mit (bei Firefox und Chromium):
Drücke
Wenn du einen Request (eine Spalte) anklickst, öffnet sich auf der rechten Seite eine Übersicht, bei der Anfrage wie auch Antwort des Requests eingesehen werden können.
Eventuell versteckt sich die Flag in irgendeinem Request...
Um die Flag zu finden öffne zunächst die Dev-Tools (Developer-Tools) des Browsers mit (bei Firefox und Chromium):
Rechtsklick -> "Untersuchen (Q)"oderF12
"Network" und klicke ihn an.
Dort kannst du den Datenverkehr zwischen Client (Browser) und Server sehen.Drücke
Strg. + Shift + R um die Seite komplett neu zu laden und öffne diese Challenge neu.Wenn du einen Request (eine Spalte) anklickst, öffnet sich auf der rechten Seite eine Übersicht, bei der Anfrage wie auch Antwort des Requests eingesehen werden können.
Eventuell versteckt sich die Flag in irgendeinem Request...
Um eine Flag einzureichen, musst du eingeloggt sein.
Steganographie
Ein Geheimagent hat uns das angehängte Bild zukommen lassen. Inmitten der unscheinbaren Winterlandschaft soll angeblich eine geheime Botschaft enthalten sein. Schaffst du es, diese wiederherzustellen?
Hinweis (zum Anzeigen anklicken): Die geheime Botschaft ist nicht in Metadaten o.ä. versteckt.
Hinweis (zum Anzeigen anklicken): Die geheime Botschaft ist nicht in Metadaten o.ä. versteckt.
Um eine Flag einzureichen, musst du eingeloggt sein.
fetching Fun
HTTP
Lass uns das UI (= User Interface / Benutzeroberfläche) etwas aufhübschen!
Die Logik für einen Spaß-Modus ist eigentlich schon implementiert, doch es gibt noch keine Einstellung im Einstellungsmenü rechts oben um diesen zu aktivieren.
Den Netzwerk-Tab in den Dev-Tools hast du ja bereits kennengelernt.
Kopiere den Request zum Speichern der Einstellungen indem du im Netzwerk-Tab der Dev-Tools auf dem richtigen Request
Für mehr Übersichtlichkeit kannst du nun den
Ändere nun den Fetch-Request so ab, dass der Spaß-Modus aktiviert wird.
Über den Parameter
(Der Spaß-Modus beeinflusst, wenn er aktiviert ist, nur die Hauptseite (index.php).) Sobald du den Spaß-Modus aktiviert hast, wirst du die Flag nicht übersehen können.
Für Interessierte:
Versuche nun den
Zu einfach?
Versuche, mithilfe einer Browser-Erweiterung zum Erstellen von Userscripten, wie z.B. Tampermonkey, eine dauerhafte Möglichkeit, den Spaß-Modus ein- und auszuschalten, zu erstellen.
Alternativ kannst du auch ein Script schreiben, welches auf der Einstellungs-Seite per Hand über die Konsole eingefügt werden muss.
Die Logik für einen Spaß-Modus ist eigentlich schon implementiert, doch es gibt noch keine Einstellung im Einstellungsmenü rechts oben um diesen zu aktivieren.
Den Netzwerk-Tab in den Dev-Tools hast du ja bereits kennengelernt.
Kopiere den Request zum Speichern der Einstellungen indem du im Netzwerk-Tab der Dev-Tools auf dem richtigen Request
Rechtsklick -> "Use as Fetch in Console" ausführst.Für mehr Übersichtlichkeit kannst du nun den
"Console"-Tab in den Dev-Tools verwenden.Ändere nun den Fetch-Request so ab, dass der Spaß-Modus aktiviert wird.
Über den Parameter
fun_enabled wird bestimmt, ob der Spaß-Modus angewendet wird.(Der Spaß-Modus beeinflusst, wenn er aktiviert ist, nur die Hauptseite (index.php).) Sobald du den Spaß-Modus aktiviert hast, wirst du die Flag nicht übersehen können.
Für Interessierte:
Versuche nun den
<form>-Block im HTML so zu ergänzen, dass der Spaß-Modus als Einstellung aktiviert werden kann.Zu einfach?
Versuche, mithilfe einer Browser-Erweiterung zum Erstellen von Userscripten, wie z.B. Tampermonkey, eine dauerhafte Möglichkeit, den Spaß-Modus ein- und auszuschalten, zu erstellen.
Alternativ kannst du auch ein Script schreiben, welches auf der Einstellungs-Seite per Hand über die Konsole eingefügt werden muss.
Um eine Flag einzureichen, musst du eingeloggt sein.
Link
HTML
Die Flag findest du unter diesem Link. Irgendetwas scheint damit aber nicht zu stimmen.
Um eine Flag einzureichen, musst du eingeloggt sein.
Requests 2
HTTP
Dies ist eine schwierige optionale Bonus-Challenge.
Für Bonus-Challenges erhältst du keine Punkte.
Um die Flag zu bekommen muss man vorher eine lange Rechenaufgabe lösen, die man vom Server abfragen kann. Das Ergebnis muss innerhalb von 10 Sekunden an den Server zurückgeschickt werden.
Die Aufgabe ist es einen String mit dem SHA-256 Algorithmus zu hashen.
Folgendes ist dabei zu beachten:
Die Rückgabe an den Server besteht aus:
Alle Anfragen müssen als Form-POST-Requests an
Um eine Aufgabe zu bekommen muss ein Request mit dem Parameter
Hinweis (zum Anzeigen anklicken): Die JavaScript-Funktion
Für Bonus-Challenges erhältst du keine Punkte.
Um die Flag zu bekommen muss man vorher eine lange Rechenaufgabe lösen, die man vom Server abfragen kann. Das Ergebnis muss innerhalb von 10 Sekunden an den Server zurückgeschickt werden.
Die Aufgabe ist es einen String mit dem SHA-256 Algorithmus zu hashen.
Folgendes ist dabei zu beachten:
- Der Hash muss mit "1337" beginnen.
- Falls nicht muss eine Nonce-Zahl geändert werden und ein neuer Hash erstellt werden.
- Die Nonce kann frei gewählt werden.
"Alice,Bob,42 HACK,2025-12-01 12:00:00 UTC,13374242446F6368206B65696E65204861636B65722D436F696E7320443A4242,123"
wobei die Nonce hier 123 ist. Der String wird dir (ohne Nonce) vom Server geschickt.Die Rückgabe an den Server besteht aus:
"previous_hash":dem vorherigen Hash,"nonce":der Nonce,"valid_hash":dem neuen Hash, welcher mit dieser Nonce erstellt wurde
"previous_hash", "nonce" und "valid_hash") als POST-Request zurückgeschickt werden.Alle Anfragen müssen als Form-POST-Requests an
challenge_sites/challenge_requests_2.php geschickt werden.Um eine Aufgabe zu bekommen muss ein Request mit dem Parameter
getNewString=true geschickt werden.Hinweis (zum Anzeigen anklicken): Die JavaScript-Funktion
fetch ist asynchron. Um eine Flag einzureichen, musst du eingeloggt sein.
Verhext
Oh nein! Unserem Entwickler ist beim Erstellen der heutigen Challenge die Datei mit der Flag verloren gegangen. Kannst du anhand der Terminalausgabe die Datei wiederherstellen?
... bash-5.3$ cd challenge_13/ bash-5.3$ ls flag.txt.gz bash-5.3$ xxd flag.txt.gz 00000000: 1f8b 0808 3598 3469 0003 666c 6167 2e74 ....5.4i..flag.t 00000010: 7874 004b cb49 4caf 76ce cf4b 2f4a 2c29 xt.K.IL.v..K/J,) 00000020: 5654 88cc 2f55 284a 2d2e c92f 4a4d 5128 VT../U(J-../JMQ( 00000030: c948 55c8 c92f 2e51 48ce cf2b 49cd 2b29 .HU../.QH..+I.+) 00000040: d6ab e502 0084 3e3a 5430 0000 00 ......>:T0... bash-5.3$ vim ~/advents-hacking-secret-challenges.txt bash-5.3$ cd~/Trash bash: cd~/Trash: No such file or directory bash-5.3$ rm -rf * bash-5.3$ ls bash-5.3$
Um eine Flag einzureichen, musst du eingeloggt sein.
Web Security
Anbei kannst du einen Ausschnitt aus dem Code einer Webanwendung finden. Nur hat sich hier leider eine Sicherheitslücke eingeschlichen. Kannst du herausfinden, um welche Vulnerability es sich handelt?
Die Flag ist im üblichen Format anzugeben, wobei in den geschweiften Klammern die geläufige Abkürzung für diese Art von Vulnerabilities stehen soll.
Die Flag ist im üblichen Format anzugeben, wobei in den geschweiften Klammern die geläufige Abkürzung für diese Art von Vulnerabilities stehen soll.
...
$profiles = get_profiles();
?>
<div id="profiles">
<?php foreach ($profiles as $profile) { ?>
<div class="profile-card">
<div class="profile-name"><?php echo $profile->name; ?></div>
<div class="profile-description">
<?php echo $profile->description; ?>
</div>
</div>
<?php } ?>
</div>
... Um eine Flag einzureichen, musst du eingeloggt sein.
Link 2
HTML
Dies ist eine schwierige optionale Bonus-Challenge.
Für Bonus-Challenges erhältst du keine Punkte.
Die Flag ist nur einen Klick entfernt. Vielleicht.
Für Bonus-Challenges erhältst du keine Punkte.
Die Flag ist nur einen Klick entfernt. Vielleicht.
Um eine Flag einzureichen, musst du eingeloggt sein.
Repository
Nicht schon wieder! Unserem Entwickler ist erneut beim Erstellen der heutigen Challenge die Datei mit der Flag verloren gegangen. Zum Glück war sie allerdings in ein Repository committet. Schaffst du es, anhand des angehängten Repos die Datei mit der Flag wiederherstellen?
Um eine Flag einzureichen, musst du eingeloggt sein.
Reverse Engineering 1
Dies ist eine schwierige optionale Bonus-Challenge.
Für Bonus-Challenges erhältst du keine Punkte.
Beim sogenannten Reverse Engineering ist es das Ziel, von einem bereits kompilierten Programm auf den Quellcode zurückzuschließen, um somit die Logik des Programms aufzudecken. Die angehängte Linux-Binary fragt nach einem Passwort. Kannst du dieses herausfinden?
Für Bonus-Challenges erhältst du keine Punkte.
Beim sogenannten Reverse Engineering ist es das Ziel, von einem bereits kompilierten Programm auf den Quellcode zurückzuschließen, um somit die Logik des Programms aufzudecken. Die angehängte Linux-Binary fragt nach einem Passwort. Kannst du dieses herausfinden?
Um eine Flag einzureichen, musst du eingeloggt sein.