原标题:怎么取得PowerShell指令的前史记载
0×00前语
我在最近的学习过程中,发现PowerShell的指令的前史记载有时会包括体系灵敏信息,例如长途服务器的衔接口令,所以我对PowerShell的的前史记载功用做了进一步研讨,总结一些浸透测验中常用导出前史记载的办法,结合运用思路,给出防护主张。
0×01简介
本文即将介绍以下内容:
0×02两种Powershell指令的前史记载1.两种PowerShell的指令的前史记载
2.导出PowerShell的指令前史记载的办法
3.防护主张
记载PowerShell的指令的前史记载有两种办法,别离柯林斯运用Get-History状语从句:Get-PSReadlineOption读取
1,获取-前史
参阅文档:https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Core/Get-History?view=powershell-3.0默许Powershell v2及以上支撑能够记载当时会话中输入的指令,多个PowerShell的进程之间不同享,Powershell的进程退出后主动铲除一切记载
1.常用指令
取得前史记载的完好信息:
Get-History | Format-List -Property *
包括:
ID指令行ExecutionStatusStartExecutionTimeEndExecutionTime测验如下图:
删去一切前史记载:
Clear-History
按ID号删去指令:
Clear-History -Id 3
2.运用思路
取得了一台视窗体系的权限,发现后台有PowerShell的进程,想要读取PowerShell的进程中的前史记载(1)Powershell的进程无法接纳键盘输入指令例如PowerShell的加载了一个在后台运转的脚本:Powershell -ep bypass -f 1.ps1此刻无法向Powershell的进程发送键盘音讯,这时能够经过读取进程的指令行参数取得有用的信息,开源代码:https://github.com/3gstudent/Homework-of-C-Language/blob/master/GetProcessCommandLine.cpp代码完成了读取指定进程的指令行参数,一般能够取得有用的信息(2)Powershell的进程能够接纳键盘输入指令这儿能够模仿发送键盘音讯,导出前史记载程序完成思路:
经过遍历枚举一切窗口
经过GetWindowThreadProcessId从窗口(HWND)取得PID
比较PID,找到契合条件的窗口
向契合条件的窗口发送键盘音讯(PostMessage的)
程序细节:1.虚拟密钥代码每一个键盘输入音讯对应一个虚拟密钥代码参阅资料:https://docs.microsoft.com/en-us/windows/desktop/inputdev/virtual-key-codes需求模仿键盘按下和键盘抬起两个操作,开源的测验代码:https://github.com/3gstudent/Homework-of-C-Language/blob/master/SendKeyboardMessageToPowershell.cpp代码完成了查找指定PID的进程,向进程发送键盘音讯,内容为:whoami2.导出前史记载指令如下:
Get-History|export-csv $env:temp"history.csv"
其间需求考虑字符”|”,”$”和”"”,模仿键盘输入时需求加Shift键
的这儿完成办法的英文先运用keybd_event按下Shift键,再用PostMessage发送按键的字母,最终抬起两个按键
开源的测验代码:
代码完成了查找指定PID的进程,向进程发送键盘音讯,内容为:Get-History|export-csv $env:temp”history.csv”
3.弥补:检查cmd.exe的前史记载
指令如下:
doskey /h
清空:
doskey /reinstall
也能够经过发送键盘音讯的办法导出的cmd.exe的指令前史记载
2,获取-PSReadlineOption
参阅文档:https://docs.microsoft.com/en-us/powershell/module/psreadline/?view=powershell-5.1默许Powershell v5支撑Powershell v3和Powershell v4需求装置Get-PSReadlineOption后才能够运用装置后,一切Powershell的指令的前史记载会保存在同一方位,可随时检查
1. Powershell v3和Powershell v4的装置和运用
这儿以64位体系为例,装置办法如下:
(1)装置PowerShellGet
下载:https:///en-us/download/details.aspx?id=51451
注:装置前需求封闭的PowerShell进程能够经过指令行完成荫蔽装置,指令如下:
msiexec /q /i PackageManagement_x64.msi
装置成功后,在控制面板的已装置程序列表(控制面板程序程序和功用)有显现:Package Management Preview – x64
Package Management Preview – x64的注册表途径为HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionUninstall{57E5A8BB-41EB-4F09-B332-B535C5954A28}
只需求删去这个注册表项及子项即可完成在已装置程序列表中躲藏
删去注册表项的CMD指令:
reg delete HKLMSOFTWAREMicrosoftWindowsCurrentVersionUninstall{57E5A8BB-41EB-4F09-B332-B535C5954A28} /f
(2)装置PSReadLine
经过装置-模块指令装置:
Install-Module -Name PSReadLine
弹出提示:
NuGet provider is required to continue PowerShellGet requires NuGet provider version '2.8.5.201' or newer to interact with NuGet-based repositories. The NuGet provider must be available in 'C:Program FilesPackageManagementProviderAssemblies' or 'C:UsersAdministratorAppDataLocalPackageManagementProviderAssemblies'. You can also install the NuGet provider by running 'Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force'. Do you want PowerShellGet to install and import the NuGet provider now? [Y] Yes [N] No [S] Suspend [?] Help (default is "Y"):
再次需求输入侧Y进行装置
假如需求完成一键装置,能够先装置的NuGet,再装置PSReadLine,完好指令如下:
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force Set-PSRepository -Name PSGallery -InstallationPolicy Trusted Install-Module -Name PSReadLine
(3)运用
一切的PowerShell指令将会保存在固定方位:%appdata%MicrosoftWindowsPowerShellPSReadlineConsoleHost_history.txt
检查指令的前史记载:
Get-Content (Get-PSReadlineOption).HistorySavePath
铲除指令的前史记载:
Remove-Item (Get-PSReadlineOption).HistorySavePath
2.运用思路
取得了视窗体系的拜访权限,首要检查Powershell的版别,假如是第5版,经过柯林斯读取文件%appdata%MicrosoftWindowsPowerShellPSReadlineConsoleHost_history.txt取得前史记载假如体系是Powershell v3或Powershell v4,可经过指令行装置PSReadLine,这样就能记载后续体系一切的Powershell指令
0×03防护主张
假如运用高版别的视窗体系,如Win10,默许PowerShell的版别为5.0,会记载PowerShell的的指令,主张守时进行铲除,方位:%appdata%MicrosoftWindowsPowerShellPSReadlineConsoleHost_history.txt
铲除指令的前史记载:
Remove-Item (Get-PSReadlineOption).HistorySavePath
关于低版别的Powershell的,假如指令中包括灵敏信息(如长途衔接的口令),需求及时铲除,指令为:Clear-History
关于cmd.exe的,假如指令中包括灵敏信息(如长途衔接的口令),需求及时铲除,指令为:doskey /reinstall
ps:本文介绍了两种PowerShell的指令的前史记载,总结常用导出前史记载的办法,结合运用思路,给出防护主张。
*本文原创作者:线性代数lzh,本文属FreeBuf原创奖赏方案,未经许可制止转载
责任编辑: