De oplossing uitgelegd

Na de bekendmaking van de winnaar van de SysAdminDay puzzel 2021 hebben we veel vragen gekregen hoe Stefan Zwanenburg tot de kortste oplossing is gekomen. Dit legt hij dan ook graag aan jullie uit!
"Misschien is het leuk om te beginnen met de oplossing zoals ik hem heb ingezonden, en hoe het eruit ziet na wat expansions die bash heeft toegepast.
Inzending:
docker export `docker create proxynl/sysadminday2021`|tar x;./ctf -k `xxd -p -c99<<<'RTD=3043NB128 EHV=5692DA4006 ASD=1391JD21'` -d `cat */*/*/*{,/*}/C* */p*`
Na (gedeeltelijke) expansie:
docker export `docker create proxynl/sysadminday2021`|tar x;./ctf -k 5254443d333034334e42313238204548563d35363932444134303036204153443d313339314a4432310a -d `cat proxy.nl/sysadminday2021-summerchallenge/content/html/CTF.xx.00 proxy.nl/sysadminday2021-summerchallenge/content/html/CTF.xx.01 proxy.nl/sysadminday2021-summerchallenge/content/html/assets/CTF.xx.02 proxy.nl/sysadminday2021-summerchallenge/content/html/assets/CTF.xx.03 proxy.nl/sysadminday2021-summerchallenge/content/html/assets/CTF.xx.04 dev/pts etc/proxy.conf`
- docker create proxynl/sysadminday2021
Hiermee wordt een container gemaakt gebaseerd op het image van de puzzel. Ik hoor je denken: "Waarom docker create, en niet docker run?" Omdat ik van de aangemaakte container de naam wil hebben om de volgende stap te kunnen uitvoeren. En om aan die naam te komen moet je de container detachen, wat betekent dat je docker run -d moet uitvoeren, wat precies even lang is als docker create. - docker export
Exporteer de zojuist aangemaakte container. Dit levert een tar archief op met daarin de inhoud van het filesystem van de container. - tar x
Extraheer de inhoud van het tar archief wat via standard input binnenkomt. Omdat het kort moest zijn houd ik geen rekening met de rommel die het achterlaat. Dus tip voor als je het op je eigen machine draait: maak een tijdelijke map aan waarbinnen je deze commando's uitvoert. Dat ruimt makkelijker op. - xxd -p -c99<<<'...'
Het "wachtwoord" moest worden omgezet naar hexadecimale notatie. Omdat de hexadecimale representatie twee keer zo lang is als de input, loont het om te kijken of het korter is om een tooltje te gebruiken om de conversie voor ons te doen. In dit geval is dit zo, en ik maak gebruik van xxd. Ik maak gebruik van een zogenaamde here-string (https://www.gnu.org/software/bash/manual/html_node/Redirections.html#Here-Strings) om aan de standard input van xxd het "wachtwoord" op te geven. -p zorgt voor zogenaamde postscript of plain formaat output, en -c99 is om te zeggen dat de geconverteerde output 99 karakters per regel moet hebben (en dus voorkom ik hiermee een newline karakter in de output, want het resultaat is korter dan 99 karakters). - cat */*/*/*{,/*}/C* */p*
Allereerst een shoutout aan mijn collega Jacco Logtenberg, want hij had bedacht dat het hier handig zou zijn om pattern matching toe te passen.
De oplossing is versleuteld, en deze versleutelde tekst is opgeknipt in verschillende bestanden en verdeeld over het filesystem. Deze bestanden moeten we zien te concateneren. Hoe doen we dat? Juist: cat (als in concatenate) gecombineerd met Bash pattern matching (de asteriskjes: https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html#Pattern-Matching)! Ik heb het hier gecombineerd met brace expansion (https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html#Brace-Expansion) om het nog wat korter te maken. Met brace expansion wordt */*/*/*{,/*}/C* dan eerst */*/*/*/C* */*/*/*/*/C*, waarna bash op zoek gaat naar bestanden die matchen met deze patterns. De C's zijn hier om alleen de CTF.xx.?? bestandjes te matchen, en niet andere bestanden. Ik heb hier dus mazzel dat dit toevallig de enige bestanden zijn die matchen. */p* matcht dan etc/proxy.conf, het laatste onderdeel van de versleutelde oplossing. - ctf -k ... -d ...
Dit is de aanroep van het tooltje waarmee de ciphertext kan worden ontsleuteld om de oplossing tevoorschijn te toveren.
Hopelijk is dit een beetje duidelijk en hebben jullie een duidelijk beeld gekregen hoe ik tot de oplossing ben gekomen. Eventuele vragen hierover beantwoord ik graag!"
Heb jij nog een vraag aan Stefan hoe hij tot deze oplossing is gekomen? Neem dan contact met ons op!
Blijf op de hoogte van de laatste IT trends en ontwikkelingen met onze maandelijkse nieuwsbrief
