0x01 环境搭建
参考一下文章
文章环境配置:
Tomcat 8.5.56
Java 1.8

0x02 搭建中的问题
IDEA启动配置问题
Tomcat 参数
Configurations-Server-VM options:
-Dlog4j.debug
-Dfile.encoding=UTF-8
-noverify
-Xbootclasspath/p:Agent.jar(后续检测的代理jar包)
-javaagent:Agent.jar(后续检测的代理jar包)
Configurations-Deployment:
注意war包和Application context
依赖版本问题:
参考的文章2019,时间久远,有部分依赖已经升级
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
<version>9.7.1</version>
</dependency>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm-commons</artifactId>
<version>9.7.1</version>
</dependency>
同时,修改文章中的TestClassVistor
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.Label;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.commons.AdviceAdapter;
public class TestClassVisitor extends ClassVisitor implements Opcodes {
public TestClassVisitor(ClassVisitor cv) {
super(Opcodes.ASM5, cv);
}
@Override
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions);
if ("start".equals(name) && "()Ljava/lang/Process;".equals(desc)) {
System.out.println(name + "方法的描述符是:" + desc);
return new AdviceAdapter(Opcodes.ASM5, mv, access, name, desc) {
@Override
public void visitCode() {
// 这里使用 AdviceAdapter 自身的方法来操作字节码,避免直接使用 mv
this.visitVarInsn(ALOAD, 0);
this.visitFieldInsn(GETFIELD, "java/lang/ProcessBuilder", "command", "Ljava/util/List;");
this.visitMethodInsn(INVOKESTATIC, "cn/org/javaweb/agent/ProcessBuilderHook", "start", "(Ljava/util/List;)Z", false);
Label l1 = new Label();
this.visitLabel(l1);
super.visitCode();
}
};
}
return mv;
}
}
0x03 项目结构
整个项目分为2个部分,agent和Web。
agent 后续计划是用于检测攻击,修改字节码等操作。
Web搭建一些CVE漏洞的靶场,目前已经加入了log4j2。
Web中目前不计划加入的:
XSS、SQL,
原因:
1、通过检测是否调用JDBC类或者其他数据库相关类,来阻断SQL注入,不现实;
2、如果是通过正则去判断,不如使用WAF;
3、个人认为RASP不能作为唯一的防护手段:a.Rasp做不了抗D,b.目前通过正则等方式拦截SQL、信息泄露误报率较高,且数量较多,从修改策略、服务器负载等方面来看waf更容易,c.如果防护设备出现问题,waf的部署调整更容易。
├─agent
│ ├─src
│ │ ├─main
│ │ │ ├─java
│ │ │ │ └─cn
│ │ │ │ └─JavaStudy
│ │ │ │ └─Rasp
│ │ │ │ └─agent
│ │ │ └─resources
│ │ │ └─META-INF
│ │ └─test
│ │ └─java
│ └─target
│ ├─classes
│ │ ├─cn
│ │ │ └─JavaStudy
│ │ │ └─Rasp
│ │ │ └─agent
│ │ └─META-INF
│ ├─generated-sources
│ │ └─annotations
│ ├─generated-test-sources
│ │ └─test-annotations
│ ├─maven-archiver
│ ├─maven-status
│ │ └─maven-compiler-plugin
│ │ ├─compile
│ │ │ └─default-compile
│ │ └─testCompile
│ │ └─default-testCompile
│ └─test-classes
└─Web
├─src
│ ├─main
│ │ ├─java
│ │ │ └─Cve
│ │ │ └─Log4j2
│ │ ├─resources
│ │ └─webapp
│ │ └─WEB-INF
│ └─test
│ └─java
└─target
├─archive-tmp
├─classes
│ └─Cve
│ └─Log4j2
├─generated-sources
│ └─annotations
├─maven-archiver
├─maven-status
│ └─maven-compiler-plugin
│ ├─compile
│ │ └─default-compile
│ └─testCompile
│ └─default-testCompile
└─web
├─META-INF
└─WEB-INF
├─classes
│ └─Cve
│ └─Log4j2
└─lib