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

2019 年 8 月 29 日 FreeBuf

0x00前言

我在最近的学习过程中,发现PowerShell的命令的历史记录有时会包含系统敏感信息,例如远程服务器的连接口令,于是我对PowerShell的的历史记录功能做了进一步研究,总结一些渗透测试中常用导出历史记录的方法,结合利用思路,给出防御建议。

0x01简介

本文将要介绍以下内容:

1.两种PowerShell的命令的历史记录

2.导出PowerShell的命令历史记录的方法

3.防御建议

0x02两种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的进程,向进程发送键盘消息,内容为:whoami

2.导出历史记录命令如下:

Get-History|export-csv $env:temp"\history.csv"
 
   

其中需要考虑字符”|”,”$”和”””,模拟键盘输入时需要加Shift键

的这里实现方法的英文先使用keybd_event按下Shift键,再用PostMessage发送按键的字母,最后抬起两个按键

开源的测试代码:

https://github.com/3gstudent/Homework-of-C-Language/blob/master/SendKeyboardMessageToPowershell(Get-History).cpp.cpp)

代码实现了搜索指定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://www.microsoft.com/en-us/download/details.aspx?id=51451

注:安装前需要关闭的PowerShell进程可以通过命令行实现隐蔽安装,命令如下:

msiexec /q /i PackageManagement_x64.msi
 
   

安装成功后,在控制面板的已安装程序列表(控制面板\程序\程序和功能)有显示:Package Management Preview - x64

Package Management Preview - x64的注册表路径为HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall{57E5A8BB-41EB-4F09-B332-B535C5954A28}

只需要删除这个注册表项及子项即可实现在已安装程序列表中隐藏

删除注册表项的CMD命令:

reg delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{57E5A8BB-41EB-4F09-B332-B535C5954A28} /f
 
   

(2)安装PSReadLine

通过安装-模块命令安装:

Install-Module -Name PSReadLine
 
   

弹出提示:

NuGet provider is required to continuePowerShellGet requires NuGet provider version '2.8.5.201' or newer to interactwith NuGet-based repositories. The NuGet provider must be available in'C:\Program Files\PackageManagement\ProviderAssemblies' or'C:\Users\Administrator\AppData\Local\PackageManagement\ProviderAssemblies'.You can also install the NuGet provider by running 'Install-PackageProvider-Name NuGet -MinimumVersion 2.8.5.201 -Force'. Do you want PowerShellGet toinstall 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 -ForceSet-PSRepository -Name PSGallery -InstallationPolicy TrustedInstall-Module -Name PSReadLine
 
   

(3)使用

所有的PowerShell命令将会保存在固定位置:%appdata%\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt

查看命令的历史记录:

Get-Content (Get-PSReadlineOption).HistorySavePath
 
   

清除命令的历史记录:

Remove-Item (Get-PSReadlineOption).HistorySavePath
 
   

2.利用思路

获得了视窗系统的访问权限,首先查看Powershell的版本,如果是第5版,通过柯林斯读取文件%appdata%\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt获得历史记录。如果系统是Powershell v3或Powershell v4,可通过命令行安装PSReadLine,这样就能记录后续系统所有的Powershell命令。

0x03防御建议

如果使用高版本的视窗系统,如Win10,默认PowerShell的版本为5.0,会记录PowerShell的的命令,建议定时进行清除,位置:%appdata%\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt

清除命令的历史记录:

Remove-Item (Get-PSReadlineOption).HistorySavePath
 
   

对于低版本的Powershell的,如果命令中包含敏感信息(如远程连接的口令),需要及时清除,命令为:Clear-History

对于cmd.exe的,如果命令中包含敏感信息(如远程连接的口令),需要及时清除,命令为:doskey /reinstall

ps:本文介绍了两种PowerShell的命令的历史记录,总结常用导出历史记录的方法,结合利用思路,给出防御建议。

*本文作者:线性代数lzh,转载请注明来自FreeBuf.COM

精彩推荐


登录查看更多
0

相关内容

【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【Manning新书】现代Java实战,592页pdf
专知会员服务
99+阅读 · 2020年5月22日
Python导论,476页pdf,现代Python计算
专知会员服务
259+阅读 · 2020年5月17日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
116+阅读 · 2020年5月10日
【2020新书】如何认真写好的代码和软件,318页pdf
专知会员服务
63+阅读 · 2020年3月26日
【资源】100+本免费数据科学书
专知会员服务
107+阅读 · 2020年3月17日
深度神经网络实时物联网图像处理,241页pdf
专知会员服务
76+阅读 · 2020年3月15日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
用 Python 开发 Excel 宏脚本的神器
私募工场
26+阅读 · 2019年9月8日
通过Docker安装谷歌足球游戏环境
CreateAMind
11+阅读 · 2019年7月7日
免费!Google Colab现已支持英伟达T4 GPU
新智元
5+阅读 · 2019年4月25日
已删除
将门创投
18+阅读 · 2019年2月18日
如何编写完美的 Python 命令行程序?
CSDN
5+阅读 · 2019年1月19日
如何用GitLab本地私有化部署代码库?
Python程序员
9+阅读 · 2018年12月29日
如何运用Python建一个聊天机器人?
七月在线实验室
17+阅读 · 2018年1月23日
Joint Monocular 3D Vehicle Detection and Tracking
Arxiv
8+阅读 · 2018年12月2日
Arxiv
5+阅读 · 2018年4月22日
Arxiv
6+阅读 · 2018年2月7日
VIP会员
相关VIP内容
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【Manning新书】现代Java实战,592页pdf
专知会员服务
99+阅读 · 2020年5月22日
Python导论,476页pdf,现代Python计算
专知会员服务
259+阅读 · 2020年5月17日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
116+阅读 · 2020年5月10日
【2020新书】如何认真写好的代码和软件,318页pdf
专知会员服务
63+阅读 · 2020年3月26日
【资源】100+本免费数据科学书
专知会员服务
107+阅读 · 2020年3月17日
深度神经网络实时物联网图像处理,241页pdf
专知会员服务
76+阅读 · 2020年3月15日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
相关资讯
用 Python 开发 Excel 宏脚本的神器
私募工场
26+阅读 · 2019年9月8日
通过Docker安装谷歌足球游戏环境
CreateAMind
11+阅读 · 2019年7月7日
免费!Google Colab现已支持英伟达T4 GPU
新智元
5+阅读 · 2019年4月25日
已删除
将门创投
18+阅读 · 2019年2月18日
如何编写完美的 Python 命令行程序?
CSDN
5+阅读 · 2019年1月19日
如何用GitLab本地私有化部署代码库?
Python程序员
9+阅读 · 2018年12月29日
如何运用Python建一个聊天机器人?
七月在线实验室
17+阅读 · 2018年1月23日
Top
微信扫码咨询专知VIP会员