Alternativa dataströmmar (ADS)

Praktisk men grundläggande tillämpning av ADS i CTF- och Pentesting-miljöer

Vad är Alternate Data Streams (ADS)?

Det är en funktion som lades till i New Technology File System, även känt som NT File System (NTFS), för att öka jämförbarheten med Macintosh Hierarchical File System (HFS), i lekmannatermer är det något som gjorde det lättare att använda filerna på både Mac (Apple) och PC (Windows).

Hur fungerar det och varför ska jag bry mig om det?

När du sparar något i en fil, t.ex. en .txt-fil, lagrar du vanligtvis innehållet i filen (ascii-text) i en dataström som Windows känner igen som standardströmmen, så nästa gång du öppnar filen kommer du att få tillgång till samma ström för att se dina data.

Som exempel

Om jag skapar en .txt-fil med Notepad på mitt Windows-system och sparar den i en fil (secret.txt) så kan jag varje gång jag öppnar den se mina data.

Secret.txt Notepad

Secret.txt Notepad

Men vad händer om det finns mer data i filen som du inte känner till?

Det är där alternativa dataströmmar kommer in i bilden.

Jag kommer att använda cmd.exe (Command Prompt) för att visa exemplen för att göra det lättare för folk att förstå CLI (Command Line Interface), men samma resultat kan uppnås med Power Shell också.

Så när jag använder Command Prompt för att visa innehållet i min katalog kan jag se min hemlighet.txt och filens storlek är 33 bytes.

dir
kommandoprompt

kommandoprompt

Det här ser ut som en normal fil, men vad händer om jag lägger till /r till mitt kommando?

dir /r
Command prompt dir /r

Command prompt dir /r

Nu kan vi se en annan fil i samma katalog med samma prefix som vår ursprungligen skapade secret.txt men med suffixet evil.txt där $DATA talar om för oss att detta är en ström av typen $DATA.

Om vi lägger till /r i vårt kommando kan vi se att båda filerna finns i samma katalog men vi kan bara se secret.txt på vårt skrivbord, vi kan också se skillnaden i filstorlek medan vår secret.txt-fil fortfarande är 33 bytes är vår secret.txt:evil.txt 74 vilket är mer än 2 gånger vår secret.txt.

Varför att jämföra utdata från båda kommandona.

# First Command
dir# Second Command
dir /r
Kommando Prompt dir och dir /r

Kommando Prompt dir och dir /r

I det här kan vi se informationen av båda kommandona mer exakt vi kan se förändringarna i ett mer tydligt perspektiv.

  • Båda utgångarna säger att det bara finns 2 filer i katalogen och ger oss samma storlek, det beror på att secret.txt och secret.txt:evil.txt är samma fil inte olika filer utan datan lagras i separata strömmar.
  • Det totala utrymmet som används i katalogen och som är tillgängligt i systemet är fortfarande detsamma.

Låt oss se innehållet i båda tillsammans:

När vi tittar på dem båda kan vi se att innehållet är olika, vi kan också se skillnaden i filernas namn, vilket ger oss idén om att vi enkelt kan lagra information i ett alternativt dataström för flera olika ändamål. Dataströmmar följer en grundläggande namnkonvention i NTFS-filsystemet som är FileName:StreamName:StreamType, vilket innebär att det fullständiga namnet på secret.txt i NTFS-filsystemet skulle vara secret.txt::$DATA

En alternativ metod för att visa båda utan att öppna dem i Anteckningar skulle vara:

# View secret.txt
type secret.txt# View Alternate Data Stream
more < secret.txt:evil.txt

.