Heb het gekraakt! Hoogtepunten van KringleCon 5: Gouden Ringen

Heb het gekraakt! Hoogtepunten van KringleCon 5: Gouden Ringen

Leren ontmoet plezier tijdens de SANS Holiday Hack Challenge 2022 – zet je schrap voor een crackerjack-rit op de Noordpool terwijl ik het gemene plan van Grinchum verijdel en de vijf gouden ringen terugkrijg

Dit is mijn eerste jaar dat ik deelneem aan de SANS Holiday Hack-uitdaging en het was geweldig. Door middel van een reeks van 16 uitdagingen, variërend van eenvoudig tot moeilijk, oefende ik het analyseren van verdacht netwerkverkeer en PowerShell-logboeken, het schrijven Suricata-regels, uitbreken van een Docker container, het vinden van gelekte sleutels om een GitLab CI/CD-pijplijn en een AWS-gebruiker, dirigeren XML External Entity-aanvallen, en een slim contract hacken om een niet-fungibel token.

Het beste deel van deze ervaring was dat het me kennis liet maken met nieuwe tools en technologieën, waardoor mijn kennis op het gebied van cyberbeveiliging veel verder werd uitgebreid. Hier deel ik een paar hoogtepunten van het oplossen van de uitdagingen.

Beeldoriëntatie

Elke deelnemer ontvangt een avatar om door een in-browser videogameomgeving op de Noordpool te navigeren:

Het is gekraakt! Hoogtepunten uit KringleCon 5: Gouden Ringen PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Tijdens de oriëntatie ontvang je een cryptocurrency-portemonnee die de game gebruikt om KringleCoins te belonen voor het voltooien van uitdagingen en die je in de laatste uitdaging gebruikt om een ​​slim contract te hacken. Interessant is dat de game alle KringleCoin-transacties bijhoudt in een Ethereum-blockchain, wat betekent dat een volledig overzicht van je voortgang ook in deze blockchain wordt opgeslagen.

Op naar de eerste ring van het spel.

1. Tolkien-ring

Het is gekraakt! Hoogtepunten uit KringleCon 5: Gouden Ringen PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Het vinden van de Tolkien Ring vereiste het buigen van mijn analysespieren.

Wireshark-phishing

Eerst heb ik Wireshark gebruikt om de verstrekte gegevens te analyseren .pkap bestand dat een server onthulde op adv.epostoday[.]uk het downloaden van het bestand Ref_24 september 2020.zip naar een computer:

Het is gekraakt! Hoogtepunten uit KringleCon 5: Gouden Ringen PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Toen ik in het ZIP-bestand gluurde, vond ik een uitvoerbaar bestand met de naam Ref_24 september 2020.scr die twee detecties activeerde in ESET Endpoint Security: BAT/Runner.ES en Generiek.TAGTBG. Deze malware leidde uiteindelijk tot een kwaadaardig uitvoerbaar bestand genaamd config.dll en gedetecteerd door ESET's Geavanceerde geheugenscanner as Win32/Dridex.DD.

Windows-gebeurtenislogboeken

Vervolgens analyseerde ik het verstrekte .evtx bestand met PowerShell-logboeken met Event Viewer. Hoewel er andere tools zijn om PowerShell-logboeken te analyseren, moeten aanvallers, als ze weten hoe ze levende binaire bestanden moeten gebruiken om onder de radar te blijven, ook goed thuis zijn in de native tools die een besturingssysteem biedt.

Aangezien de logboeken 10,434 gebeurtenissen bevatten, heb ik de gebeurtenissen op datum gegroepeerd en vervolgens de actie Zoeken uitgevoerd om te zoeken naar gebeurtenissen die de $ karakter. In PowerShell, $ wordt gebruikt om te creëren en te verwijzen variabelen. Ik ontdekte een aanval op 24 december 2022, toen de aanvaller het volgende script uitvoerde:

Het is gekraakt! Hoogtepunten uit KringleCon 5: Gouden Ringen PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Het lijkt erop dat de aanvaller een geheim recept heeft gevonden en het geheime ingrediënt heeft uitgeschakeld honing For visolie, en creëerde vervolgens een nieuw receptbestand. Dit veroorzaakte een gebeurtenis met een ID van 4104, wat staat voor de uitvoering van externe PowerShell-opdrachten. Dus heb ik de gebeurtenissen gefilterd op basis van deze ID, waardoor ik sneller andere kwaadaardige gebeurtenissen kan vinden.

Suricata-regatta

De laatste oefening voor de Tolkien Ring was het schrijven van vier Suricata-regels om netwerkverkeer te controleren op een Dridex-besmetting:

