# CTF vaja na realnem primeru: HackyCorp
V tej seriji praktičnih vaj bomo analizirali varnostne ranljivosti spletne strani **[https://hackycorp.com](https://hackycorp.com)** in pripadajočih GitHub repozitorijev. Vsaka vaja predstavlja samostojen CTF (Capture The Flag) izziv, pri katerem je cilj pridobiti zastavico (`flag`) s pomočjo raziskovanja, tehničnega znanja in razumevanja kibernetske varnosti.
Pri vsakem izzivu poiščite **zastavico** in jo vpišite kot dokaz uspešno opravljene naloge.
---
## Odkrivanje ranljivosti iz znanih URL naslovov
Včasih spletne strani uporabljajo privzete URL naslove za prijavo /login /admin ipd. Te lahko razkrivajo določene ranljivosti in omogočajo dodatno zbiranje informacij.
Kliknite tukaj za prikaz rešitve
Preverimo url /admin
Zastavica rešitve: `ad1d44d6-ab73-4640-8291-c5bf2343e2a5`
Namig poskusite poiskati še kakšno zastavico na URL datotekah statičnih datotek (slike, skripte ipd.).
## Odkrivanje ranljivosti iz javnih datotek
Razvijalci spletne strani so na spletni strani pustili javno datoteko, ki vsebuje naš ključ/zastavico, ki jo iščemo. Iščemo javno datoteko key.txt, ki je najverjetneje javna (morda pomotoma), in se nahaja na istem mestu, kjer strežnik streže statične datoteke (assets), kot so npr. slike, CSS ali JS datoteke.
### Namig / Rešitev
Namig: v izvorni kodi spletne strani poiščite poddomeno, ki se uporablja za serviranje statičnih datotek, nato identificirajte končni strežnik s pomočjo ukaza dig, da pridobite dostop do CDN.
Kliknite tukaj za prikaz rešitve
Javna datoteka se nahaja na domeni v korenski mapi. Ime datoteke je key.txt.
Zastavica rešitve: `aeaee57f-2a82-41da-bc4c-d081c8cddfc8`
## Odkrivanje ranljivosti v Javascript datotekah
V naslednjem koraku bomo analizirali spletno stran in med njenimi JavaScript datotekami poiskali hardcodan (vnaprej vnešen) ključ. Takšne napake se pogosto pojavijo v realnih aplikacijah in lahko predstavljajo resno varnostno tveganje, saj omogočajo napadalcem dostop do notranjih sistemov ali podatkov.
### Namig / Rešitev
Namig: v izvorni kodi spletne strani poiščite skripto, ki se uporablja, nato poiščite ključ.
Kliknite tukaj za prikaz rešitve
Preiščemo JS datoteke, v eni izmed njih najdemo zapis o ključu.
Zastavica rešitve: `d6b75269-97a3-44de-be32-fff0dd55e7ef`
## Odkrivanje ranljivosti na spletnem strežniku
Včasih spletni strežnik razkrije v glavi zahteve določene informacije. En primer je uporaba curl zahtevka na domeno ali preiskovanje robots.txt datoteke.
Kliknite tukaj za prikaz rešitve
curl -I https://hackycorp.com/
Zastavica rešitve: `99d0738b-1e52-4a00-8885-b15894b2c79e`
curl https://hackycorp.com/robots.txt
Zastavica rešitve: `af9c328a-02b4-439d-91c6-f46ab4a0835b`
SSL strežnik običajno za certifikat kreira datoteko security.txt, ki prav tako lahko razkriva določene informacije.
Kliknite tukaj za prikaz rešitve
curl https://hackycorp.com/.well-known/security.txt
Zastavica rešitve: `99685e30-7061-4ac0-83bf-4ccc0409faac`
Poskusimo lahko tudi s curl zahtevnom na neobstoječo stran - 404 error.
Kliknite tukaj za prikaz rešitve
curl -I https://hackycorp.com/neobstaja
Zastavica rešitve: `99d0738b-1e52-4a00-8885-b15894b2c79e`
## Odkrivanje ranljivosti preko IP naslova
Krovni IP strežnik domene lahko servira ločen spletni strežnik in morebiti razkriva določene informacije.
Kliknite tukaj za prikaz rešitve
curl --insecure http://IP_STREZNIKA
Zastavica rešitve: `5cf83b5d-eb6c-4eee-af6c-945f9aed8dfd`
## Odkrivanje ranljivosti v Github repozitorijih
V tej nalogi bomo raziskoval GitHub repozitorij, kjer bomo preverili vse obstoječe veje (branches) in poskusili najti skrite ali občutljive podatke, ki se ne nahajajo v privzeti (main ali master) veji. Pri vajah z Github bomo uporabljali profil organizacije: https://github.com/hackycorp
### Odkrivanje ranljivosti v repo3
Namig: Raziščite veje projekta v repozitoriju repo3.
Kliknite tukaj za prikaz rešitve
V repo3 najdemo vejo, ki vsebuje zastavico.
Zastavica rešitve: `08be82ba-e5fd-4fae-b2c2-272a18d31f80`
### Odkrivanje ranljivosti v repo4
Enako naredimo za repozitorij repo4.
Kliknite tukaj za prikaz rešitve
Zastavica se tokrat nahaja v datoteki v drugi veji.
Zastavica rešitve: `a60b4aee-642a-483b-9262-ccfc2ed46f0d`
### Odkrivanje ranljivosti v repo9
V nadaljevanju se osredotočimo še na repo9. Tu moramo poiskati spremembe v datotekah, kjer najdemo izbrisan ključ.
Kliknite tukaj za prikaz rešitve
Poiščemo spremembe
git log --diff-filter=D --summary &&
git log -- KEY.txt &&
git show COMMIT_HASH:KEY.txt
Zastavica rešitve: `3ee505c2-8aa9-4d5e-810e-921778dce1e6`
### Odkrivanje ranljivosti v repo0a
V nadaljevanju se osredotočimo še na repo0a. Tu moramo poiskati poslano sporočilo ob zapisu, kjer najdemo zapisan ključ.
Kliknite tukaj za prikaz rešitve
Poiščemo log
git log --oneline &&
git log --oneline --grep=key -i &&
git show COMMIT_HASH
Zastavica rešitve: `5c75cfe9-52dd-475b-8cfa-7ffc492abeca`
Poskusite poiskati ključe še na repozitorijih:
- https://github.com/hackycorp/repo1
- https://github.com/hackycorp/repo7
- https://github.com/hackycorpdev/test1
## Odkrivanje ranljivosti v DNS zapisih
Včasih lahko s preiskovanjem TXT zapisov pridobimo informacije, ki vključujejo občutljive podatke. Primer tega lahko pridobimo s pregledom TXT zapisa domene key.z.hackycorp.com.
Kliknite tukaj za prikaz rešitve
Namig: dig key.z.hackycorp.com TXT
Lahko bi tudi uporabili bruteforce strategijo:
```bash
for sub in key test dev txt api admin; do
dig $sub.z.hackycorp.com TXT +short
done
```
Zastavica rešitve: `9f883f22-6ea5-4631-bbe8-95841ad63f56`
## Uporaba mehanizma za sinhronizacijo DNS zapisov
V tej nalogi bomo izvedli DNS sinhronizacijo na domensko cono z.hackycorp.com in tako poskušali pridobiti seznam DNS zapisov, ki jih strežnik razkriva.
Opomba: deluje samo v virtualiziranem okolju
Uporabimo:
dig AXFR z.hackycorp.com
dig -t SOA z.hackycorp.com
dig AXFR z.hackycorp.com @z.hackycorp.com
Kliknite tukaj za prikaz rešitve
Zastavica rešitve: `e5fce970-6d94-43c1-bdd5-a06c2b235f9c`
## Razkrivanje informacij s pomočjo poizvedb programske opreme
Različica programske opreme, ki se uporablja nam pogosto razkrije morebitne varnostne ranljivosti.
Opomba: deluje samo v virtualiziranem okolju
Uporabimo:
dig -c chaos -t txt VERSION.BIND @z.hackycorp.com
Kliknite tukaj za prikaz rešitve
Zastavica rešitve: `4e5e76e1-728a-49be-aea8-4591ba11e588`
## Skriptno programiranje in avtomatizacija
Velikokrat si lahko pomagamo s pripravo skripte, ki s strategijo brute-force izvede določene akcije.
Pripravili bomo dve skripti:
```bash
for i in `seq 1 150`
do
printf "0x%02x.a.hackycorp.com\n" $i >> hosts.txt
done
```
```bash
for i in `cat hosts.txt`
do
curl $i/logo.png -o $i.png
done
```
Preizkusite lahko še ostale CTF izzive na spletnih straneh:
- https://www.root-me.org/
- https://pentesterlab.com/exercises/
- https://tryhackme.com/hacktivities