伏魔挑战赛-ASP/ASP.NET赛道10+绕过样本思路分享
前言24年年底的时候参加了一下阿里云的第四届伏魔挑战赛,本着学习一下.NET的想法玩的ASP/ASP.NET赛道。但是当时一直没空,等到活动最后一天才抽出时间测试。一个晚上提交了15个绕过样本,重复了12个太惨了这就是最后一天提交的结果,后来看榜单应该都是重复的Ivan1ee师傅的,专门研究.NET的还是强。第三届我也玩了提交17个样本重复5个通过12个,这篇文章挑部分绕过样本进行思路分析。
ASP
asp样本分享下面两个,绕过思路为前导零、双重编码。
前导零
asp支持将代码utf-7编码,于是构造出下面shell样本进行测试。
可能因为是很久以前的公开手法直接被杀,注意到codepage=65000推测这里65000可能采用数字类型进行解析,在某些语言里有一种技巧在解析数字时会丢弃前导零。比如065000会被解析为65000。于是将codepage写为065000发现也可以成功解析,多次尝试以后发现最多写成0000065000可以识别成功。猜测原因是Long类型最长为十位数字,在解析之前对大于十位的数字直接报错或者不解析。于是提交如下样本成功绕过伏魔引擎。
双重编码
asp支持将代码VBScript.Encode编码。
ASP.NET
aspx的样本第三届的时候比较容易绕过,有很多污点源都没打标这类就不写了。主要写两类特殊语法、危险方法替换。
特殊语法
以前看别人绕jsp学到的使用注释//加\u000a换行进行来绕过
测试发现可以解析但是伏魔引擎检测为webshell查阅资料发现使用\u2029段落分隔符也可以起到换行的作用。测试可以解析并绕过。
aspx支持下面这种语法,将多个之间的代码相加。
测试发现无法绕过,在%>这个样本毫无疑问被杀,经过FUZZ发现关键点在于ActiveXObject和WScript.Shell不能同时出现。于是写出5种不同的绕过方式。
使用unescape("%57%53%63%72%69%70%74%2e%53%68%65%6c%6c")代替WScript.Shell
在Jscript中使用GetObject创建WScript.Shell对象
在C#中使用GetTypeFromCLSID来创建WScript.Shell对象
在C#中使用GetTypeFromProgID来创建WScript.Shell对象
在VB中使用CreateObject来创建WScript.Shell对象
在VB中使用DynamicObject动态调用Start方法
总结
相对于jsp/php样本而言asp/asp.net样本的绕过还是相对比较简单,本文仅对提交的部分样本进行分析,主要绕过技术总结如下。
[*]编码混淆:多层编码增加检测复杂度
[*]语法变形:利用语言特性实现功能等价替换
[*]反射替代:通过委托、动态调用等方式避开反射检测
[*]跨语言技巧:在 C#、VB、JScript 间灵活运用不同特性
asp.net支持多种语言如VB/C#/JScript这也变相增加了webshell的查杀难度。因为仅仅是测试引擎的绕过,实战中还需使用上述手法结合Unicode编码、特殊Unicode字符、命名空间别名、反射、注释等手段进行webshell混淆以达到最佳效果。
如需上述样本进行测试研究可关注本公众号漫漫安全路,回复aspx得到下载地址。
本文仅供安全研究和学习使用,由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用本人负责,公众号及文章作者不为此承担任何责任。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]