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