alert dns $HOME_NET any -> any any (msg:”Bekende slechte DNS-lookup, mogelijke Dridex-infectie”; dns.query; content:”adv.epostoday.uk”; nocase; sid:1; rev:1;)

alert http 192.185.57.242 any <> any any (msg:”Onderzoek verdachte verbindingen, mogelijke Dridex-infectie”; sid:2; rev:1;)

alert tls any any -> any any (msg:”Onderzoek slechte certificaten, mogelijke Dridex-infectie”; tls.cert_subject; content:”CN=heardbellith.Icanwepeh.nagoya”; sid:3; rev:1;)

alert http any any -> any any (msg:”Verdachte JavaScript-functie, mogelijke Dridex-infectie”; file_data; content:”let byteCharacters = atob”; sid:4; rev:1;)

In volgorde vangen deze regels DNS-zoekopdrachten op adv.epostoday[.]uk, verbindingen met het IP-adres 192.185.57[.]242, het gebruik van de kwaadaardige server hearbellith.Icanwepeh[.]nagoya geïdentificeerd via de algemene naam (CN) in een TLS-certificaat en het gebruik van JavaScript A tot B() functie voor het decoderen van een binaire tekenreeks met base64-gecodeerde gegevens op de client.

Het voltooien van deze drie uitdagingen leverde me de Tolkien Ring op:

Het is gekraakt! Hoogtepunten uit KringleCon 5: Gouden Ringen PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Op naar de tweede bel.

2. Elfenring

Het is gekraakt! Hoogtepunten uit KringleCon 5: Gouden Ringen PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

De meest prominente uitdagingen voor de Elfen Ring waren Prison Escape en Jolly CI/CD.

Gevangenis Escape

Prison Escape herinnerde er streng aan dat het verlenen van rootrechten aan een gebruiker in een Docker-container net zo goed is als het verlenen van rootrechten op het hostsysteem. De uitdaging was om uit de container te ontsnappen. Nou, gemakkelijk gedaan als je root bent:

Het is gekraakt! Hoogtepunten uit KringleCon 5: Gouden Ringen PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Als rootgebruiker heb ik de partitietabellen voor het apparaat weergegeven en vervolgens het hostbestandssysteem aangekoppeld, waardoor ik volledige toegang tot de host kreeg. Nu kon ik zoeken naar de sleutel, die zich in de thuismap zou moeten bevinden, zoals blijkt uit de in-game hints:

Het is gekraakt! Hoogtepunten uit KringleCon 5: Gouden Ringen PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Jolly CI/CD

Hoewel dat snel was, kostte Jolly CI / CD me de langste uitdaging om erachter te komen. Eerst kregen we een Git-repository om via HTTP te klonen:

Het is gekraakt! Hoogtepunten uit KringleCon 5: Gouden Ringen PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Aan de URL kon ik zien dat de naam van de repository was wordpress.flag.net.intern, dus ging ik naar de repository en vond een WordPress-website. Ik heb gecontroleerd of de website live was:

Het is gekraakt! Hoogtepunten uit KringleCon 5: Gouden Ringen PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Ja, de website was functioneel. Ik was benieuwd of er gelekte sleutels in de broncodegeschiedenis waren. Zo ja, dan zou ik bewerkingen naar de broncode moeten kunnen pushen. Dus ik rende git log:

Het is gekraakt! Hoogtepunten uit KringleCon 5: Gouden Ringen PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Van de commit-berichten lijkt het op een plegen is gemaakt na het toevoegen van activa om een ​​oeps op te lossen. Tijd om de pre-whoops commit te bekijken:

Het is gekraakt! Hoogtepunten uit KringleCon 5: Gouden Ringen PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Uitstekend, ik vond een .ssh map met sleutels. Laten we die sleutels kopiëren en een SSH-agent en een Git-gebruiker configureren om te zien of ik de eigenaar van die sleutels kan nadoen:

Het is gekraakt! Hoogtepunten uit KringleCon 5: Gouden Ringen PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Laten we nu teruggaan naar de hoofdtak en testen of we een triviale wijziging in de broncode kunnen doorvoeren (met behulp van nano voegde ik gewoon een spatie toe aan een van de bestanden):

Het is gekraakt! Hoogtepunten uit KringleCon 5: Gouden Ringen PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Dus ik heb het eerste deel van de uitdaging bereikt door me voor te doen als een van de WordPress-ontwikkelaars, maar werkte de website nog na mijn push?

Het is gekraakt! Hoogtepunten uit KringleCon 5: Gouden Ringen PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Mijn push veranderde iets omdat de website nu omleidde naar poort 8080.

