首页 > 编程语言 >学习笔记-java代码审计-环境搭建+前置知识

学习笔记-java代码审计-环境搭建+前置知识

时间:2022-11-13 08:44:27浏览次数:74  
标签:management java tomcat sun 前置 Dcom jmxremote OPTS 搭建

Java代码审计-环境搭建+前置知识

0x00 中间件

tomcat

因为个人比较矫情,不想在mac搭java的开发环境,就想着有没有本地写代码然后部署到虚拟机上运行。毕竟java是静态语言,在编译阶段就能找出一大部分错误。

remote server

首先使用idea新建一个tomcat remote server

注意mapped as那里填远程主机的tomcat webapps目录的位置。

然后选择idea与服务器连接的方式,这里我选择了sftp,并且新建了一个tomcat用户便于权限控制。

接着进行服务器端的配置,在catalina.sh开头添加如下内容:

export CATALINA_OPTS="-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=10999 #与上图中JMX port的值相同
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=172.16.72.131" #服务器地址

export JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=64695 $JAVA_OPTS" #开放debug端口,用于远程调试。最后一定要加$JAVA_OPTS,否则会覆盖掉前面的配置。

export JAVA_OPTS="-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=10999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false $JAVA_OPTS" 

如果有Error: Password file not found: /xxxx/jmxremote.password,则需要在对应目录创建jmxremote.password

touch jmxremote.password
chmod 600 jmxremote.password #必须严格控制权限,否则tomcat会报错
chown tomcat:tomcat jmxremote.password	#修改文件用户组

这样就可以愉快的把代码上传到服务器部署了,远程调试也没有问题。但是马上就会发现一个很致命的问题——不能热更新。。。搜索半天,找到一个解决方案——jrebel

remote server支持热更新

首先需要在idea中安装jrebel插件,这个网上有很多教程。

根据提示一步一步来就好了,这里很坑的一个点,就是第三步并没有定义jrebel的连接端口,个人的catalina-jrebel.sh内容如下:

#!/bin/bash
export REBEL_HOME="/home/tomcat/jrebel"
export JAVA_OPTS="\"-agentpath:$REBEL_HOME/lib/libjrebel64.so\" -Drebel.remoting_plugin=true -Drebel.remoting_port=8081 $JAVA_OPTS" #一定要定义一个remoting_port
`dirname $0`/catalina.sh $@

之后将catalina.sh相关操作替换为catalina-jrebel.sh就可以了,现在写完代码只要重新编译一次,就会自动同步到服务器上,实现热更新。

0x01 Jsp + Servlet + JDBC

项目依赖使用maven管理,首先来看最基本的java web技术。

一开始会将servlet的相关配置放在web.xml中,代码审计也需要从这个文件入手,对整个项目由一个整体把握。

<servlet>
        <servlet-name>UserServlet</servlet-name>
        <servlet-class>com.bfshop.servlet.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>UserServlet</servlet-name>
  <url-pattern>/user</url-pattern>
</servlet-mapping>

在servlet3之后,可以用注解带代替xml中的配置。

@WebServlet(name = "XssServlet", value = "/xss")
public class XssServlet extends HttpServlet {}

filter

多个filter的拦截顺序和<filter-mapping>的配置顺序有关。这里写一个最简单的demo,将所有页面的编码设为utf-8。

<filter>
  <filter-name>Filter0Encode</filter-name>
  <filter-class>cn.seaii.vulnjsm.filter.Filter0Encode</filter-class>
</filter>
<filter-mapping>
  <filter-name>Filter0Encode</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>
public class Filter0Encode implements Filter { //必须实现Filter接口
    public void destroy() {
    }

  	//由该方法对请求进行拦截
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8"); //设置编码
        chain.doFilter(req, resp); //放行,进入下一个filter或者目标页面
    }

		//private FilterConfig filterConfig;
  	//如果需要读取配置,可获取config参数
    public void init(FilterConfig config) throws ServletException {
				//this.filterConfig = config;
    }
}

同样,在servlet3之后支持以注解的形式来定义servlet。通过注解定义的filter,执行顺序是通过filter类名的首字母来判断的。

