地址来源于乌云知识库,作者z_zz_zzz

0x01 任意文件下载

web.xml的配置:

    <servlet>
<description></description>
<display-name>DownloadAction</display-name>
<servlet-name>DownloadAction</servlet-name>
<servlet-class>com.oboi.DownloadAction.DownloadAction</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>DownloadAction</servlet-name>
<url-pattern>/DownloadAction</url-pattern>
</servlet-mapping>

  

其中的servlet类要换下。类的代码如下:

public class DownloadAction extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String rootPath = this.getServletContext().getRealPath("/");
String filename = request.getParameter("filename");
if (filename == null)
filename = "";
filename = filename.trim();
InputStream inStream = null;
byte[] b = new byte[1024];
int len = 0;
try {
if (filename == null) {
return;
}
// 读到流中
// 本行代码未对文件名参数进行过滤,存在任意文件下载漏洞
//如果有指定后缀名好像也不能截断
inStream = new FileInputStream(rootPath + "/" + filename);
// 设置输出的格式
response.reset();
response.setContentType("application/x-msdownload"); response.addHeader("Content-Disposition", "attachment; filename=\""
+ filename + "\"");
// 循环取出流中的数据
while ((len = inStream.read(b)) > 0) {
response.getOutputStream().write(b, 0, len);
}
response.getOutputStream().close();
inStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

  

JDK1.5-1.7存在0x00导致的文件名截断问题,与操作系统无关。冒号在Windows环境会导致文件名截断问题,与JAVA无关。

如果要修复这种漏洞的话,可以用文章中讲的。

在生成File对象后,使用getCanonicalPath获取当前文件的真实路径,判断文件是否在允许下载的目录中,若发现文件不在允许下载的目录中,则拒绝下载。

if (!pathname.getCanonicalPath().startsWith(rootPath)){
System.out.println("禁止目录穿越下载");
}

  

这里记录一下,如果是JAVA写的网站遇到任意文件读取,怎么扩大战果?下载配置文件,有框架的话下载框架配置文件。比如:WEB-INF/web.xml

通过下载的配置文件去读class文件,然后通过jad反编译出代码来。

读到servlet-class 以后通过WEB-INF/classes/com/oboi/DownloadAction/DownloadAction.class 就能读到类了。

0x02 恶意文件上传

未完待续。。。

JAVA常见安全问题复现的更多相关文章

  1. Error与Exception的区别,Java常见异常Execption总结

    错误和异常的区别(Error vs Exception) 错误和异常的区别(Error vs Exception) 今天面试问了这样一个问题,"Error" 和 "Exc ...

  2. Java常见的几种内存溢出及解决方法

    Java常见的几种内存溢出及解决方法[情况一]:java.lang.OutOfMemoryError:Javaheapspace:这种是java堆内存不够,一个原因是真不够(如递归的层数太多等),另一 ...

  3. asp.net MVC 常见安全问题及解决方案

    asp.net MVC 常见安全问题及解决方案 一.CSRF (Cross-site request forgery跨站请求伪造,也被称为“one click attack”或者session rid ...

  4. Java常见Exception物种

    Java常见Exception物种 1.ClassNotFoundException 2.IOException 3.NoSuchFieldException 4.NoSuchMethodExcept ...

  5. java常见文件操作

    收集整理的java常见文件操作,方便平时使用: //1.创建文件夹 //import java.io.*; File myFolderPath = new File(str1); try { if ( ...

  6. java常见字符串的操作

    /** * java常见字符串的操作 */ public class Test7 { public static void main(String args[]){ StringBuffer sBuf ...

  7. (转载)RESTful架构风格下的4大常见安全问题

    转载自<RESTful架构风格下的4大常见安全问题>,作者:马伟 伴随着RESTful架构风格的大量应用微服务架构的流行,一些本来难以察觉到的安全问题也逐渐开始显现出来.在我经历过的各种采 ...

  8. Java常见开发规范

    1 背景概述 作为程序员大军中的一员,笔者工作于沈阳数通畅联软件技术有限公司.在任职工作的第一天就听领导强调开发规范的重要性,但是笔者心里还想为什么开发规范是最重要的,难道是不应该是实现功能就万事大吉 ...

  9. Java常见异常(Runtime Exception )小结(转)

    原文链接:Java常见异常(Runtime Exception )小结 Java异常体系结构呈树状,其层次结构图如图 1所示:           本文重在Java中异常机制的一些概念.写本文的目的在 ...

随机推荐

  1. 2019.01.19 bzoj5457: 城市(线段树合并)

    传送门 线段树合并菜题. 题意简述:给一棵树,每个节点有bib_ibi​个aia_iai​民族的人,问对于每棵子树,子树中哪个民族的人最多,有多少人. 思路: 直接上线段树合并,边合并边维护答案即可. ...

  2. 2018.12.15 codeforces 920F. SUM and REPLACE(线段树)

    传送门 线段树入门题. 给你一个序列:支持区间修改成自己的约数个数,区间求和. 实际上跟区间开方一个道理. 2的约数个数为2,1的约数个数为1,因此只要区间的最大值小于3就不用修改否则就暴力修改. 因 ...

  3. 2018.11.14 uoj#34. 多项式乘法(fft)

    传送门 NOIpNOIpNOIp爆炸不能阻止我搞oioioi的决心 信息技术课进行一点康复训练. fftfftfft板题. 代码: #include<bits/stdc++.h> usin ...

  4. Java数据类型的转换

    Java数据类型,从小到大排序 byte ,short ,int ,long ,float, double,char 1.小数据类型转换大的数据类型,自动转换 int a = 3; double b ...

  5. maven下的经常使用的几个元素以及依赖范围的一些知识

    maven的pom.xml配置文件里面的project根节点下的dependencies可以包含一个或者多个dependency元素,以声明一个或者多个依赖,每个依赖都可以包含的元素: groupId ...

  6. asp.net 重写URL方法和封装好的DLL

    .net 重写URL方法和封装好的DLL URL重写方法DLL(2.0)

  7. 深入浅出javascript(六)对象

    2.为什么一切皆对象? <Javascript权威指南>解释了这个问题,问题的起源在于,如果typeof(字符串)返回的是string,并非object,那么为什么字符串也是对象呢? 简单 ...

  8. Java异常、事件、多线程

    异常     捕捉异常,以便程序继续执行,同时可进行异常处理使程序更加健壮.     Throwble类,派生Exception类和Error类,Exception类供应用程序用,Error类系统保留 ...

  9. (转)VmWare下安装CentOS6图文安装教程

    转自:http://www.cnblogs.com/seesea125/archive/2012/02/25/2368255.html 第一次使用VmWare和CentOS6,中间遇到不少问题,记性不 ...

  10. zend studio 修改字体大小

    第一步:进入设置窗口    windows -> preferences第二步:进入修改字体的选项卡.    General -> Appearance -> Colors and ...