从代码层面理解java的00截断漏洞

我们一般研究00截断,基本都是使用php来写的漏洞demo。所以都知道php下的00截断是和move_upload_file()这个函数有关,和这个漏洞相关的CVE有两个(CVE-2006-7243和CVE-2015-2348 )。但搜索了网上的资料,发现对java的00截断的研究文章甚少。 完全搞不清在java中这个漏洞是和系统,中间件,jdk,还是代码有关?如果是代码问题,那是某个函数存在漏洞呢,还是代码逻辑问题?

一、实验编码

在系统c盘根目录新建两个文件,分别如下:

1.1 test.jsp

1
this is test.jsp

1.2 test.txt

1
this is test.txt

1.3 测试代码

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
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URLDecoder;

public class T1 {
public static void main(String[] args) {
String path = "c://test.jsp"+URLDecoder.decode("%00")+"test.txt";
System.out.println("filename:" + path);
File file = new File(path);
System.out.print("content:");
try {
FileInputStream fis = new FileInputStream(file);
int b;
while((b = fis.read()) != -1){
System.out.print((char)b);
}
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

二、测试结果

jdk1.6.0

jdk1.7.0

jdk1.7.08(最新的1.7版本)

三、总结

目前的结论:java的00截断和jdk版本有关。漏洞更深层次的原理,我会在代码审计完,进行更细致的研究,到时候更新文章。最后感谢公司背影表哥的指点。