Tot nu toe had ik het CI/CD-gedeelte van de uitdaging genegeerd, wat de sleutel zou moeten zijn om het te voltooien. De repository bevat een .gitlab-ci.yml -bestand, dat de configuratie biedt voor een GitLab CI/CD-pijplijn. Elke keer dat u naar de repository pusht, treedt het CI/CD-systeem in werking en a GitLab Runner voert de scripts in dit YML-bestand uit. Dat is net zo goed als het uitvoeren van externe code op de server waarop GitLab Runner is geïnstalleerd, dacht ik.

Toen ik beter keek, zag ik een rsync script dat alle bestanden van de Git-repository kopieert naar de map op de webserver van waaruit de website werd bediend. In eerste instantie probeerde ik te gebruiken rsync om de gegevensstroom om te keren door alle bestanden van de webserver naar de Git-repository te kopiëren, maar zonder succes.

Na veel hypothesetesten had ik uiteindelijk mijn baanbrekende inzicht: in plaats van te proberen de WordPress-website te "repareren" of kwaadaardige scripts uit te voeren via het buildsysteem, bedient u een website die informatie lekt van de webserver. Binnen index.php (bevindt zich op het hoogste niveau van de repository), kan ik commentaar geven op de code die de WordPress-website laadt en PHP-opdrachten uitvoeren die de webserver onderzoeken.

Sterker nog, ik kan zelfs shell-commando's uitvoeren met PHP. Ik heb dat gevonden doorgang() werkte gemakkelijk.

In index.php, Ik gebruikte // om twee regels te becommentariëren en ik heb toegevoegd passthru('ls -la /'); op de laatste regel. Hierdoor wordt een website gemaakt met alle bestanden in de hoofdmap van de webserver:

Het is gekraakt! Hoogtepunten uit KringleCon 5: Gouden Ringen PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Vervolgens pushte ik deze wijziging naar de Git-repository en het GitLab CI/CD-systeem zorgde voor het bijwerken van de website voor mij:

Het is gekraakt! Hoogtepunten uit KringleCon 5: Gouden Ringen PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Ah, de Elfen Ring moet binnen zijn vlag.txt! Ik herhaalde de vorige stappen, maar deze keer met behulp van passthru('kat /vlag.txt'); het onthullen van de Elfen Ring de volgende keer dat ik de website opvroeg:

Het is gekraakt! Hoogtepunten uit KringleCon 5: Gouden Ringen PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Op naar de derde bel.

3. Webring

Het is gekraakt! Hoogtepunten uit KringleCon 5: Gouden Ringen PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

De leukste uitdaging voor mij was Open Boria Mine Door, hoewel Glamtariel's Fountain interessant was en ook raadsels opleverde.

Open de Boria-mijndeur

In Open Boria Mine Door kregen we zes pinnen of mini-uitdagingen om invoervalidatie te omzeilen of een Inhoudsbeveiligingsbeleid om de in- en uitlaatpijpen tussen de pinnen te verbinden, inclusief het matchen van de pijpkleuren. Voor de meeste pinnen heb ik HTML gebruikt om een ​​lijst met verbindende letter 'o's te schrijven. Hier is mijn uiteindelijke oplossing:

Het is gekraakt! Hoogtepunten uit KringleCon 5: Gouden Ringen PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Speld 1

Er was geen validatie voor Pin 1, dus het was een simpele kwestie van HTML en inline CSS:

Speld 2

Pin 2 had een inhoudsbeveiligingsbeleid dat JavaScript niet toestond maar inline CSS toestond, dus dat was geen probleem voor mijn methode:

Speld 3

Pin 3 had een inhoudsbeveiligingsbeleid dat CSS niet toestond maar inline JavaScript toestond, dus gebruikte ik JavaScript om de stijlen te wijzigen:

Speld 4

Pin 4 had geen inhoudsbeveiligingsbeleid, maar het had een sanitizeInput-functie aan de clientzijde die dubbele aanhalingstekens, enkele aanhalingstekens, linkerpunthaken en rechte hoekhaakjes zou verwijderen. De truc hier was om te beseffen dat deze functie niet werd geactiveerd door het formulier in te dienen, maar door de onwaas evenement. Met andere woorden, door de muis weg te bewegen van het invoerveld, werd het onwaas evenement, waarbij alle invoer wordt opgeschoond. De oplossing was om het formulier in te dienen door op de te drukken Enter toets, terwijl u ervoor zorgt dat u de muiscursor niet buiten de grenzen van het invoerveld plaatst:

Speld 5

Pin 5 had hetzelfde ontsmettenInvoer functioneren en omzeilen samen met een inhoudsbeveiligingsbeleid dat inline CSS verbiedt, maar inline JavaScript toestaat:

Speld 6

