Java有关的简单练习

好吧确实最近很忙不应该是一个不练习的借口……
为了备战校赛紧急特训java相关

[RoarCTF 2019]Easy Java

好像什么时候打过的题目……但是没继续研究下去
结合题目报错:

1
java.io.FileNotFoundException:{help.docx}

下载出了一些小问题,用get传参有问题,改用post传参
可以下载了。说明这题的洞是任意文件下载。
说明可以通过post传参下载任意文件,然后下载/WEB-INF/web.xml

1
2
3
4
5
/WEB-INF/web.xml    #WEB应用程序配置文件,描述了servlet和其它应用组件配置及命名规则。
/WEB-INF/classes/ #含站点所有的class文件
/WEB-INF/lib/ #存放WEB应用需要的各种JAR文件
/WEB-INF/src/ #源码目录
/WEB-INF/database.properties #数据库配置文件

下载完查看可以找到FlagController类和位置
然后构造payload

1
filename=/WEB-INF/classes/com/wm/ctf/FlagController.class

这个类应该是一般打不开的,用jd-gui开可以得到反编译后的内容
可以找到string flag:

1
String flag = "ZmxhZ3swNjAxYjMxYi0xYThhLTRmMmMtOWZmMi0wYjJmYTdmNTkyMTl9Cg==";

很明显base64解码就可以了

1
flag{0601b31b-1a8a-4f2c-9ff2-0b2fa7f59219}

[BUU]Java逆向解密

下载jar包逆向出来伪代码

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
30
31
32
33
34
import java.util.ArrayList;  
import java.util.Scanner;

public class Reverse {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("Please input the flag :");
String str = s.next();
System.out.println("Your input is :");
System.out.println(str);
char[] stringArr = str.toCharArray();
Encrypt(stringArr);
} //主函数读取输入并加密

public static void Encrypt(char[] arr) {
ArrayList<Integer> Resultlist = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
int result = arr[i] + 64 ^ 0x20; //加密
Resultlist.add(Integer.valueOf(result));
}
int[] KEY = {
180, 136, 137, 147, 191, 137, 147, 191, 148, 136,
133, 191, 134, 140, 129, 135, 191, 65 };
ArrayList<Integer> KEYList = new ArrayList<>();
for (int j = 0; j < KEY.length; j++)
KEYList.add(Integer.valueOf(KEY[j]));
System.out.println("Result:");
if (Resultlist.equals(KEYList)) { //如果加密后与Key相等
System.out.println("Congratulations!");
} else {
System.err.println("Error!");
}
}
}

重点关注加密逻辑:
encrypted = (char_ascii + 64) ^ 32
则解密:(encrypted ^ 32) - 64
可解:This_is_the_flag_!


Java有关的简单练习
https://b1ank799.github.io/2026/04/15/Java有关的简单练习/
Author
blank
Posted on
April 15, 2026
Licensed under