Java代码审计入门篇
原文来自:https://bbs.ichunqiu.com/thread-42149-1-1.html
本期斗哥带来Java代码审计的一些环境和工具准备。
Java这个语言相对于PHP来说还是比较复杂的,所以一开始接触到Java源码审计的时候会遇到一些关于环境和配置上一些困难,本文记录斗哥在开始去审计Java代码的一些准备,希望能够帮助到刚入门的新手朋友们。
0×00 Java环境说明
1. 安装Java环境

安装完成后默认的安装目录:

环境变量的配置,环境变量配置主要是告诉我们自己的电脑Java安装完后几个关键文件的路径。
●JDK的安装路径在哪里?——JAVA_HOME

●JDK命令文件位置(bin文件夹路径)——PATH

●类库文件的位置(lib文件夹路径)—— CLASSPATH

2. 运行Java程序
Java的代码要执行前是需要事先编译的,编译器先将Java源文件编译成二进制的文件,而进一步解析器在解析成二进制的文件。
HelloWorld.java

一般java源码文件没有办法像PHP或者Python那样直接解析,所以不借助IDE的话,我们需要通过javac这个命令去进行编译。

编译完后得到.class相应的字节码文件,这是可以用java直接解析。


3. Java反编译
由于很多时候我们得到并不是java的源码文件,而是.class结尾的字节码文件。所以我们需要一个工具帮助我们反编译看到相应的源代码。那这里推荐大家使用jd-gui这个工具。

下图描述的上述过程:

4. Java平台
刚接触到Java平台的时候,会接触到几个名词,如JavaSE,JavaEE,JavaME等等名词。简单来理解:
●Java SE —— 开发电脑软件
●Java EE —— 开发WEB网站
●Java ME —— 开发手机软件
Java SE(Java Platform,Standard Edition):允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE 包含了支持 Java Web 服务开发的类。
Java EE(Java Platform,Enterprise Edition):Java EE 是在 Java SE 的基础上构建的,它提供 Web 服务、组件模型、管理和通信 API,用来实现企业级的面向服务体系结构和 Web 2.0应用程序。
Java ME(Java Platform,Micro Edition): 为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。
0×02 Tomcat的安装和使用
1. Tomcat简介
常见的Java服务器:Tomcat、Weblogic、JBoss、GlassFish、Jetty、Resin、IBM Websphere等。
Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问等很多的场合下被普遍使用,是开发和调试JSP程序的首选。
Tomcat安装包可以去到apache的官网去下载,解压后它的目录结构如下:

2.Tomcat部署源码
例子:javapms公测版源码部署


将ROOT目录重命名为javapms1.4拷贝到tomcat的webapp目录下。

访问http://127.0.0.1:8080/javapms1.4/


0×03 IDE的使用
1.选择适合自己的IDE
个人比较习惯使用IDEA,除了IDEA以外,myeclipse也是一个不错的选择。

2.IDEA上部署WEB项目
因为在IDE上部署项目的话,更方便我们去调试代码和代码跟踪。
例子:javapms公测版源码部署。



配置运行程序,如配置tomcat。







安装:http://127.0.0.1:8080/javapms1.4

3.IDEA上调试功能
这里主要用到的是IDEA的Debug功能。

下面是几个调试中会用到的几个快捷键:
●F7 ,进入下一步,如果当前断点是一个方法,进入方法体。
●F8 ,进入下一步,但不会进入方法体内。
●Alt+Shift+F7 , 进入下一步,如果当前断点是一个方法,方法还有方法则循环进入。
●Shift+F8 ,跳出到下一个断点,也可以按F9来实现。
●Drop Frame ,当进入一个方法体想回退到方法体外可以使用该键。
0×04 Maven——项目管理和构建工具
1.Maven介绍
Maven是一种自动构建项目的方式,可以帮助我们自动从本地和远程仓库拉取关联jar包。
官网地址:

maven 远程仓库:

之前审计的WebGoat就是使用Maven部署起来的。

2.Maven部署项目
在IDEA上部署Maven项目,这边以部署WebGoat源码为例。










3.部署完成,运行与排错
如果使用旧版的IDEA,那么程序的兼容性比较高,直接运行StartWebGoat.java文件,该文件的完整路径是\WebGoat\webgoat-server\src\main\java\org\owasp\webgoat\StartWebGoat.java
然而不幸的是,使用最新版的IDEA报错了,报错信息如下:

这是由于WebGoat的代码编写不够规范,在项目下的pom.xml没有规范书写程序包com.beust.jcommander.internal的相关信息,需要补充完整,补充如下:

