Lärande möter kul vid SANS Holiday Hack Challenge 2022 – spänn fast dig för en crackerjack-tur på Nordpolen när jag omintetgör Grinchums fula plan och återställer de fem gyllene ringarna
Detta är mitt första år som jag deltar i SANS Holiday Hack Challenge och det var en viskning. Genom en serie av 16 utmaningar, från lätt till svår, tränade jag på att analysera misstänkt nätverkstrafik och PowerShell-loggar, skriva Suricata regler, bryta sig ur en Docker-behållare, hitta läckta nycklar för att utnyttja en GitLab CI/CD pipeline och en AWS-användare, ledande XML External Entity-attacker, och hacka ett smart kontrakt för att köpa en icke-svampbar token.
Det bästa med den här upplevelsen var att den introducerade mig till nya verktyg och teknologier, vilket sträckte min kunskap om cybersäkerhet så mycket längre. Här delar jag med mig av några höjdpunkter från att lösa utmaningarna.
Riktning
Varje deltagare får en avatar för att navigera i en webbläsares videospelmiljö på Nordpolen:
Under orienteringen får du en kryptovaluta-plånbok som spelet använder för att ge KringleCoins för att genomföra utmaningar och som du använder i den sista utmaningen för att hacka ett smart kontrakt. Intressant nog håller spelet reda på alla KringleCoin-transaktioner i en Ethereum-blockkedja, vilket innebär att en komplett registrering av dina framsteg också lagras i denna blockkedja.
Vidare till spelets första ring.
1. Tolkien Ring
Att hitta Tolkien-ringen krävde att jag böjde mina loggaranalysmuskler.
Wireshark-nätfiske
Först använde jag Wireshark för att analysera det tillhandahållna .pcap fil som avslöjade en server på adv.epostoday[.]uk ladda ner filen Ref_Sept24-2020.zip till en dator:
När jag kikade in i ZIP-filen hittade jag en körbar fil som heter Ref_Sept24-2020.scr som utlöste två upptäckter i ESET Endpoint Security: BAT/Runner.ES och Generik.TAGTBG. Denna skadliga programvara leder så småningom till en skadlig körbar fil som körs i minnet config.dll och detekteras av ESET:s Avancerad minnesskanner as Win32/Dridex.DD.
Windows händelseloggar
Därefter analyserade jag det tillhandahållna .evtx fil som innehåller PowerShell-loggar med Event Viewer. Även om det finns andra verktyg för att analysera PowerShell-loggar, om angripare vet hur man använder levande-off-the-land binärer för att hålla sig under radarn, bör försvarare också vara väl insatta i de inbyggda verktyg som ett operativsystem tillhandahåller.
Eftersom loggarna innehöll 10,434 XNUMX händelser grupperade jag händelserna efter datum och körde sedan åtgärden Hitta för att leta efter eventuella händelser som innehåller $ karaktär. I PowerShell, $ används för att skapa och referera variabler. Jag hittade en attack som ägde rum den 24 december 2022, när angriparen körde följande skript:
Det ser ut som att angriparen hittade ett hemligt recept, bytte ut den hemliga ingrediensen honung för fisk oljaoch skapade sedan en ny receptfil. Detta utlöste en händelse med ett ID på 4104, vilket står för exekvering av fjärrstyrda PowerShell-kommandon. Så jag filtrerade händelserna efter detta ID, vilket hjälpte mig att hitta ytterligare skadliga händelser snabbare.
Suricata Regatta
Den sista övningen för Tolkien Ring var att skriva fyra Suricata-regler för att övervaka nätverkstrafiken för en Dridex-angrepp:
alert dns $HOME_NET any -> any any (msg:”Känt dålig DNS-uppslagning, möjlig Dridex-infektion”; dns.query; content:”adv.epostoday.uk”; nocase; sid:1; rev:1;)
alert http 192.185.57.242 any <> any any (msg:”Undersök misstänkta kopplingar, möjlig Dridex-infektion”; sid:2; rev:1;)
alert tls any any -> any any (msg:”Undersök dåliga certifikat, möjlig Dridex-infektion”; tls.cert_subject; innehåll:”CN=heardbellith.Icanwepeh.nagoya”; sid:3; rev:1;)
alert http any any -> any any (msg:”Suspicious JavaScript-funktion, möjlig Dridex-infektion”; file_data; content:”let byteCharacters = atob”; sid:4; rev:1;)
I ordning fångar dessa regler DNS-uppslagningar för adv.epostoday[.]uk, anslutningar till IP-adressen 192.185.57[.]242, användningen av den skadliga servern heardbellith.Icanwepeh[.]nagoya identifieras via det vanliga namnet (CN) i ett TLS-certifikat och användningen av JavaScript a till B() funktion för att avkoda en binär sträng som innehåller base64-kodad data på klienten.
Att slutföra dessa tre utmaningar gav mig Tolkien-ringen:
Till den andra ringen.
2. Elfen Ring
De mest framträdande utmaningarna för Elfenringen var Prison Escape och Jolly CI/CD.
Prison Escape
Prison Escape var en sträng påminnelse om att att bevilja root-privilegier till en användare i en Docker-behållare är lika bra som att bevilja root-privilegier på värdsystemet. Utmaningen var att bryta sig ut ur containern. Tja, lätt gjort när du är root:
Som rotanvändare listade jag partitionstabellerna för enheten och monterade sedan värdfilsystemet, vilket gav mig full åtkomst till värden. Nu kunde jag söka efter nyckeln, som borde finnas i hemkatalogen som avslöjas av tipsen i spelet:
Jolly CI/CD
Även om det gick snabbt, tog Jolly CI/CD mig den längsta utmaningen att lista ut. Först fick vi ett Git-förråd för att klona över HTTP:
Från webbadressen kunde jag se att namnet på förvaret var wordpress.flag.net.internt, så jag flyttade till förvaret och hittade en WordPress-webbplats. Jag kollade om hemsidan var live:
Ja, hemsidan var funktionell. Jag var nyfiken på om det fanns några läckta nycklar i källkodens historik. Om ja, bör jag kunna pusha redigeringar till källkoden. Så jag sprang git logg:
Från commit-meddelandena ser det ut som ett förbinda gjordes efter att ha lagt till tillgångar för att fixa ett hopp. Dags att kolla in pre-hoops-åtagandet:
Utmärkt, jag hittade en .ssh katalog med nycklar. Låt oss kopiera dessa nycklar och konfigurera en SSH-agent och en Git-användare för att se om jag kan utge mig för att vara ägaren till dessa nycklar:
Låt oss nu gå tillbaka till huvudgrenen och testa om vi kan driva en trivial ändring av källkoden (med nano lade jag helt enkelt till ett mellanslag i en av filerna):
Så jag uppnådde den första delen av utmaningen genom att imitera en av WordPress-utvecklarna, men fungerade webbplatsen fortfarande efter min push?
Min push ändrade något för nu omdirigerades webbplatsen till port 8080.
Fram till nu hade jag ignorerat CI/CD-delen av utmaningen, vilket borde vara nyckeln till att slutföra den. Förvaret innehåller en .gitlab-ci.yml fil, som tillhandahåller konfigurationen för en GitLab CI/CD-pipeline. Varje gång du trycker till förvaret, startar CI/CD-systemet, och en GitLab Runner exekverar skripten i denna YML-fil. Det är lika bra som att få fjärrkodexekvering på servern där GitLab Runner är installerad, tänkte jag.
När jag tittade närmare såg jag en rsync skript som kopierar alla filer från Git-förvaret till katalogen på webbservern från vilken webbplatsen serverades. Först försökte jag använda rsync att vända dataflödet genom att kopiera alla filer från webbservern till Git-förvaret, men utan framgång.
Efter mycket hypotestestning fick jag så småningom min genombrottsinsikt: Istället för att försöka "fixa" WordPress-webbplatsen eller köra skadliga skript via byggsystemet, servera en webbplats som läcker information från webbservern. Inuti index.php (finns på den översta nivån av förvaret) kan jag kommentera koden som laddar WordPress-webbplatsen och köra PHP-kommandon som sonderar webbservern.
Jag kan faktiskt till och med köra skalkommandon med PHP. jag upptäckte att passera igenom() fungerade lätt.
In index.php, Jag använde // att kommentera två rader och jag lade till passthru('ls -la /'); på sista raden. Detta skapar en webbplats som listar alla filer i rotkatalogen på webbservern:
Sedan skickade jag den här ändringen till Git-förvaret och GitLab CI/CD-systemet tog hand om att uppdatera webbplatsen åt mig:
Ah, Elfen-ringen måste vara med flag.txt! Jag upprepade de föregående stegen, men den här gången använde jag passthru('cat /flag.txt'); avslöjar Elfen-ringen nästa gång jag begärde webbplatsen:
Till tredje ringen.
3. Web Ring
Den roligaste utmaningen för mig var Open Boria Mine Door, även om Glamtariels fontän var intressant samtidigt som den presenterade gåtor.
Öppna Boria-gruvans dörr
I Open Boria Mine Door fick vi sex stift eller mini-utmaningar för att kringgå ingångsvalidering eller en Policy för innehållssäkerhet för att ansluta in- och utloppsrören mellan stiften, inklusive matchning av rörfärgerna. För de flesta stift använde jag HTML för att skriva en lista med anslutningsbokstaven 'o'. Här är min sista lösning:
Stift 1
Det fanns ingen validering för Pin 1, så det var en enkel fråga om HTML och inline CSS:
<p style=“letter-spacing: -4px; margin: 0; padding: 0;”>oooooooooooooo</p> |
Stift 2
Pin 2 hade en innehållssäkerhetspolicy som inte tillåtit JavaScript men tillät inline CSS, så det var inga problem för min metod:
1 2 3 4 5 6 7 8 9 10 11 12 |
<ul style=“list-style: none; line-height:0.5; letter-spacing: -4px; margin: 0; padding: 0;”> <li>o</li> <li>o</li> <li>o</li> <li>o</li> <li>o</li> <li>o</li> <li>o</li> <li>o</li> <li>o</li> <li>oooooooooooooo</li> </ul> |
Stift 3
Pin 3 hade en innehållssäkerhetspolicy som inte tillät CSS men tillät inline JavaScript, så jag använde JavaScript för att ändra stilarna istället:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<script> document.write(“” + “<ul id=’o’>” + “<li>o</li>” + “<li>oooooooooooooooooooooo</li>” + “<li>o</li><li>o</li><li>o</li><li>o</li>” + “</ul>”); const o = document.getElementById(‘o’); o.style.color = “blue”; o.style.listStyle = “none”; o.style.lineHeight = “0.5”; o.style.letterSpacing = “-4px”; o.style.margin = “0”; o.style.padding = “0”; </script> |
Stift 4
Pin 4 hade ingen innehållssäkerhetspolicy, men den hade en sanitizeInput-funktion på klientsidan som skulle ta bort dubbla citattecken, enkla citattecken, vänster vinkelparenteser och höger vinkelparenteser. Tricket här var att inse att den här funktionen inte utlöstes genom att skicka in formuläret, utan av på oskärpa händelse. Med andra ord, att flytta musen bort från inmatningsfältet utlöste på oskärpa evenemanget, sanerar all input. Lösningen var att skicka in formuläret genom att trycka på ange -tangenten, samtidigt som du ser till att inte flytta muspekaren utanför gränserna för inmatningsfältet:
1 2 3 4 5 6 7 8 9 10 11 |
<ul style=“list-style: none; line-height:0.5; letter-spacing: -4px; margin: 0; padding: 0;”> <li>o</li> <li>o</li> <li>oooooooooooooo</li> <li>o</li> <li>o</li> <li>o</li> <li>o</li> <li>o</li> <li style=“color: blue;”>oooooooooooooo</li> </ul> |
Stift 5
Pin 5 hade samma sak sanitizeInput funktion och bypass tillsammans med en innehållssäkerhetspolicy som förbjuder inline CSS, men tillåter inline JavaScript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
<script> document.write(“” + “<ul id=’o’>” + “<li>o</li>” + “<li>o</li>” + “<li class=’red’>oooooooooooooo</li>” + “<li><span class=’red’>o</span></li>” + “<li><span class=’red’>o</span></li>” + “<li><span class=’red’>o</span>” + “<span class=’blue’> ooooooooooo</span></li>” + “<li><span class=’red’>o</span>” + “<span class=’blue’> oo</span></li>” + “<li><span class=’red’>o</span>” + “<span class=’blue’> oo</span></li>” + “<li><span class=’red’>o</span>” + “<span class=’blue’> oo</span></li>” + “<li>o<span class=’blue’> oo</span></li>” + “<li>o<span class=’blue’> B</span></li>” + “</ul>”); const o = document.getElementById(‘o’); o.style.listStyle = “none”; o.style.lineHeight = “0.5”; o.style.letterSpacing = “-4px”; o.style.margin = “0”; o.style.padding = “0”; o.style.fontSize = “xx-large”; const reds = document.getElementsByClassName(“red”); for (let red of reds) { red.style.color = “red”; } const blues = document.getElementsByClassName(“blue”); for (let blue of blues) { blue.style.color = “blue”; } </script> |
Stift 6
Slutligen sanerade inte Pin 6 inmatningen, men den använde en striktare innehållssäkerhetspolicy som förbjöd både inline CSS och JavaScript. Min lösning var att använda föråldrad HTML för att få de stilar jag behövde och använda en tabell istället för en lista:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<table border=“0” frame=“void” rules=“none” cellpadding=“0” cellspacing=“0” width=“100%”> <tr bgcolor=“#00FF00”> <td><font color=“#00FF00” size=“7”>o</font></td> <td><font color=“#00FF00” size=“7”>o</font></td> <td><font color=“#00FF00” size=“7”>o</font></td> <td><font color=“#00FF00” size=“7”>o</font></td> </tr> <tr bgcolor=“red”> <td><font color=“red” size=“5”>o</font></td> <td><font color=“red” size=“5”>o</font></td> <td><font color=“red” size=“5”>o</font></td> <td><font color=“red” size=“5”>o</font></td> </tr> <tr bgcolor=“blue”> <td><font color=“blue” size=“9”>o</font></td> <td><font color=“blue” size=“9”>o</font></td> <td><font color=“blue” size=“9”>o</font></td> <td bgcolor=“red”><font color=“red” size=“9”>o</font></td> </tr> <tr bgcolor=“blue”> <td><font color=“blue” size=“9”>o</font></td> <td><font color=“blue” size=“9”>o</font></td> <td><font color=“blue” size=“9”>o</font></td> <td><font color=“blue” size=“9”>o</font></td> </tr> </table> |
Glamtariels fontän
Glamtariels fontän var ett tillfälle att öva XML External Entity (XXE) attacker. Att ta reda på hur man definierar en anpassad XML-entitet, definiera en entitet som begär en fil från servern och lägga till den entiteten som en nyttolast till en HTTP-förfrågan var inte svårt. Det svåraste var att ta reda på gåtorna i spelet för att visa vägen till filerna som servern skulle läcka. Här är genombrottsförfrågan som avslöjar platsen för guldringen:
Jag skulle ge två lärdomar från denna utmaning. Använd först Content Type Converter förlängning i Rapa för att konvertera JSON-nyttolaster till XML. För det andra, försök att placera XXE-nyttolasten i olika taggar – det tog mig lång tid att komma på att allt jag behövde göra var att placera &xxe; nyttolast i reqType taggen istället för imgDrop märka.
Till den fjärde ringen.
4. Molnring
Att spela för Cloud Ring var en nybörjarresa till Amazon Web Services (AWS) Command Line Interface (CLI).
Höjdpunkten i denna uppsättning utmaningar var att använda tryffelsvin för att hitta AWS-referenser i ett Git-förråd och sedan utnyttja dem för att autentisera som en AWS-användare. En angripare som kommer till denna position kan använda aws iam kommandon för att fråga vilka policyer som gäller för användaren, och därmed vilka molntillgångar som kan nås och missbrukas.
Till den femte ringen.
5. Burning Ring of Fire
Den mest lärorika delen av denna uppsättning utmaningar var att lära sig om Merkle träd att utnyttja ett smart kontrakt och komma på förköpslistan för att köpa en icke-fungibel token (NFT). Här var utmaningen att upptäcka bevisvärdena som, tillsammans med min plånboksadress och rotvärdet av ett Merkle Tree, bevisade att jag fanns med på förköpslistan.
Efter några misslyckade försök att tillhandahålla bevisvärden insåg jag att jag aldrig skulle kunna räkna ut bevisvärdena för det angivna rotvärdet eftersom det inte fanns något sätt att veta alla bladvärden som användes för att beräkna det. Jag behövde ändra rotvärdet så att jag kunde tillhandahålla ett giltigt Merkle-träd.
Använda Professor QPetabytes verktyg, Jag skapade ett Merkle-träd av två blad som består av min plånboksadress och adressen till BSRS_nft smart kontrakt, som jag hittade genom att använda Blockchain Explorer i spelet i block två av spelets Ethereum blockchain. Verktyget genererade rotvärdet för detta träd och bevisvärdet för min plånboksadress. Sedan använde jag Burp för att fånga upp begäran till servern och ändrade standardrotvärdet så att jag kunde skicka in ett giltigt Merkle-träd. Här är min NFT-spor köpt till ett fast pris av 100 KringleCoins:
Ett riktigt fult exemplar.
Final
Ett stort tack till arrangörerna av SANS Holiday Hack Challenge för att de sträckte ut mitt sinne på nya sätt och hjälpte till att fördjupa min kunskap om cybersäkerhet. Jag ser inte bara fram emot nästa års utmaning, utan jag kommer även att testa 2020 och 2021 års utgåvor av denna utmaning. Och om du inte har deltagit i den här utmaningen tidigare hoppas jag att dessa höjdpunkter har väckt ditt intresse.
- SEO-drivet innehåll och PR-distribution. Bli förstärkt idag.
- Platoblockchain. Web3 Metaverse Intelligence. Kunskap förstärkt. Tillgång här.
- Källa: https://www.welivesecurity.com/2023/01/09/cracked-it-highlights-kringlecon-5-golden-rings/
- 1
- 10
- 100
- 11
- 202
- 2020
- 2021
- 2022
- 7
- 9
- a
- Able
- Om oss
- tillgång
- Accessed
- uppnås
- uppnå
- Handling
- lagt till
- Annat
- adress
- Efter
- Recensioner
- Alla
- tillåta
- Även
- amason
- Amazon Web Services
- Amazon Web Services (AWS)
- analys
- analysera
- analys
- och
- Ansök
- Tillgångar
- attackera
- Försök
- autentisera
- Avatar
- utmärkelse
- AWS
- Badrum
- därför att
- innan
- Där vi får lov att vara utan att konstant prestera,
- BÄST
- mellan
- Stor
- Blockera
- blockchain
- Blå
- köpt
- Branch
- Ha sönder
- bryta ut
- Breaking
- genombrott
- SLUTRESULTAT
- Köp
- kallas
- vilken
- brottning
- certifikat
- certifikat
- utmanar
- utmaningar
- byta
- karaktär
- ta
- klient
- närmare
- cloud
- koda
- färg
- kommentar
- förbinda
- Gemensam
- fullborda
- fullborda
- dator
- ledande
- konfiguration
- Kontakta
- Anslutning
- Anslutningar
- Bestående
- Behållare
- innehåller
- innehåll
- kontrakt
- konvertera
- kopiering
- kunde
- skapa
- skapas
- skapar
- referenser
- kryptovaluta
- Cryptocurrency plånbok
- CSS
- nyfiken
- beställnings
- Cybersäkerhet
- datum
- Datum
- December
- Fördjupa
- Standard
- Försvararna
- definierande
- detekterad
- utvecklare
- anordning
- DID
- den
- olika
- svårt
- Upptäck
- dns
- Hamnarbetare
- dokumentera
- Dörr
- dubbla
- intjänade
- lätt
- Slutpunkt
- Slutpunktsäkerhet
- enhet
- inträde
- Miljö
- ethereum
- Ethereum blockchain
- Även
- händelse
- händelser
- så småningom
- Utför
- utförande
- Motionera
- Utgång
- erfarenhet
- Exploit
- explorer
- förlängning
- extern
- få
- fält
- Figur
- Fil
- Filer
- slutlig
- hitta
- finna
- Förnamn
- Fast
- fixerad
- flöda
- folie
- efter
- Plundringståg
- formen
- format
- Framåt
- hittade
- fontän
- Fjärde
- från
- full
- kul
- fungera
- funktionella
- ytterligare
- lek
- Games
- genereras
- skaffa sig
- gif
- gå
- GitHub
- ges
- Gold
- Golden
- god
- beviljande
- hacka
- hacking
- Hård
- hjälpa
- här.
- Dölja
- Markera
- höjdpunkter
- tips
- historia
- Semester
- Hem
- hoppas
- värd
- Hur ser din drömresa ut
- How To
- html
- HTTPS
- identifierade
- in
- I andra
- i spelet
- Inklusive
- integration
- informationen
- ingång
- insikt
- istället
- intresse
- intressant
- Gränssnitt
- introducerade
- IP
- IP-adress
- IT
- JavaScript
- json
- Nyckel
- nycklar
- Kicks
- Vet
- kunskap
- Efternamn
- leda
- läckage
- Läckor
- lärt
- inlärning
- Lärdomar
- Lärdomar
- brev
- Nivå
- Li
- linje
- rader
- Lista
- Noterade
- listor
- lever
- laster
- belägen
- läge
- Lång
- länge sedan
- se
- du letar
- UTSEENDE
- slå upp
- Lot
- gjord
- Huvudsida
- malware
- Marginal
- matchande
- Materia
- max-bredd
- betyder
- möter
- Minne
- meddelanden
- metod
- Microsoft
- emot
- Övervaka
- mer
- mest
- flytta
- rörliga
- Mozilla
- namn
- nano
- nativ
- Navigera
- netto
- nät
- nätverkstrafik
- Nya
- Nästa
- NFT
- icke-fungible
- icke-svampbar token
- Nord
- erbjudanden
- ONE
- öppet
- drift
- operativsystem
- Möjlighet
- beställa
- organisatörer
- Övriga
- utanför
- ägaren
- del
- deltog
- deltagande
- bana
- PHP
- tall
- Röret
- rörledning
- Plats
- placering
- Planen
- plato
- Platon Data Intelligence
- PlatonData
- Strategier
- policy
- placera
- möjlig
- Power
- praktiken
- förköp
- presenteras
- föregående
- pris
- fängelse
- privilegier
- sond
- Problem
- Framsteg
- framträdande
- bevis
- visat
- ge
- förutsatt
- ger
- inköp
- Tryck
- sköt
- Snabbt
- snabbt
- radarn
- som sträcker sig
- inser
- insåg
- motta
- erhåller
- Receptet
- post
- Recover
- Red
- avlägsen
- upprepade
- Repository
- begära
- förfrågningar
- Obligatorisk
- avkastning
- avslöjade
- avslöjande
- vända
- Rider
- Ringa
- rot
- regler
- Körning
- runner
- rinnande
- skript
- Sök
- Andra
- sekunder
- Secret
- säkerhet
- Serier
- tjänar
- Tjänster
- in
- Dela
- Shell
- skall
- sida
- Enkelt
- helt enkelt
- enda
- SEX
- smarta
- smart kontrakt
- So
- Mjuk
- lösning
- Lösa
- något
- Källa
- källkod
- Utrymme
- står
- bo
- Steg
- Fortfarande
- lagras
- striktare
- stil
- skicka
- framgång
- misstänksam
- bytte
- syntax
- system
- bord
- MÄRKA
- tar
- TD
- Tekniken
- testa
- Testning
- Smakämnen
- källan
- Tredje
- trodde
- tre
- Genom
- tid
- till
- token
- alltför
- verktyg
- verktyg
- topp
- spår
- trafik
- Transaktioner
- triggas
- under
- uppdatering
- URL
- användning
- Användare
- godkännande
- värde
- Värden
- via
- Video
- videospel
- plånbok
- sätt
- webb
- webbserver
- webbservice
- Webbplats
- som
- medan
- bred
- kommer
- utan
- Wordpress
- ord
- Arbete
- arbetade
- skulle
- skriva
- skrivning
- XML
- år
- Om er
- Din
- själv
- zephyrnet
- Postnummer