27. 10. 2023

CTF - The Catch 2023 - Sonar

Zo sekcie drillov pre posádku tu máme za 2 body "Sonar logs". Každý člen posádky by sa mal vyznať v logoch sonaru, preto je tu úloha zistiť, čo sonar videl.


Ahoy, officer,

each crew member must be able to operate the sonar and understand its logs. Your task is to analyze the given log file, and check out what the sonar has seen.

May you have fair winds and following seas!


Súbor sonar.log obsahuje 92 záznamov s rôznymi časovými pásmami.

2023-10-01 22:51:22 Pacific/Honolulu - Transmitters activated
2023-10-02 00:32:51 US/Pacific - Receiver 5 up
2023-10-02 00:33:45 America/Vancouver - Preprocessor up
2023-10-02 00:52:22 America/Creston - Object detected in depth 65 (0x41)
2023-10-02 01:30:48 America/Belize - Power generator up
2023-10-02 01:34:28 America/Inuvik - Graphical UI up
2023-10-02 01:34:59 America/Mazatlan - Transmitters activated
2023-10-02 01:42:58 Mexico/BajaSur - Transmitters activated
2023-10-02 01:49:54 US/Pacific - Object detected in depth 114 (0x72)
2023-10-02 01:51:29 America/Sitka - Transmitters activated
....


Hneď na prvý pohľad ma zaujali čísla na konci niektorých riadkov. Tie by mohli obsahovať správu (ascii kódy znakov).
Vyfiltrujeme teda len riadky s číslami na konci, nech sa dajú ďalej spracovať (0x označuje hex kódovanie). Využijem AWK na odstránenie nepotrebných textov a %c pre konverziu čísel na znaky:

grep 0x sonar.log | awk '{ printf "%s %s %s - %c\n",$1,$2,$3,$9 }' > sonar1.log

2023-10-02 00:52:22 America/Creston - A
2023-10-02 01:49:54 US/Pacific - r
2023-10-02 01:59:01 America/Edmonton - G
2023-10-02 02:51:10 America/Inuvik - b
2023-10-02 02:51:23 America/Mazatlan - j
2023-10-02 03:35:00 America/St_Barthelemy - F
2023-10-02 04:06:09 America/Indiana/Winamac - {
2023-10-02 04:35:00 US/Central - w
2023-10-02 04:44:04 EST - m
2023-10-02 04:44:40 America/Lower_Princes - 2
2023-10-02 05:12:42 America/Thunder_Bay - W
2023-10-02 05:33:26 America/Kralendijk - L
2023-10-02 08:20:15 GMT0 - Y
2023-10-02 09:39:10 Africa/Banjul - W
2023-10-02 09:42:59 Europe/Skopje - L
2023-10-02 10:16:44 Europe/Belgrade - 3
2023-10-02 10:26:17 Africa/Tunis - Z
2023-10-02 10:51:30 Europe/Lisbon - }
2023-10-02 11:57:20 Asia/Hebron - -
2023-10-02 12:21:11 Asia/Hebron - o
2023-10-02 12:32:18 Europe/Zaporozhye - -
2023-10-02 16:29:12 Asia/Macau - A
2023-10-02 16:40:55 Australia/Perth - -
2023-10-02 17:05:53 Asia/Taipei - K
2023-10-02 19:38:35 Australia/Sydney - G

Ako som si myslel, vyzerá to na znaky vlajky, ale v nesprávnom poradí.
Teraz nastal čas skonvertovať časy do jednotnej časovej zóny, napr UTC. Tento sonar podľa pomôcky používa staršiu python knižnicu pytz 2020.4. Skúšal som v pythone konvertovať časové zóny, ale nedarilo sa mi.
Nakoniec som sa chytil lopaty (cyberChef) a preklad spravil ručne. Časové zóny vie skonvertovať funkcia "Translate DateTime format", po zvolení medzinárodného formátu zápisu (YYYY-MM-DD), bohužiaľ vezme len jeden dátum a tak nasledovalo úmorné kopírovanie 25 krát.
No dá sa to aj vyskriptovať na linuxe. Použil som dateconv z knižnice dateutils, resp po novom dateutils.dconv.

