Приложение A. Решения сформулированных задач
Содержание
Данное Приложение содержит решения определённых задач, представленных в главах с Главы 1 по Главу 5. Обратите внимание, что здесь решаются не все поставленные задачи, так как это не служит разделом для жульничества с головоломкой кроссворда. Вместо этого он предоставляет ключевую инсайдерскую информацию, которая может потребоваться для решения поставленных задач.
Я твёрдо убеждён что единственный путь для того чтобы стать профессионалом в Pthon, PowerShell или сочетании обоих состоит в практике. Один из лучших способов состоит в определении некой задачи которую вы бы желали решить, а затем начать с малого и попробовать различные подходы. После этого, и только после этого, объединять ваши эксперименты в сценарии или программы. Обратите внимание, что это слегка противоречит традиционным подходам каскадной или даже спиральной разработки в информатике; тем не менее, я полагаю что это наилучший способ обучения. В одной из своих первых книг Python Forensics я отчеканил фразу "тестируй, потом кодируй". На тот момент это очень соответствовало разработке сценариев Python и я уверен, что она всё ещё соответствует сегодня и PowerShell и Python.
Для упрощения применения в качестве справочного материала данное Приложение разбито в соответствии с главами.
Замечание | |
---|---|
Только не забывайте, что многие из CmdLet и сценариев требуют полномочий Администратора. |
PS C:\WINDOWS\system32> Get-Help Get-ChildItem
NAME
Get-ChildItem
SYNOPSIS
Gets the files and folders in a file system drive.
Пример A: Поиск всех файлов с расширением .jpg
PS C:\WINDOWS\system32> get-childitem C:\ -include *.jpg -recurse -force
Directory: C:\$Recycle.Bin\S-1-5-21-1545112040-36671619-2396729391-1001\$RPSE7Z2\PHOTO
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 8/15/2018 11:24 AM 26903 20-fake-images-10.jpg
-a---- 8/15/2018 11:21 AM 37651 20-fake-images-20.jpg
-a---- 8/21/2018 8:01 AM 85175 area-51-caller.jpg
-a---- 7/30/2018 9:52 AM 177153 jets.JPG
-a---- 8/21/2018 7:54 AM 137948 moon_landing_hoax.jpg
Directory: C:\IMAGES
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 9/3/2018 2:58 PM 624744 Biking.jpg
-a---- 9/3/2018 2:58 PM 1224201 Castle.JPG
-a---- 9/3/2018 2:58 PM 446759 Cat.jpg
-a---- 9/3/2018 2:58 PM 600630 Deutchland.JPG
-a---- 9/3/2018 2:58 PM 304930 Disney.jpg
-a---- 9/3/2018 2:58 PM 96831 dscn0011.jpg
-a---- 9/3/2018 2:58 PM 98012 kinderscout.jpg
-a---- 9/3/2018 2:58 PM 252607 Munich.JPG
-a---- 9/3/2018 2:58 PM 3352190 Rome.jpg
-a---- 9/3/2018 2:58 PM 91329 Turtle.jpg
-a---- 9/3/2018 2:58 PM 5459 zzz.jpg
--- OUTPUT truncated for brevity
Пример B: Отображение скрытых системных файлов в c:\
PS C:\WINDOWS\system32> Get-ChildItem c:\ -Hidden -System
Directory: C:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d--hs- 2/5/2017 1:43 PM $Recycle.Bin
d--hs- 1/21/2019 4:09 PM Config.Msi
d--hsl 2/5/2017 1:49 PM Documents and Settings
d--hs- 1/31/2019 8:05 AM System Volume Information
-arhs- 7/16/2016 7:43 AM 384322 bootmgr
-a-hs- 7/16/2016 7:43 AM 1 BOOTNXT
-a-hs- 1/12/2019 11:32 AM 5111406592 hiberfil.sys
-a-hs- 1/28/2019 11:20 PM 3891789824 pagefile.sys
-a-hs- 12/20/2018 1:56 PM 268435456 swapfile.sys
Пример A: Получение основных сетевых настроек TCP
PS C:\WINDOWS\system32> Get-Help Get-NetIPConfiguration
NAME
Get-NetIPConfiguration
SYNOPSIS
Gets IP network configuration .
PS C:\WINDOWS\system32> Get-NetIPConfiguration -All
InterfaceAlias : Ethernet
InterfaceIndex : 8
InterfaceDescription : Realtek PCIe GBE Family Controller
NetProfile.Name : hoz 3
IPv4Address : 192.168.86.36
IPv6DefaultGateway :
IPv4DefaultGateway : 192.168.86.1
DNSServer : 192.168.86.1
Пример B: Получение текущих соединений TCP
PS C:\WINDOWS\system32> Get-NetTCPConnection | select-object -Property LocalAddress, RemoteAddress, State, OwningProcess | Format-Table -AutoSize
LocalAddress RemoteAddress State OwningProcess
------------ ------------- ----- -------------
192.168.86.36 52.114.74.45 Established 67228
192.168.86.36 162.125.9.3 CloseWait 132676
192.168.86.36 162.125.33.7 CloseWait 132676
192.168.86.36 23.32.68.10 Established 156280
192.168.86.36 162.125.18.133 Established 132676
192.168.86.36 162.125.34.129 Established 132676
192.168.86.36 162.125.9.7 CloseWait 132676
192.168.86.36 17.249.156.16 Established 17736
192.168.86.36 162.125.18.133 Established 132676
192.168.86.36 162.125.9.4 CloseWait 132676
192.168.86.36 162.125.34.129 Established 132676
Пример A: Проверка текущего состояния локального межсетевого экрана
PS C:\WINDOWS\system32> get-Help Get-NetFirewallProfile
NAME
Get-NetFirewallProfile
SYNOPSIS
Displays settings that apply to the per-profile configurations of the Windows Firewall with Advanced Security.
PS C:\WINDOWS\system32> Get-NetFirewallProfile | Select-Object -Property Enabled, Profile
Enabled Profile
------- -------
True Domain
True Private
True Public
В Главе 2 будут применяться CmdLet Start и Stop Transcript для перехвата резульатов всех выводов CmdLet. Получаемые в результате стенографические записи добавлены в конце данного раздела с неким выбором CmdLet для наших экспериментов.
PS C:\WINDOWS\system32> Get-Help Start-Transcript
NAME
Start-Transcript
SYNOPSIS
Creates a record of all or part of a Windows PowerShell session to a text file.
PS C:\WINDOWS\system32> Get-Help Stop-Transcript
NAME
Stop-Transcript
SYNOPSIS
Stops a transcript.
PS C:\WINDOWS\system32> Start-Transcript c:\PS\Transcript\transcript.txt
Transcript started, output file is c:\PS\Transcript\transcript.txt
Отметим: некоторые выводы сокращены.
**********************
Windows PowerShell transcript start
Start time: 20190131103013
Username: PYTHON-3\cdhsl
RunAs User: PYTHON-3\cdhsl
Configuration Name:
Machine: PYTHON-3 (Microsoft Windows NT 10.0.17134.0)
Host Application: C:\WINDOWS\system32\WindowsPowerShell\v1.0\PowerShell_ISE.exe
Process ID: 41620
PSVersion: 5.1.17134.407
PSEdition: Desktop
PSCompatibleVersions: 1.0, 2.0, 3.0, 4.0, 5.0, 5.1.17134.407
BuildVersion: 10.0.17134.407
CLRVersion: 4.0.30319.42000
WSManStackVersion: 3.0
PSRemotingProtocolVersion: 2.3
SerializationVersion: 1.1.0.1
**********************
Transcript started, output file is c:\PS\Transcript\transcript.txt
PS C:\WINDOWS\system32> Get-Process -ComputerName .
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
470 22 6524 4172 2,793.53 55708 2 AdobeCollabSync
277 14 2692 708 0.17 56592 2 AdobeCollabSync
238 23 9184 156 0.23 113824 2 ApplePhotoStreams
487 28 19988 22108 14.77 79164 2 ApplicationFrameHost
166 9 2084 100 0.09 183548 2 AppVShNotify
157 8 1804 104 0.02 209908 0 AppVShNotify
375 25 5160 2020 2.17 17736 2 APSDaemo
1326 74 232108 173896 43.73 184112 2 POWERPNT
1210 86 380800 397292 240.86 41620 2 powershell_ise
941 91 50384 10732 3.31 166420 0 PRSvc
307 28 31836 1536 1.66 35788 2 QtWebEngineProcess
339 15 6444 3408 3.67 12076 2 RAVBg64
345 16 7136 4712 3.77 23452 2 RAVBg64
608 26 19760 1536 0.41 6204 0 RealSenseDCM
0 14 1388 20876 167.36 96 0 Registry
449 20 10136 15780 9.48 17068 2 RemindersServer
220 9 1792 160 0.08 2540 0 RtkAudioService64
126 9 1532 528 0.05 216496 2 rundll32
120 7 1384 6136 0.00 168436 0 SearchFilterHost
1241 83 57844 54048 52.45 161508 0 SearchIndexer
52 3 504 208 0.41 452 0 smss
220 13 5172 5116 223.39 2364 0 svchost
155 9 1696 424 0.09 14104 2 TUAutoReactivator64
329 20 6296 11196 851.14 60052 2 TuneUpUtilitiesApp64
1167 34 46024 32928 12,831.14 63708 0 TuneUpUtilitiesService64
198 14 2912 3408 2.34 4224 0 UploaderService
124 8 1400 316 0.52 15912 2 WavesSvc64
110 8 2624 156 0.02 4380 0 WavesSysSvc64
156 10 1528 36 0.02 724 0 wininit
247 10 2668 2528 3.83 215952 2 winlogon
1754 91 200124 197816 415.23 67228 2 WINWORD
343 14 15340 13956 971.41 15696 0 WmiPrvSE
308 17 11144 8360 319.03 24228 0 WmiPrvSE
237 10 2348 764 0.61 132372 0 WUDFHost
PS C:\WINDOWS\system32> Get-Process -Name chrome
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
271 21 18696 24180 0.16 26420 2 chrome
338 32 94600 49056 11.11 48132 2 chrome
273 25 36024 36760 1.44 76284 2 chrome
558 30 92792 67576 26.75 83340 2 chrome
343 30 80788 87232 3.33 88260 2 chrome
266 19 13940 17364 0.08 115852 2 chrome
142 11 1988 7236 0.05 128480 2 chrome
356 33 97140 78868 3.84 128952 2 chrome
223 10 2100 7252 0.03 148004 2 chrome
267 21 21652 23044 0.25 149520 2 chrome
273 22 26964 26600 0.30 197144 2 chrome
1639 73 115292 110896 64.27 214792 2 chrome
PS C:\WINDOWS\system32> Get-MpThreat
None reported
PS C:\WINDOWS\system32> get-service | where-object {$_.Status -eq "Stopped"}
Status Name DisplayName
------ ---- -----------
Stopped AJRouter AllJoyn Router Service
Stopped ALG Application Layer Gateway Service
Stopped AppIDSvc Application Identity
Stopped AppReadiness App Readiness
Stopped AppVClient Microsoft App-V Client
Stopped AppXSvc AppX Deployment Service (AppXSVC)
Stopped AssignedAccessM... AssignedAccessManager Service
Stopped AxInstSV ActiveX Installer (AxInstSV)
Stopped BcastDVRUserSer... GameDVR and Broadcast User Service_...
Stopped BDESVC BitLocker Drive Encryption Service
Stopped BluetoothUserSe... Bluetooth User Support Service_2a63...
Stopped Bonjour Service Bonjour Service
Stopped CaptureService_... CaptureService_2a637185
Stopped CertPropSvc Certificate Propagation
Stopped ssh-agent OpenSSH Authentication Agent
Stopped SupportAssistAgent Dell SupportAssist Agent
Stopped svsvc Spot Verifier
Stopped swprv Microsoft Software Shadow Copy Prov...
Stopped TermService Remote Desktop Services
Stopped TieringEngineSe... Storage Tiers Management
Stopped TrustedInstaller Windows Modules Installer
Stopped tzautoupdate Auto Time Zone Updater
Stopped UevAgentService User Experience Virtualization Service
Stopped UmRdpService Remote Desktop Services UserMode Po...
Stopped upnphost UPnP Device Host
Stopped VacSvc Volumetric Audio Compositor Service
Stopped vds Virtual Disk
Stopped VMAuthdService VMware Authorization Service
Stopped vmicguestinterface Hyper-V Guest Service Interface
Stopped vmicheartbeat Hyper-V Heartbeat Service
Stopped vmickvpexchange Hyper-V Data Exchange Service
Stopped vmicrdv Hyper-V Remote Desktop Virtualizati...
Stopped vmicshutdown Hyper-V Guest Shutdown Service
Stopped vmictimesync Hyper-V Time Synchronization Service
Stopped vmicvmsession Hyper-V PowerShell Direct Service
Stopped vmicvss Hyper-V Volume Shadow Copy Requestor
Stopped VMnetDHCP VMware DHCP Service
Stopped VMUSBArbService VMware USB Arbitration Service
Stopped VMware NAT Service VMware NAT Service
PS C:\WINDOWS\system32> Get-Location
Path
----
C:\WINDOWS\system32
PS C:\WINDOWS\system32> Set-Location C:\PS
PS C:\PS> Test-NetConnection
ComputerName : internetbeacon.msedge.net
RemoteAddress : 13.107.4.52
InterfaceAlias : Ethernet
SourceAddress : 192.168.86.36
PingSucceeded : True
PingReplyDetails (RTT) : 24 ms
PS C:\PS> Get-Disk | Format-List *
DiskNumber : 0
PartitionStyle : GPT
ProvisioningType : Fixed
OperationalStatus : Online
HealthStatus : Healthy
BusType : SATA
UniqueIdFormat : FCPH Name
OfflineReason :
UniqueId : 5000039751D8A26D
AdapterSerialNumber :
AllocatedSize : 1000203837440
BootFromDisk : True
FirmwareVersion : AX0P3D
FriendlyName : TOSHIBA MQ01ABD100
Guid : {ea267102-e3e3-4a17-b349-e5e0161bc012}
IsBoot : True
IsClustered : False
IsHighlyAvailable : False
IsOffline : False
IsReadOnly : False
IsScaleOut : False
IsSystem : True
LargestFreeExtent : 1048576
Location : Integrated : Adapter 0 : Port 0
LogicalSectorSize : 512
Manufacturer :
Model : TOSHIBA MQ01ABD100
Number : 0
NumberOfPartitions : 6
Path : \\?\scsi#disk&ven_toshiba&prod_mq01abd100#4&1b6d0cbc&0&000000#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}
PhysicalSectorSize : 4096
SerialNumber : X6LSTAXNT
Signature :
Size : 1000204886016
PSComputerName :
CimClass : ROOT/Microsoft/Windows/Storage:MSFT_Disk
CimInstanceProperties : {ObjectId, PassThroughClass, PassThroughIds, PassThroughNamespace...}
CimSystemProperties : Microsoft.Management.Infrastructure.CimSystemProperties
DiskNumber : 2
PartitionStyle : MBR
ProvisioningType : Fixed
OperationalStatus : Online
HealthStatus : Healthy
BusType : USB
UniqueIdFormat : Vendor Specific
OfflineReason : USBSTOR\DISK&VEN_DYMO&PROD_PNP&REV_1.00\7&347EDADD&0&15314622032011&0:PYTHON-3
AdapterSerialNumber :
AllocatedSize : 4193792
BootFromDisk : False
FirmwareVersion : 1.00
FriendlyName : DYMO PnP
Guid :
IsBoot : False
IsClustered : False
IsHighlyAvailable : False
IsOffline : False
IsReadOnly : False
IsScaleOut : False
IsSystem : False
LargestFreeExtent : 0
Location : Integrated : Adapter 0 : Port 0
LogicalSectorSize : 512
Manufacturer : DYMO
Model : PnP
Number : 2
NumberOfPartitions : 1
PhysicalSectorSize : 512
SerialNumber : 15314622032011
Signature : 6975421
Size : 4193792
PSComputerName :
CimClass : ROOT/Microsoft/Windows/Storage:MSFT_Disk
CimInstanceProperties : {ObjectId, PassThroughClass, PassThroughIds, PassThroughNamespace...}
CimSystemProperties : Microsoft.Management.Infrastructure.CimSystemProperties
PS C:\PS> Stop-Transcript
**********************
Windows PowerShell transcript end
End time: 20190131103856
**********************
PS C:\WINDOWS\system32> Get-ChildItem c:\ -Hidden -System#
# Simple file Inventory Script
#
# Function to convert size values to human readable
function GetMBSize($num)
{
$suffix = "MB"
$MB = 1048576
$num = $num / $MB
"{0:N2} {1}" -f $num, $suffix
}
# Set Report Title
$rptTitle = "File Inventory"
# Get the current date and tme
$rptDate=Get-Date
# Set the target Directory and parameters
$targetDirectory = "c:\"
# Create HTML Header Section
$Header = @"
<style>
TABLE {border-width: 1px; border-style: solid; border-color: black; border-collapse: collapse;}
TD {border-width: 1px; padding: 3px; border-style: solid; border-color: black;}
</style>
<p>
<b> $rptTitle</b>
<p>
<b> Date: $rptDate </b>
<p>
<b> Target: $targetDirectory </b>
<p>
"@
# Provide script output for user
Write-Host "Create Simple File Inventory"
$dir = Get-ChildItem $targetDirectory -File
# Create an empty array to hold values
$outArray = @()
# Loop through each file found
foreach ($item in $dir)
{
# create and object to hold item values from separate CmdLets
$tempObj = "" | Select "FileName", "Attribute", "Size", "HashValue"
# Get the fullname including path
$fullName = $item.FullName
# Get the attributes assoicated with this file
$attributes = $item.Attributes
$size = GetMBSize($item.Length)
# Generate the SHA-256 Hash of the file
$hashObj = Get-FileHash $fullName -ErrorAction SilentlyContinue
# Get just the Hash Value
$hashValue = $hashObj.Hash
# if hash value could not be generated set to Not Available
if ([string]::IsNullOrEmpty($hashValue))
{
$hashValue = "Not Available"
}
# Fill in the tempObj
$tempObj.FileName = $fullName
$tempObj.Attribute = $attributes
$tempObj.Size = $size
$tempObj.HashValue = $hashValue
# Add the tempObj to the outArray
$outArray += $tempObj
# Clear the output array
$tempObj = $null
}
$outArray | ConvertTo-Html -Head $Header -Property FileName, Attribute, Size, HashValue |
Out-File test.html
#$outArray | ConvertTo-Html | out-file test.html
Write-Host "Script Completed"
Write-Host "test.html created"
PS C:\PS> C:\PS\testInventory.ps1
Create Simple File Inventory
Scan the C: Drive for Hidden and System Files Only
Script Completed
test.html created
PS C:\PS>
Замечание | |
---|---|
Добавляя в команду Get-Childitem параметр -System вы должны получить системные файлы из каталога c:\ directory . |
Замечание | |
---|---|
Изменив $targetFolder своего сценария и добавляя в команду Get-Childitem параметр -Recurse,вы способны обработать всё устройство c:\. Запуская свой сценарий для папки c:\PS\ с включённым параметром -Recurse мы получаем приводимый ниже результат (обрезанный для краткости). |
Замечание | |
---|---|
Изменив переменную $MB на $KB = 1024, вы затем можете воспроизвести результаты в килоБайтах, изменить свой сценарий и попробовать его. |
Кроме того, воспользовавшись CmdLet Invoke-Command вы можете расширить данный пример для сбора файла инвентаризации удалённых систем.
Выполнение удалённых команд PowerShell непосредственно из Python:
import subprocess
runningProcess = subprocess.check_output("PowerShell -Executionpolicy byPass
-Command Invoke-Command -ComputerName PLUTO -Credential PLUTO\Remote-Admin -ScriptBlock {Get-Process}")
print runningProcess.decode()
Образец выполнения
import subprocess
runningServices = subprocess.check_output("PowerShell -Executionpolicy byPass
-Command Invoke-Command -ComputerName PLUTO -Credential PLUTO\Remote-Admin -ScriptBlock {Get-Service}")
print runningServices.decode()
import subprocess
ipConfig = subprocess.check_output("PowerShell -Executionpolicy byPass
-Command Invoke-Command -ComputerName PLUTO -Credential PLUTO\Remote-Admin -ScriptBlock { Get-NetIPConfiguration -All}")
print ipConfig.decode()
Изучение предоставленных в Главе 6 сценариев предоставит все необходимые методы, требующиеся для завершения и развития данной задачи. Я призываю вас выполнить её самостоятельно.