@WebFilter(filterName = "Filter0Encode", urlPatterns = {"/*"})
public class Filter0Encode implements Filter {}

listener

0x02 Spring

虽然这些东西已经被翻来覆去的快说烂了,但还是要记录一下。

spring的并不是一个新的web框架,而是作者认为java的框架已经足够多且功能完善,只需要一个“工具”将他们整合起来即可,因此spring诞生了。

Spring最重要的两个思想IOC(DI)和AOP:

  • IOC(DI)即控制反转(依赖注入),这里的控制指的是对类实例化的控制,反转是指通常类的实例化是由开发人员完成的,现在将这个权利给予容器(这里就是spring),告诉容器实例化类的方法,在使用时可以直接调用,降低的代码的耦合度和量,同时也增加了程序的可读性。
  • AOP即面向切面编程,思想与中类似(其实我不知道谁先谁后),简单理解就是将各个模块公用的模块(如打日志)抽出来,也可以降低代码的耦合度。

0x03 Springboot

啥也不说了,springboot天下第一。

点击关注,共同学习!
安全狗的自我修养

github haidragon

https://github.com/haidragon

标签:management,java,tomcat,sun,前置,Dcom,jmxremote,OPTS,搭建
From: https://www.cnblogs.com/haidragon/p/16885374.html

相关文章

  • 学习笔记-java代码审计-表达式注入
    java代码审计-表达式注入0x01漏洞挖掘spelspel表达式有三种用法:注解@value("#{表达式}")publicStringarg;这种一般是写死在代码中的,不是关注的重点。xml<b......
  • 【Javaweb】做一个房产信息管理系统三(src目录的部署工作【三层框架】各个层含义)
    接下来,我打算进行Java文件的部署工作,但实际上为了得到更多的分数,我们还是应该先做页面首先我们需要了解对于Javaweb,src下的目录应该如何部署:(三层架构单独开一篇讲) 那......
  • java.util.List如何用
    起因是这样,我在学习Javaweb,然后就突然有很多类似的语句  这是什么意思呢?让我们一起来解决看看吧!List有序集合(也成为序列),用户可以精确控制列表中每个元素的插入位置。......
  • JAVA注解(Annotation)
    注解(Annotation)什么是注解Annotation的作用:不是程序本身,可以对程序做出解释,这一点和注释(comment)没什么区别。可以被其他程序(比如编译器)读取Annotation的格式:注......
  • 【Javaweb】做一个房产信息管理系统二
    由于我还不太熟练用sql语句写数据库,所以直接用navicate了我们需要新建四个数据表:adimin(超级管理员信息)customer(顾客)property(房产信息)realestate(房产经纪人信息)我发现......
  • 02-类与对象 进行试验--Java字段初始化的规律
    1.类的构造方法(1)“构造方法”,也称为“构造函数”,当创建一个对象时,它的构造方法会被自动调用。构造方法与类名相同,没有返回值。(2)如果类没有定义构造函数,Java编译器......
  • Javascript(笔记32) - ES6特性 - let
    Javascript(笔记32)-ES6ECMA EuropeanComputerManufactureresAssociation,中文名:欧洲计算机制造商协会,目标是评估、开发和认可电信和计算机标准。1994年后改名为 ECM......
  • Head First Java 读书笔记
    第13章:Swing什么是Swing组件?组件(Component),也称作元件。它们就是那些放在界面上与用户进行交互的东西,如Button/List等。事实上,这些GUI组件,都来自于java.swing.JC......
  • rocketmq环境搭建-windows
    最近使用到了rockmetmq,官网上有快速开始的指导,简单记录下自己搭建的过程;1、先到官网下载mq:https://rocketmq.apache.org/download/,我这里下载的是:rocketmq-all-4.9.2-bin-......
  • Head First Java 读书笔记 14章
    第14章:序列化与文件的输入输出对象可以被序列化,也可以展开。对象有状态和行为两种属性,行为存在于类中,而状态存在于个别的对象中。本章将讨论以下两种选项:1.如果只有自己......