Ten slotte heeft Pin 6 de invoer niet opgeschoond, maar het gebruikte een strenger inhoudsbeveiligingsbeleid dat zowel inline CSS als JavaScript verbood. Mijn oplossing was om verouderde HTML te gebruiken om de stijlen te krijgen die ik nodig had en een tabel te gebruiken in plaats van een lijst:

Glamtariels fontein

Glamtariels fontein was een gelegenheid om te oefenen XML External Entity (XXE)-aanvallen. Uitzoeken hoe je een aangepaste XML-entiteit definieert, een entiteit definieert die een bestand opvraagt ​​bij de server en die entiteit toevoegt als payload aan een HTTP-verzoek, was niet moeilijk. Het moeilijkste deel was het uitzoeken van de raadsels in de game om het pad naar de bestanden te bepalen die de server zou lekken. Hier is het doorbraakverzoek dat de locatie van de gouden ring onthult:

Het is gekraakt! Hoogtepunten uit KringleCon 5: Gouden Ringen PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Het is gekraakt! Hoogtepunten uit KringleCon 5: Gouden Ringen PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Het is gekraakt! Hoogtepunten uit KringleCon 5: Gouden Ringen PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Ik zou twee lessen uit deze uitdaging willen geven. Gebruik eerst de Inhoudstype-omzetter extensie in Boeren om JSON-payloads naar XML te converteren. Ten tweede, probeer de XXE-payload in verschillende tags te plaatsen - het kostte me veel tijd om erachter te komen dat ik alleen de &xxe; lading in de verzoekType tag in plaats van de imgDrop label.

Op naar de vierde ring.

4. Wolkenring

Het is gekraakt! Hoogtepunten uit KringleCon 5: Gouden Ringen PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Spelen voor de Cloud Ring was een instapper voor beginners in de Amazon Web Services (AWS) Command Line Interface (CLI).

Het hoogtepunt van deze reeks uitdagingen was het gebruik truffelzwijn om AWS-referenties te vinden in een Git-repository en deze vervolgens te gebruiken om zich te authenticeren als een AWS-gebruiker. Een aanvaller die deze positie bereikt, kan gebruiken aws ik ben opdrachten om het beleid op te vragen dat van toepassing is op de gebruiker, en dus welke cloudactiva kunnen worden geopend en misbruikt.

Op naar de vijfde ring.

5. Brandende ring van vuur

Het is gekraakt! Hoogtepunten uit KringleCon 5: Gouden Ringen PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Het meest leerzame deel van deze reeks uitdagingen was leren over Merkle Bomen om een ​​slim contract te exploiteren en kom op de voorverkooplijst voor het kopen van een non-fungible token (NFT). Hier was de uitdaging om de bewijswaarden te ontdekken die, samen met mijn portefeuilleadres en de rootwaarde van een Merkle Tree, mijn opname op de voorverkooplijst bewezen.

Na een paar mislukte pogingen om bewijswaarden te geven, besefte ik dat ik nooit de bewijswaarden voor de opgegeven wortelwaarde zou kunnen achterhalen, omdat er geen manier was om alle bladwaarden te kennen die werden gebruikt om het te berekenen. Ik moest de rootwaarde wijzigen zodat ik een geldige Merkle Tree kon opgeven.

gebruik Tool van professor QPetabyte, Ik heb een Merkle Tree gemaakt van twee bladeren, bestaande uit mijn portemonnee-adres en het adres voor de BSRS_nft smart contract, dat ik vond met behulp van de in-game Blockchain Explorer in blok twee van de Ethereum-blockchain van de game. De tool genereerde de rootwaarde van deze boom en de bewijswaarde voor mijn portefeuilleadres. Vervolgens gebruikte ik Burp om het verzoek aan de server te onderscheppen en veranderde ik de standaard rootwaarde zodat ik een geldige Merkle Tree kon indienen. Hier is mijn NFT-sporc gekocht tegen een vaste prijs van 100 KringleCoins:

Het is gekraakt! Hoogtepunten uit KringleCon 5: Gouden Ringen PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Inderdaad een lelijk exemplaar.

Finale

Het is gekraakt! Hoogtepunten uit KringleCon 5: Gouden Ringen PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Hartelijk dank aan de organisatoren van de SANS Holiday Hack Challenge voor het uitdagen van mijn geest op nieuwe manieren en het helpen verdiepen van mijn kennis op het gebied van cyberbeveiliging. Ik kijk niet alleen uit naar de challenge van volgend jaar, maar ik ga zelfs de 2020 en 2021 edities van deze challenge uitproberen. En als je nog niet eerder aan deze uitdaging hebt deelgenomen, hoop ik dat deze hoogtepunten je interesse hebben gewekt.

Tijdstempel:

Meer van We leven veiligheid