pom.xml的完整路径为\WebGoat\webgoat-container\pom.xml。
修改完成后,重新运行StartWebGoat.java,如果没有出错,看到控制台的Spring Boot运行界面说明编译和运行成功。
访问http://127.0.0.1:8080/WebGoat,即可看到WebGoat的登陆页面。
0×05 Fortify 代码审计工具
Fortify是一个自动化的代码审计工具,斗哥这里使用的是在FreeBuf上前辈们的2009年版的一款,框架是eclipse+规则库。而他的收费版本费用实在惊人。2009版的规则库都比较早期了,它允许我们自定义规则,所以可以在这个版本基础上增加审计规则。

有问题大家可以留言哦也欢迎大家到春秋论坛中来耍一耍 >>>点击跳转
Java代码审计入门篇的更多相关文章
- java基础——入门篇
整体大纲图 1.认识java 核心知识点:JVM.搭建Java开发环境.java的发展史.java特点.java程序类型.垃圾收集器.J2SE下载和安装.环境变量的配置和测试.以及简单的开发工具的使用 ...
- Java JNI 入门篇——传递数组与修改数组
这里不在重复JavaJNI 的开发过程了,不熟悉的同学请参考:Java JNI HelloWorld 直接上主要代码: ArrayJNI.Java package com.example.jni; p ...
- java安全入门篇之接口验签
文章大纲 一.加密与验签介绍二.接口验签实操三.项目源码下载 一.加密与验签介绍 大多数公共网络是不安全的,一切基于HTTP协议的请求/响应(Request or Response)都是可以被 ...
- 《java第一季之入门篇》的想法
学习java也有一段时间了,但是考虑到自己现在上课.复习.考试等耗费很多时间,感觉没有静下心来的时间去写一个长期的博客.计划今年7月1号开始写一套关于java的入门篇博客文章,入门篇计划这样--涵盖j ...
- Java代码审计连载之—SQL注入
前言近日闲来无事,快两年都没怎么写代码了,打算写几行代码,做代码审计一年了,每天看代码都好几万行,突然发现自己都不会写代码了,真是很DT.想当初入门代码审计的时候真是非常难,网上几乎找不到什么java ...
- Java入门篇(六)——类和对象
写到这里终于写到了入门篇的最后一个知识点了.类和对象是Java中经常被提到的两个词汇,实际上可以将类看作对象的载体,它定义了对象所具有的功能.Java是面向对象的语言,因此掌握类与对象是学习Java语 ...
- Java工程师学习指南 入门篇
Java工程师学习指南 入门篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都 ...
- Java基础-SSM之Spring MVC入门篇
Java基础-SSM之Spring MVC入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Spring MVC简介 1>.什么是Spring MVC 答:Sprin ...
- Java基础-SSM之Spring快速入门篇
Java基础-SSM之Spring快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java ...
随机推荐
- ORM的相关操作
http://www.cnblogs.com/liwenzhou/p/8660826.html
- 数据库设计,表与表的关系,一对一。One-To-One(1)
如何处理对象间one-to-ont的映射关系:one-to-one: 处理一对一关联的方式有两种: 1.主键关联使用主键关联处理一对一的关系. 主键关联不需要额外的表字段:两行是通过这种一对一关系相关 ...
- Sql Server数据库之四个增删改查
一.数据库的增删改查 1.新建数据库 create database students on primary ( name="students_data",--主数据文件的逻辑名 ...
- java导出excel模板数据
Java导出excel数据模板,这里直接贴代码开发,流程性的走下去就是步骤: String[] colName=new String[]{"期间","科目代码" ...
- R语言-地图
1.maps包的map()函数 >map('world', fill = TRUE,col=heat.colors(10)) #世界地图 >map("state", i ...
- 原生js实现Base64编码解码
注:ie10+ var str = window.btoa("liusong"); console.log(str); var s = window.atob("bGl1 ...
- 项目(四)DHCP服务配置
DHCP是由Internet工作任务小组设计开发的,专门用于为TCP/IP网络中的计算机自动分配TCP/IP参数的协议. 使用DHCP可以减少管理员的工作量,避免IP地址冲突,当网络修改IP地址网段时 ...
- wdk驱动开发的特点
本文介绍WDK开发的一些特点.与应用层开发的差异性,不能混为一谈. 一.函数的调用点 在内核编程中,一个函数往往有多个调用点,而应用层中一个函数一般只在main里面有调用点.内核函数调用点一般在: 1 ...
- wampserver安装
WampServer的下载地址:https://sourceforge.net/projects/wampserver 安装教程:https://jingyan.baidu.com/article/4 ...
- input date 支持placeholder属性
第一种解决方法:IE,火狐浏览器,不支持input date的日历功能,火狐支持日历功能 ie,火狐,谷歌显示placeholder属性 css代码 #dateofday:before{ col ...