Featured image of post 【Java代码审计】Java基础-变量

【Java代码审计】Java基础-变量

文章共1157字

0x00 简单介绍

一个简单的java程序

1
2
3
4
5
6
7
8
public class Main {  
    public static void main(String[] args) {  
        System.out.printf("Hello and welcome!");  
        for (int i = 1; i <= 5; i++) {  
            System.out.println("i = " + i);  
        }  
    }  
}

代码审计的核心是什么?

1
2
3
4
1. 关键函数 sink点
   	Runtime.getRuntime.exec(Cmd) ->Cmd 是否可控输入点
	过滤web的流程 
2. 通读代码逻辑漏洞越权登录绕过支付漏洞等等

熟悉项目:

1
2
3
Spring 
Tomcat
Stust2

代码审计的工具:

1
2
Codeql 学习成本很大
https://codeql.github.com/codeql-standard-libraries/java/

敏感函数快速审计工具:

1
2
semgrep  
https://semgrep.dev/docs/

0x01 变量

数字型

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
整数
    byte b;// -128~127  -2(7)~2(7)-1 8
    short s;// 短整型 -32768~32767 -2(15)~2(15)-1 16
    int i; // 整型 -2(31)~2(31)-1 32
    long l; // 长整型 -2(63)~2(63)-1
小数浮点数
    float f;// 点精度 6-7 +-3.4*10(38)
    double d;// 双精度15-16 +-1.8*10(308)
字符型
    char c; // a b c d
     ascii 0-65535
布尔型
    boolean bool; // 真或假 0 或 1 流程控制阶段

变量的声明于初始化

1
2
格式 数据类型 变量名声明格式
String b = "S"; 

初始化

1
2
3
4
5
6
赋值
方法1int i = 10; // 声明时变量i赋值10
方法2
	int j;
    j=20;   // 先声明后赋值
在同一作用域中变量名不能重复

基本数据类型的转换

1
2
3
4
5
6
7
8
9
自动转换隐式转换
		小范围-大范围
		数据类型是有范围的
		byte->short->int->long->float->d
		char->int->long->float->d
强制转换显式转换
		int i=10;
      		byte b = (byte) i;
      		ps:溢出,布尔类型除外

输入输出

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
System.out.print("Hello World!"); // 没有换行符的
System.out.println("Hello World!"); // 有换行符的
	// %s 字符串
    // %d 整数
    // %f 浮点
    // %c 字符
    // %b 布尔
    // %% 输出百分号
System.out.printf("%8d hello\n",1); //   默认右对齐
System.out.printf("%-8d hello\n",1); // 左对齐

作业

编写一个输出姓名,年龄的程序
姓名:xxx 年龄:xxx
输入两次,输出要对其,年龄可能所10 也 2,姓名可能三个字符也可能是4个字
代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import java.util.Scanner;  
  
public class Main {  
    public static void main(String[] args) {  
        Scanner scanner = new Scanner(System.in);  
  
        // 输入第一个人的信息  
        System.out.print("请输入第一个人的姓名:");  
        String name1 = scanner.nextLine();  
        System.out.print("请输入第一个人的年龄:");  
        int age1 = scanner.nextInt();  
        scanner.nextLine(); // 消耗换行符  
  
        // 输入第二个人的信息  
        System.out.print("请输入第二个人的姓名:");  
        String name2 = scanner.nextLine();  
        System.out.print("请输入第二个人的年龄:");  
        int age2 = scanner.nextInt();  
  
        // 输出结果,使用格式化对齐  
        System.out.println("\n输出结果:");  
        // %-6s 表示左对齐,占6个字符位置  
        // %d 表示整数  
        System.out.printf("姓名:%-6s 年龄:%d%n", name1, age1);  
        System.out.printf("姓名:%-6s 年龄:%d%n", name2, age2);  
  
        scanner.close();  
    }  
}

输出:

1
2
3
4
5
6
7
8
请输入第一个人的姓名li
请输入第一个人的年龄18
请输入第二个人的姓名wang
请输入第二个人的年龄12

输出结果
姓名li           年龄18
姓名wang   年龄12
站点已运行计算中...