找回密码
 立即注册
首页 业界区 业界 伏魔挑战赛-ASP/ASP.NET赛道10+绕过样本思路分享 ...

伏魔挑战赛-ASP/ASP.NET赛道10+绕过样本思路分享

左优扬 2025-8-10 13:08:11
前言

24年年底的时候参加了一下阿里云的第四届伏魔挑战赛,本着学习一下.NET的想法玩的ASP/ASP.NET赛道。但是当时一直没空,等到活动最后一天才抽出时间测试。一个晚上提交了15个绕过样本,重复了12个太惨了这就是最后一天提交的结果,后来看榜单应该都是重复的Ivan1ee师傅的,专门研究.NET的还是强。第三届我也玩了提交17个样本重复5个通过12个,这篇文章挑部分绕过样本进行思路分析。
ASP

asp样本分享下面两个,绕过思路为前导零、双重编码。
前导零

asp支持将代码utf-7编码,于是构造出下面shell样本进行测试。
  1. [/code]可能因为是很久以前的公开手法直接被杀,注意到codepage=65000推测这里65000可能采用数字类型进行解析,在某些语言里有一种技巧在解析数字时会丢弃前导零。比如065000会被解析为65000。于是将codepage写为065000发现也可以成功解析,多次尝试以后发现最多写成0000065000可以识别成功。猜测原因是Long类型最长为十位数字,在解析之前对大于十位的数字直接报错或者不解析。于是提交如下样本成功绕过伏魔引擎。
  2. [code]
复制代码
双重编码

asp支持将代码VBScript.Encode编码。
  1. [/code][align=center] 1.png [/align]
  2. [size=5]ASP.NET[/size]
  3. aspx的样本第三届的时候比较容易绕过,有很多污点源都没打标这类就不写了。主要写两类特殊语法、危险方法替换。
  4. [size=3]特殊语法[/size]
  5. 以前看别人绕jsp学到的使用注释//加\u000a换行进行来绕过
  6. [code]
复制代码
测试发现可以解析但是伏魔引擎检测为webshell查阅资料发现使用\u2029段落分隔符也可以起到换行的作用。测试可以解析并绕过。
  1. [/code]aspx支持下面这种语法,将多个之间的代码相加。
  2. [code]
复制代码
测试发现无法绕过,在%>[/code]这个样本毫无疑问被杀,经过FUZZ发现关键点在于ActiveXObject和WScript.Shell不能同时出现。于是写出5种不同的绕过方式。
使用unescape("%57%53%63%72%69%70%74%2e%53%68%65%6c%6c")代替WScript.Shell
  1. [/code]在Jscript中使用GetObject创建WScript.Shell对象
  2. [code]
复制代码
在C#中使用GetTypeFromCLSID来创建WScript.Shell对象
  1. [/code]在C#中使用GetTypeFromProgID来创建WScript.Shell对象
  2. [code]
复制代码
在VB中使用CreateObject来创建WScript.Shell对象
  1. [/code]在VB中使用DynamicObject动态调用Start方法
  2. [code]
复制代码
总结

相对于jsp/php样本而言asp/asp.net样本的绕过还是相对比较简单,本文仅对提交的部分样本进行分析,主要绕过技术总结如下。

  • 编码混淆:多层编码增加检测复杂度
  • 语法变形:利用语言特性实现功能等价替换
  • 反射替代:通过委托、动态调用等方式避开反射检测
  • 跨语言技巧:在 C#、VB、JScript 间灵活运用不同特性
asp.net支持多种语言如VB/C#/JScript这也变相增加了webshell的查杀难度。因为仅仅是测试引擎的绕过,实战中还需使用上述手法结合Unicode编码、特殊Unicode字符、命名空间别名、反射、注释等手段进行webshell混淆以达到最佳效果。
如需上述样本进行测试研究可关注本公众号漫漫安全路,回复aspx得到下载地址。
本文仅供安全研究和学习使用,由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用本人负责,公众号及文章作者不为此承担任何责任。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册