Marco van der Kolk - CTO
Marco van der Kolk - CTO 09-11-2021 3 min

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`

  1. 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.
  2. docker export
    Exporteer de zojuist aangemaakte container. Dit levert een tar archief op met daarin de inhoud van het filesystem van de container.
  3. 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.
  4. 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).
  5. 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.
  6. 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!

    Deel dit artikel:
Ontvang de laatste Proxy updates

Blijf op de hoogte van de laatste IT trends en ontwikkelingen met onze maandelijkse nieuwsbrief

Marco van der Kolk - CTO
Marco is mede-eigenaar en CTO van Proxy. Marco is binnen Proxy het technische vraagbaken. Altijd op de hoogte van de trends en de nieuwste technieken in de markt. Marco is dan ook dé sparringspartner voor veel van onze klanten en collega’s. Hij helpt iedereen graag en samen zorgen we ervoor dat de techniek hier ook zijn steentje aan kan bijdragen.