IFS="
"
for ria in `cat sonar1.log`; do
# echo $ria
 zon=`echo $ria | awk '{ print $3 }'`
 tim=`echo $ria | awk '{ print $1" "$2 }'`
# kon=`dateconv --from-zone $zon "$tim"`
 kon=`dateutils.dconv --from-zone $zon "$tim"`
 pis=`echo $ria | awk '{ print $5 }'`
 echo $kon $pis
done

Po zbehnutí skriptu mám celkom použiteľný výstup:

2023-10-02T07:52:22 A
2023-10-02T08:49:54 r
2023-10-02T07:59:01 G
2023-10-02T08:51:10 b
2023-10-02T09:51:23 j
2023-10-02T07:35:00 F
2023-10-02T08:06:09 {
2023-10-02T09:35:00 w
2023-10-02T09:44:04 m
2023-10-02T08:44:40 2
2023-10-02T09:12:42 W
2023-10-02T09:33:26 L
2023-10-02T08:20:15 Y
2023-10-02T09:39:10 W
2023-10-02T07:42:59 L
2023-10-02T08:16:44 3
2023-10-02T09:26:17 Z
2023-10-02T09:51:30 }
2023-10-02T08:57:20 -
2023-10-02T09:21:11 o
2023-10-02T09:32:18 -
2023-10-02T08:29:12 A
2023-10-02T08:40:55 -
2023-10-02T09:05:53 K
2023-10-02T08:38:35 G

Ak sú moje predpoklady správne, tento súbor stačí zoradiť cez príkaz sort a mali by sme dostať text vlajky:

cat sonar2.log | sort

2023-10-02T07:35:00 F
2023-10-02T07:42:59 L
2023-10-02T07:52:22 A
2023-10-02T07:59:01 G
2023-10-02T08:06:09 {
2023-10-02T08:16:44 3
2023-10-02T08:20:15 Y
2023-10-02T08:29:12 A
2023-10-02T08:38:35 G
2023-10-02T08:40:55 -
2023-10-02T08:44:40 2
2023-10-02T08:49:54 r
2023-10-02T08:51:10 b
2023-10-02T08:57:20 -
2023-10-02T09:05:53 K
2023-10-02T09:12:42 W
2023-10-02T09:21:11 o
2023-10-02T09:26:17 Z
2023-10-02T09:32:18 -
2023-10-02T09:33:26 L
2023-10-02T09:35:00 w
2023-10-02T09:39:10 W
2023-10-02T09:44:04 m
2023-10-02T09:51:23 j
2023-10-02T09:51:30 }

cat sonar2.log | sort | cut -d' ' -f2 | xargs | tr -d ' '

FLAG{3YAG-2rb-KWoZ-LwWmj}

Vlajku som skúsil a nebola správna. Vyzerá, že máme miesto 4-4-4-4 znakov prehodené skupinky na 4-3-4-5, teda asi zlé časové pásmo zima/leto +1h v poslednej skupinke písmen?
Skupina troch znakov je ohraničená pomlčkami s časmi 8:40 - 8:57. Pre posun o hodinu skôr z písmen poslednej skupiny to vychádza len na m alebo j, keďže majú 9:44 a 9:51 a vôjdu tak jediné do rozsahu.

FLAG{3YAG-m2rb-KWoZ-LwWj}
FLAG{3YAG-2rbj-KWoZ-LwWm}

Práca s dátumami mi nikdy neprišla jednoduchá. V tomto prípade som sa síce zaobišiel bez pythona, do budúcna si však musím tento jazyk osvojiť pre jeho rozšírenie (aj v CTF).

Žiadne komentáre:

Zverejnenie komentára