精华内容
下载资源
问答
  • 使用 Apache Commons Net 编程,要了解文件或目录的详细信息,例如 FTP 服务器的大小和上次修改日期,可以调用 FTPClient 类的 mlistFile() 方法:FTPFile ftpFile = ftpClient.mlistFile(remoteFilePath);...

    使用 Apache Commons Net 编程,要了解文件或目录的详细信息,例如 FTP 服务器的大小和上次修改日期,可以调用 FTPClient 类的 mlistFile() 方法:

    FTPFile ftpFile = ftpClient.mlistFile(remoteFilePath);

    其中 remoteFilePath 是字符串,表示文件或目录的路径(可以相对于服务器上用户的主目录,也可以是绝对路径)。 如果指定的文件/目录存在,则方法返回 FTPFile 对象,否则返回 null。 然后,可以使用 FTPFile 类的 getter 方法来获取所需的信息:

    String getGroup():获取拥有该文件的组的名称。

    String getName():获取文件的名称。

    String getRawListing():获取文件的服务器详细列表。

    long getSize():获取文件大小(以字节为单位)。

    Calendar getTimestamp():获取时间戳。

    int getType():获取文件的类型。

    String getUser():获取拥有该文件的用户的名称。

    下面是示例程序,该程序登录到 FTP 服务器,然后调用 mlistFile() 方法获取文件的详细信息:

    package org.91tech.ftp;

    import java.io.IOException;

    import org.apache.commons.net.ftp.FTPClient;

    import org.apache.commons.net.ftp.FTPFile;

    /**

    * An example program that demonstrates how to get details of a file and

    * directory from a FTP server using Apache Commnons Net API.

    *

    */

    public class FTPGetFileDetails {

    public static void main(String[] args) {

    String server = "www.myserver.com";

    int port = 21;

    String user = "username";

    String pass = "password";

    FTPClient ftpClient = new FTPClient();

    try {

    ftpClient.connect(server, port);

    ftpClient.login(user, pass);

    // use local passive mode to pass firewall

    ftpClient.enterLocalPassiveMode();

    // get details of a file or directory

    String remoteFilePath = "Java/CodeLib/FTP.rar";

    FTPFile ftpFile = ftpClient.mlistFile(remoteFilePath);

    if (ftpFile != null) {

    String name = ftpFile.getName();

    long size = ftpFile.getSize();

    String timestamp = ftpFile.getTimestamp().getTime().toString();

    String type = ftpFile.isDirectory() ? "Directory" : "File";

    System.out.println("Name: " + name);

    System.out.println("Size: " + size);

    System.out.println("Type: " + type);

    System.out.println("Timestamp: " + timestamp);

    } else {

    System.out.println("The specified file/directory may not exist!");

    }

    ftpClient.logout();

    ftpClient.disconnect();

    } catch (IOException ex) {

    ex.printStackTrace();

    } finally {

    if (ftpClient.isConnected()) {

    try {

    ftpClient.disconnect();

    } catch (IOException ex) {

    ex.printStackTrace();

    }

    }

    }

    }

    }

    运行上述程序时的输出:

    Name: Java/CodeLib/FTP.rar

    Size: 13021440

    Type: File

    Timestamp: Sat Jul 13 13:11:04 ICT 2013

    展开全文
  • 最近在审计公司某个项目时(Java方面),发现了几个有意思Blind XXE漏洞,我觉得有必要分享给大家,尤其是Java审计新手,了解这些内容可以让你少走一些弯路。Java总体常出现审计漏洞如下:>SQL注入>XSS>...
    0e8e03a70862e872ee9551653622f703.gif

    最近在审计公司的某个项目时(Java方面),发现了几个有意思的Blind XXE漏洞,我觉得有必要分享给大家,尤其是Java审计新手,了解这些内容可以让你少走一些弯路。

    Java总体常出现的审计漏洞如下:

    >SQL注入

    >XSS

    >CSRF

    >XXE

    >SSRF

    >CRLF注入

    >远程命令执行

    >反序列化

    >文件上传

    >任意文件删除

    >文件下载

    >DWR接口未授权访问

    >JSONP

    >URL报名单绕过

    XXE简介

    XXE(XML外部实体注入、XML External Entity),在应用程序解析XML输入时,当允许引用外部实体时,可以构造恶意内容导致读取任意文件或SSRF、端口探测、DoS拒绝服务攻击、执行系统命令、攻击内部网站等。

    Java中的XXE支持sun.net.www.protocol里面的所有协议:http,https,file,ftp,mailto,jar,netdoc 。一般利用file协议读取文件、利用http协议探测内网,没有回显时可组合利用file协议和ftp协议来读取文件。

    相关基础概念

    XML&DTD

    XML(可扩展标记语言,EXtensible Markup Language ),是一种标记语言,用来传输和存储数据。

    DTD(文档类型定义,Document Type Definition )的作用是定义XML文档的合法构建模块。它使用一系列的合法元素来定义文档结构。

    实体ENTITY

    XML中的实体类型,一般有下面几种:字符实体,命名实体(或内部实体)、外部实体(包含分为:外部普通实体、外部参数实体)。除外部参数实体外,其他实体都以字符(&)开始以字符(;)结束。

    0x1):字符实体

    字符实体类似html的实体编码,形如a(十进制)或者a(十六进制)。

    0x2):命名实体(内部实体)

    内部实体又叫命名实体。命名实体可以说成是变量声明,命名实体只能在DTD或者XML文件开始部分(语句中)。

    命名实体(或内部实体语法):

    ``

    如:

    90bb5ecfba05615606f4b953f4b426f3.png

    说明:

    定义一个实体名称x 值为First Param!

    &x; 引用实体x

    知道以上语法后,可以使用名为foo的数据类型定义(DTD)构造如下请求:

    request:

    ffb540b65019d2e6b74c936c3bc70294.png

    bar元素是单词“World”的别名 。看起来这样的内部实体似乎无害,但攻击者可以使用XML实体通过在实体内嵌入实体来导致拒绝服务攻击。通常被称为“ (Billion Laughs attack)十亿笑攻击 ”。某些XML解析器会自动限制它们可以使用的内存量。

    如:

    request:

    185f31f7ac81811d1a1a4e968e9f16e5.png

    response:

    HTTP/1.0 200 OK

    Hello World World World World World World World World World World World World World World World World World World World World World World World World World World World World World World World World World World World World World World World World

    0x3):外部普通实体

    外部实体用于加载外部文件的内容。(显示XXE攻击主要利用普通实体)

    外部普通实体语法:

    如:

    3676a71a06782e172ee585f0a982b2d4.png

    0x4):外部参数实体

    参数实体用于DTD和文档的内部子集中。与一般实体不同,是以字符(%)开始,以字符(;)结束。只有在DTD文件中才能在参数实体声明的时候引用其他实体。(Blind XXE攻击常利用参数实体进行数据回显)

    28b9a7921f8c32df6f5c4d439f7abb08.png

    combine.dtd的内容为:

    说明:

    上面combine.dtd中定义了一个基本实体,引用了3个参数实体:%param1;,%param2;,%param3;。

    解析后…中的内容为Hello World。

    XML外部实体的一些限制与解决办法

    error

    通常对于XXE的经典用法,用来读取文件比较直接方便,但是,也决定了能被解析的内容元素必须是XML文档。

    如下面一个例子:

    request:

    8097999d64788fbb3655add9f9902f31.png

    response:

    通常会得到如下响应

    HTTP/1.0 500 Internal Server Error

    File "file:///etc/fstab", line 3

    lxml.etree.XMLSyntaxError: Specification mandate value for attribute system, line 3, column 15...

    /etc/fstab是一个包含一些看起来像XML的字符的文件(即使它们不是XML)。这将导致XML解析器尝试解析这些元素,只是注意到它不是有效的XML文档。

    因此,这限制了XML外部实体(XXE)在以下两个重要方面:

    • XXE只能用于获取包含“有效”XML的文件或响应

    • XXE不能用于获取二进制文件

    XML外部实体(XXE)限制解决办法

    这其实也就用到了外部参数实体,解决了命名实体和普通实体所带来的一些问题。具体如下分析:

    攻击者可以通过使用一些巧妙的技巧来解决上述限制。攻击者使用XML外部实体(XXE)攻击所面临的主要问题是,它很容易撞了南墙试图exfiltrate不是有效的XML文件(包含XML特殊字符,如例如,文件明文文件时&,< and >)。

    理论上的解决办法

    XML已经解决了这个问题,因为有些合法的情况可能需要在XML文件中存储XML特殊字符。CDATAXML解析器忽略(Character Data)标记中的特殊XML字符。

    0106a2a3d7d8a8984803313c98755931.png

    因此,从理论上讲,攻击者可以发送类似于以下内容的请求。

    request:

    f352f49d411af922258302a89edb7360.png

    预期response:

    cccf2c7e0d8527cb8d809e7aa4a6e8b2.png

    但实际上并不起作用,因为XML规范不允许将外部实体内部实体结合使用。

    内部实体代码示例:

    61627a26f73779f4a7ac9a4a147e1d6e.png

    外部实体代码示例:

    f1368f763240e206804e14ecd9df7576.png

    参数实体

    然而,攻击者仍然可以扔出手里的另一张牌-——参数实体,在得到以上限制解决方法之前先理解两个重点:

    重点一:

    实体分为两种,内部实体和外部实体,上面我们举的例子就是内部实体,但是实体实际上可以从外部的 dtd 文件中引用,我们看下面的代码:

    还是以上代码

    11ea829dd04c8ce505357315e672bc40.png

    重点二:

    我们上面已经将实体分成了两个派别(内部实体和外部实体),但是实际上从另一个角度看,实体也可以分成两个派别(通用实体和参数实体)

    通用实体

    用&实体名:引用的实体,他在DTD中定义,在XML文档中引用。

    示例代码:

    73c277d3d45c0e66d2e3c8a147a42a11.png

    参数实体

    (1)使用 % 实体名(这里面空格不能少) 在 DTD 中定义,并且只能在 DTD 中使用 \%实体名; 引用 

    (2)只有在 DTD 文件中,参数实体的声明才能引用其他实体。

    (3)和通用实体一样,参数实体也可以外部引用。

    示例代码:

    f11a853de99ac75a3e434b09dff4b196.png

    参数实体在我们 Blind XXE 中起到了至关重要的作用

    接下来怎么做?(解决办法)

    除了一般实体,这是我们到目前为止所看到的,还有参数实体。 以下是参数实体的外观。它与一般实体相同,除了它存在于DTD内部并以%作为前缀开始,以指示XML解析器正在定义参数实体(不是通用实体)。在下面的示例中,参数实体用于定义通用实体,然后在XML文档内部调用该实体。

    request:

    26dc3b9bc8e39adbf783336cf39ec0bd.png

    考虑到上面的示例,攻击者现在可以通过创建在attacker.com/evil.dtd上托管的恶意DTD,将上面的理论CDATA示例转换为工作攻击。

    request:

    87bda4c51d1520d5e487cccfd5ef1169.png

    解析:

    当攻击者发送上述请求时,XML解析器将首先%dtd通过向

    http://attacker.com/evil.dtd发出请求来尝试处理参数实体。

    一旦下载了攻击者的DTD,XML解析器将加载%file参数实体(来自evil.dtd),在本例中是/etc/fstab。然后它将分别使用%start和%end参数实体将文件的内容包装在标签中,并将它们存储在另一个名为的参数实体中%all。

    这个技巧的核心是%all创建一个被调用的通用实体&fileContents;,它可以作为响应的一部分包含在攻击者中。

    注:请记住,攻击者可以只使用DTD内参数实体,而不是内部的XML文档。

    结果是回复攻击者,文件(/etc/fstab)的内容包含在CDATA标签中。

    XXE审计函数

    XML解析一般在导入配置、数据传输接口等场景可能会用到,涉及到XML文件处理的场景可查看XML解析器是否禁用外部实体,从而判断是否存在XXE。部分XML解析接口(常见漏洞出现函数)如下:

    8d397a865753b258b4b55d913b54254f.png

    以上是今天分享的内容,在下期文章中我将继续分享Blind XXE与OOB-XXE的相关知识点以及XXE防御方法等,小伙伴们不要错过哦!

    新来的朋友如果想要了解其他的必备技能和实用工具,可以点击菜单栏中的入门锦囊查看相关内容:

    552a8bd37ef1869d38df9c7c3419319d.png

    4055549ca0d87d0b84c94b3c95ba02ae.png

    bdb967ff3b8724a896f9934949149360.png

    dd795b0527e10920849ad66a83e636b5.png

    超多有料干货,想看什么内容快去菜单栏—入门锦囊查找吧!

    文章素材来源于i春秋社区

    38a15e8a31e799efa4d851860301c0d7.png

    i春秋官方公众号为大家提供

    前沿的网络安全技术

    简单易懂的实用工具

    紧张刺激的安全竞赛

    还有网络安全大讲堂

    更多技能等你来解锁

    ada09aa4e13b8c6ba50f996496c7a024.png

    891062e6c1abb52f49f8be7d92efded0.png

    展开全文
  • ftp方式获取服务器上文件的大小

    千次阅读 2013-11-24 17:44:02
    s为读取服务器的一行,解析这行数据,可以获取文件的所有信息 [code="java"]TelnetInputStream fget = null; FtpClient fc = null; BufferedReader dr = null; try { fc = ...
    关键代码就一行
    temp = s.split("[ ]+");

    s为读取服务器的一行,解析这行数据,可以获取文件的所有信息
    TelnetInputStream fget = null;
    FtpClient fc = null;
    BufferedReader dr = null;
    try {
    fc = new FtpClient();// ftp客户端对象
    fc.openServer(ftpIp);// 连接ftp服务器
    fc.login(userName, userPass);// 登录ftp服务器
    fc.binary();
    fc.cd(fileurl);
    dr = new BufferedReader(new InputStreamReader(fc.list()));
    String s = "";
    String[] temp = null;
    while ((s = dr.readLine()) != null) {
    // System.out.println(s);
    temp = s.split("[ ]+");
    // System.out.println("sdfasfd: ==" + temp[4] + "==" + temp[8]);
    if(filename.equals(temp[8])){
    long num = Long.parseLong(temp[4]);
    return num;
    }
    }
    }catch (Exception e) {
    log.debug(e);
    e.printStackTrace();
    } finally {
    try {
    fget.close();
    dr.close();
    fc.closeServer();
    } catch (Exception e) {
    }
    }
    return 0;
    展开全文
  • 在使用javaftp下载服务器的文件获取文件的byte[],然后对byte进行加密传输时, 注意是要获取byte[],而不是下载文件到本地;发现下载的byte[]大小总是小于文件实际大小,并且下载的大小是变化的到网上查阅发现,...

    在使用java的ftp下载服务器上的文件获取文件的byte[],然后对byte进行加密传输时, 注意是要获取byte[],而不是下载文件到本地;发现下载的byte[]大小总是小于文件实际大小,并且下载的大小是变化的到网上查阅发现,ftp传输是不稳定的,会随网络情况波动;所以对下载的方法进行了修改。

    iis7服务器管理工具适用群体为:机房管理、站长、运维工作、程序员,等需要大量服务器或者电脑的用户朋友。

    它可以批量管理、定时上传下载、同步操作、数据备份、到期提醒、自动更新。还适用于Windows操作系统和liunx操作系统;支持Ftp客户端批量操作。

    7a2553af1e16dd7a44f424e20e2d3e14.pngimport sun.net.ftp.FtpClient;

    import sun.net.ftp.FtpProtocolException;

    public String download(String ftpFile, FtpClient ftpClient) {

    InputStream is = null;

    byte[] data = null;

    try {

    // 获取ftp上的文件

    long size=ftpClient.getSize(ftpFile);

    System.out.println(ftpClient.getSize(ftpFile));

    is = ftpClient.getFileStream(ftpFile);

    // System.out.println(is.available());

    int count =is.available();

    System.out.println("count:"+count);

    while (count>0 || (data==null?0:data.length)

    `

    运行发现果然波动是很大的

    fa113abcb6e95709ea58521239331870.png

    c0bf82895a81ce731a358f219c4c5ec2.png

    4df2e7c0048b619b15d65d937857cfd9.png

    296a985c421d62b54d0ce940cc295140.png

    `

    展开全文
  • 在应用javaftp下载服务器的文件获取文件的byte[],而后对byte进行加密传输时, 留神是要获取byte[],而不是下载文件到本地;发现下载的byte[]大小总是小于文件理论大小,并且下载的大小是变动的到网上查阅发现,...
  • 在使用javaftp下载服务器的文件获取文件的byte[],然后对byte进行加密传输时,注意是要获取byte[],而不是下载文件到本地;发现下载的byte[]大小总是小于文件实际大小,并且下载的大小是变化的到网上查阅发现,...
  • JAVA 解决FTP下载文件不完整问题

    千次阅读 2019-09-12 10:56:46
    在使用javaftp下载服务器的文件获取文件的byte[],然后对byte进行加密传输时, 注意是要获取byte[],而不是下载文件到本地; 发现下载的byte[]大小总是小于文件实际大小,并且下载的大小是变化的 到网上查阅...
  • java连接ftp服务器

    千次阅读 2019-03-22 17:56:13
    下面就java语言tcp来实现该协议的获取文件大小,遍历目录,上传文件,下载文件功能,好了废话不多说代码。 package com.telrob.ftp; import java.io.IOException; import java.io.InputStream;...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
    FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户可以在终端...
  • FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户可以在终端...
  • java源码包---java 源码 大量 实例

    千次下载 热门讨论 2013-04-18 23:15:26
    FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户可以在终端...
  • java源码包2

    千次下载 热门讨论 2013-04-20 11:28:17
    FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户可以在终端...
  • java源码包3

    千次下载 热门讨论 2013-04-20 11:30:13
    FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户可以在终端...
  • java源码包4

    千次下载 热门讨论 2013-04-20 11:31:44
    FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户可以在终端...
  • FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户可以在终端...
  • FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户可以在终端...
  • java的声音处理,介绍java中如何处理声音,包括实现响铃,播放wav,au等音频文件,以及控制声音的大小和音量,Beep.java; 媒体播放器,JMFMediaPlayer.java; 12反射 是java程序开发的特征之一,允许java程序对自身...
  • Java经典编程300例(code)

    千次下载 热门讨论 2013-01-09 10:26:53
    实例250 获取网络资源的大小 352 实例251 解析网页中的内容 354 实例252 网络资源的单线程下载 355 实例253 网络资源的多线程下载 357 实例254 下载网络资源的断点续传 359 实例255 建立服务器套接字 362 实例256 ...
  • vc 6.0开发ftp断点续传源代码

    热门讨论 2012-09-10 23:06:32
    然后获取文件头,得到文件大小,然后再下载。重点函数是ThreadDownLoad。下载完之后用FileCombine合并文件。 ###开发测试环境: windows xp + Visual C++ 6.0 !!!!!!需要使用MFC环境!!!!!!!!!!!!
  • 实例260 使背景图片自动适应窗体的大小 实例261 背景为渐变色的主界面 实例262 随机更换窗体背景 11.5 窗体形状及应用 实例263 椭圆形窗体界面 实例264 钻石形窗体 实例265 创建透明窗体 11.6 对话框 实例...
  • 实例260 使背景图片自动适应窗体的大小 实例261 背景为渐变色的主界面 实例262 随机更换窗体背景 11.5 窗体形状及应用 实例263 椭圆形窗体界面 实例264 钻石形窗体 实例265 创建透明窗体 11.6 对话框 实例...
  • 实例260 使背景图片自动适应窗体的大小 实例261 背景为渐变色的主界面 实例262 随机更换窗体背景 11.5 窗体形状及应用 实例263 椭圆形窗体界面 实例264 钻石形窗体 实例265 创建透明窗体 11.6 对话框 实例...
  • 实例260 使背景图片自动适应窗体的大小 实例261 背景为渐变色的主界面 实例262 随机更换窗体背景 11.5 窗体形状及应用 实例263 椭圆形窗体界面 实例264 钻石形窗体 实例265 创建透明窗体 11.6 对话框 实例...
  • 实例260 使背景图片自动适应窗体的大小 实例261 背景为渐变色的主界面 实例262 随机更换窗体背景 11.5 窗体形状及应用 实例263 椭圆形窗体界面 实例264 钻石形窗体 实例265 创建透明窗体 11.6 对话框 实例...
  • 实例232 简化文件的读写操作 290 10.4 Commons BeanUtils组件简介 291 实例233 设置JavaBean简单属性 291 实例234 设置JavaBean级联属性 293 实例235 动态生成JavaBean 295 实例236 复制JavaBean属性 296 实例237 ...
  • 实例232 简化文件的读写操作 290 10.4 Commons BeanUtils组件简介 291 实例233 设置JavaBean简单属性 291 实例234 设置JavaBean级联属性 293 实例235 动态生成JavaBean 295 实例236 复制JavaBean属性 296 实例237 ...
  • 实例232 简化文件的读写操作 290 10.4 Commons BeanUtils组件简介 291 实例233 设置JavaBean简单属性 291 实例234 设置JavaBean级联属性 293 实例235 动态生成JavaBean 295 实例236 复制JavaBean属性 296 实例237 ...
  • 实例232 简化文件的读写操作 290 10.4 Commons BeanUtils组件简介 291 实例233 设置JavaBean简单属性 291 实例234 设置JavaBean级联属性 293 实例235 动态生成JavaBean 295 实例236 复制JavaBean属性 296 实例237 ...
  • 20.1.4 根据程序的大小确定Pinning需求 20.1.5 获得存储代码的属性 20.1.6 通过视图分析和更改触发器状态 20.1.7 分析参数信息 20.1.8 分析标识符的使用(Oracle 数据库11g的PL/Scope) 20.2 依赖关系...

空空如也

空空如也

1 2
收藏数 37
精华内容 14
关键字:

java获取ftp上文件的大小

java 订阅