我们一般研究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.2 test.txt
1.3 测试代码
| 12
 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版本有关。漏洞更深层次的原理,我会在代码审计完,进行更细致的研究,到时候更新文章。最后感谢公司背影表哥的指点。