Advents-Hacking

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...
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:
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:
  • Rechtsklick -> "Untersuchen (Q)" oder
  • Rechtsklick -> "Seitenquelltext anzeigen"
Dort ist die Flag zu finden.
flag{The_Inspector_Gadget}


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/

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==

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 "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/

HTML 2

HTML
Dies ist eine schwierige optionale Bonus-Challenge.
Für Bonus-Challenges erhältst du keine Punkte.

Die Flag
(flag{25dc052e})
war im HTML-Code für diese Challenge versteckt.

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.

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?)

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:

Was bin ich?

Mit der angehängten Datei scheint etwas nicht zu stimmen. Schaffst du es, die Datei und deren Inhalt zu retten?

Archiv

Uns sind leider die Challenges ausgegangen.
Die Challenge für den heutigen Tag ist deshalb dieselbe wie vorletztes Jahr.
Viel Spaß! ;)

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 (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/

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):
  • Rechtsklick -> "Untersuchen (Q)" oder
  • F12
Navigiere nun zum Reiter "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...

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.

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 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.

Link

HTML
Die Flag findest du unter diesem Link. Irgendetwas scheint damit aber nicht zu stimmen.

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:
  • 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.
Die Eingabe für den Hash-Algorithmus könnte so aussehen:
"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
Diese Werte müssen (als Werte der Parameter "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.

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$

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.
...
$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>
...

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.

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?

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?