ALPHACON BBSGość · pl
← Protipy

Protipy / PowerShell

gci -r $HOME|gi -s *|where Stream -ne ':$DATA'|select Filename,Stream - znajdź w katalogu domowym użytkownika pliki, które posiadają ukrytą zawartość jako Alternate Data Streams

gci -r $HOME|gi -s *|where Stream -ne ':$DATA'|select Filename,Stream

Wstęp

System plików NTFS udostąpnia mechanizm strumieni ( Alternate Data Streams), dzięki któremu do plików (a także katalogów) mogą być dopisywane różne metadane, a nawet alternatywna zawartość pliku. Nazwa alternatywnego strumienia podawana jest po dwukropku. Realnym przykładem wykorzystania ADS jest strumień o nazwie Zone.Identifier, w którym aplikacje internetowe typu Internet Explorer, Google Chrome, Microsoft Outlook zapisują informacje o tym, że plik pochodzi ze strefy Internet.

ADS jest również bardzo lubiany przez cyberprzestępców - jest świetnym miejscem na ukrycie złośliwego oprogramowania lub fantów zdobytych podczas operacji.

Nasz oneliner pobierze rekursywnie listę plików z katalogu domowego użytkownika ( Get-ChildItem -Recurse $HOME, w skrócie gci -r $HOME), następnie dla każdego pliku i katalogu pobierze wszystkie strumienie ( Get-Item -Stream *, w skrócie gi -s *), po czym odrzuci domyślne strumienie where Stream -ne ':$DATA'. Na koniec wyświetlimy jedynie nazwę pliku i nazwę strumienia.

Jak pracować z ADS?

Niech jeden listing stanie się wart więcej niż tysiąc słów:

PS C:\Users\drg> mkdir ads

    Directory: C:\Users\drg

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       29.09.2020     11:27                ads


PS C:\Users\drg> Set-Content -Path .\ads\hello.txt -Value "hello"
PS C:\Users\drg> Set-Content -Path .\ads\hello.txt -Value "tajne dane" -Stream ukryty
PS C:\Users\drg> Get-ChildItem .\ads\

    Directory: C:\Users\drg\ads

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       29.09.2020     11:28              7 hello.txt

PS C:\Users\drg> Get-ChildItem .\ads\|Get-Item -Stream *|Select Filename,Stream

FileName                   Stream
--------                   ------
C:\Users\drg\ads\hello.txt :$DATA
C:\Users\drg\ads\hello.txt ukryty


PS C:\Users\drg> Get-Content .\ads\hello.txt
hello
PS C:\Users\drg> Get-Content .\ads\hello.txt -Stream ukryty
tajne dane
PS C:\Users\drg> cat .\ads\hello.txt:ukryty
tajne dane
PS C:\Users\drg>

Linki