您当前的位置:中国生活健康网新闻正文

如何获得PowerShell命令的历史记录

2019-08-29 11:14:31  阅读:2971+ 作者:黑客与极客

原标题:怎么取得PowerShell指令的前史记载

0×00前语

我在最近的学习过程中,发现PowerShell的指令的前史记载有时会包括体系灵敏信息,例如长途服务器的衔接口令,所以我对PowerShell的的前史记载功用做了进一步研讨,总结一些浸透测验中常用导出前史记载的办法,结合运用思路,给出防护主张。

0×01简介

本文即将介绍以下内容:

1.两种PowerShell的指令的前史记载

2.导出PowerShell的指令前史记载的办法

3.防护主张

0×02两种Powershell指令的前史记载

记载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原创奖赏方案,未经许可制止转载

责任编辑:

“如果发现本网站发布的资讯影响到您的版权,可以联系本站!同时欢迎来本站投稿!