跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

穿透提示——获取Powershell命令的历史记录


轩辕三官

推荐的帖子

0x00 前言

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

0x01 简介

本文将介绍以下内容:

两个Powershell命令的历史

一种导出Powershell命令历史的方法

辩护建议

0x02 两种Powershell命令的历史记录

有两种方法可以记录Powershell命令的历史,可以分别使用Get-History和Get-PSReadlineOption读取。

1、Get-History

参考文件:

https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Core/Get-History?view=powershell-3.0

默认情况下支持Powershell v2和更高版本

可以记录在当前会话中输入的命令,这些命令不会在多个Powershell进程之间共享。Powershell进程退出后,所有记录将被自动清除。

1. 常用命令

获取关于历史的完整信息:

Get-History |格式-列表-属性*

包括:

身份

命令行

执行状态

StartExecutionTime

EndExecutionTime

测试下图

2-1.png

删除所有历史记录:

清除历史记录

按ID号删除命令:

清除-历史记录-Id 3

2. 利用思路

得到了一个Windows系统的权限,在后台找到了Powershell进程,想读取Powershell进程的历史。

(1)Powershell进程无法接收键盘输入命令。

例如,Powershell加载一个在后台运行的脚本:Powershell -ep bypass -f 1.ps1

此时,您不能向Powershell进程发送键盘消息。这时,你可以通过读取进程的命令行参数来获得有用的信息。开放源代码:

https://github . com/3g student/home-of-C-Language/blob/master/getprocesscommandline . CPP

该代码可以读取指定进程的命令行参数,并通常获得有用的信息。

(2)Powershell进程可以接收键盘输入命令。

您可以在这里模拟发送键盘消息和导出历史。

方案实现思路:

通过遍历枚举所有窗口。

通过GetWindowThreadProcessId从窗口(HWND)获取PID。

对比PID,找到满足条件的窗口。

向合格的窗口发送键盘消息(PostMessage)。

计划详情:

1.虚拟键码

每个键盘输入信息对应一个虚拟键码。

参考资料:

https://docs . Microsoft . com/en-us/windows/desktop/input dev/virtual-key-codes

需要模拟键盘按下和键盘抬起两种操作,开源测试代码:

https://github . com/3g student/home-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/3g student/home-of-C-Language/blob/master/SendKeyboardMessageToPowershell(Get-History)。卡片打印处理机(Card Print Processor的缩写)

该代码实现了搜索指定pid的过程,并向该过程发送一个键盘消息,内容为:get-history | export-CSV $ env:temp ' \ history . CSV '

3. 补充:查看cmd.exe的历史记录

该命令如下所示:

多键/小时

空:

doskey/重新安装

您也可以通过发送键盘信息来导出cmd.exe的命令历史。

2、Get-PSReadlineOption

参考文件:

https://docs . Microsoft . com/en-us/powershell/module/PS readline/?view=powershell-5.1

默认Powershell v5支持

只有在安装了getting-psreadlineoption后,才能使用V3和Powershell v3。

安装后,所有Powershell命令的历史记录将保存在同一位置,并且可以随时查看。

1. Powershell v3和Powershell v4的安装和使用

以64位系统为例。安装方法如下:

(1)安装PowerShellGet

下载:

https://www.microsoft.com/en-us/download/details.aspx?id=51451

注:

安装前需要关闭Powershell进程。

隐藏安装可以通过命令行实现,命令如下:

msiexec /q /i包管理_x64.msi

安装成功后,在控制面板的已安装程序列表(控制面板\程序\程序和功能)有显示:软件包管理预览- x64

可以通过删除对应的注册表项进行隐藏,更多细节可参考《渗透基础——获得当前系统已安装的程序列表》

软件包管理预览- x64的注册表路径为HKEY _ LOCAL _ MACHINE \ SOFTWARE \ Microsoft \ Windows \当前版本\ Uninstall \ { 57 E5 A8 bb-41EB-4f 09-B332-b 535 c 5954 a 28 }

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

删除注册表项的煤矿管理局命令:

注册删除HKLM \软件\微软\ Windows \当前版本\卸载\ { 57 E5 A8 bb-41EB-4f 09-B332-b535c 5954 a 28 }/f

(2)安装PSReadLine

通过安装模块命令安装

安装模块名称PSReadLine

弹出提示:

需要努格特提供程序才能继续

PowerShellGet需要努格特提供程序版本' 2.8.5.201 '或更高版本才能进行交互

基于努格特的存储库NuGet提供程序必须在中可用

c:\ Program Files \ package management \ provider assemblies '或

c:\ Users \ Administrator \ AppData \ Local \ package management \ provider assemblies .

您也可以通过运行"安装软件包提供者"来安装努格特提供程序

-Name nu get-最低版本2.8.5.201-Force .你想让PowerShellGet进入

现在安装并导入努格特提供程序吗?

是否暂停?]帮助(默认为y’):

需要再次输入Y进行安装

如果需要实现一键安装,可以先安装努杰,再安装PSReadLine,完整命令如下:

install-package provider-Name NuGet-最低版本2.8.5.201-Force

设置-PS存储库-命名PS图库-安装策略可信

安装模块名称PSReadLine

(3)使用

所有powershell命令将会保存在固定位置:% appdata % \ Microsoft \ Windows \ PowerShell \ PS readline \ console host _ history。文本文件(textfile)

查看命令的历史记录:

Get-Content(Get-psreadline选项).历史保存路径

清除命令的历史记录:

remove-Item(Get-psreadline选项).历史保存路径

2. 利用思路

获得了Windows操作系统操作系统系统的访问权限,首先查看Powershell版本,如果是v5,可通过读取文件% appdata % \ Microsoft \ Windows \ PowerShell \ PS readline \ console host _ history。文本文件(textfile)获得历史记录

如果系统是Powershell v3或Powershell v4,可通过命令行安装PSReadLine,这样就能记录后续系统所有的Powershell命令

0x03 防御建议

如果使用高版本的Windows操作系统操作系统系统,如Win10,默认Powershell版本为5.0,会记录Powershell的命令,建议定时进行清除,位置:% appdata % \ Microsoft \ Windows \ PowerShell \ PS readline \ console host _ history。文本文件(textfile)

清除命令的历史记录:

remove-Item(Get-psreadline选项).历史保存路径

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

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

0x04 小结

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

留下回复

链接帖子
意见的链接
分享到其他网站

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...