千家信息网

关于Java中XXE的利用限制是什么

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇文章为大家展示了关于Java中XXE的利用限制是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一般而言,在Java里碰到XXE,如果是有回显的,那自然
千家信息网最后更新 2026年10月31日关于Java中XXE的利用限制是什么

本篇文章为大家展示了关于Java中XXE的利用限制是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

一般而言,在Java里碰到XXE,如果是有回显的,那自然很好办,如果是没有回显,那就需要我们构造通道来把数据带出,过去在XXE利用中,如果单纯使用HTTP协议(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符),是无法读取具有换行的文件的。

比如常用作验证的win.ini文件就有换行

如果想把该文件传送出去,将会报错 Illegal character in URL

在rt.jar!\sun\net\www\http\HttpClient.class中的420行,存在对换行的判断

if (var1.indexOf(10) == -1) {    return var1;} else {    throw new MalformedURLException("Illegal character in URL");}

这个时候如果是PHP环境,那很好办,给数据编码一下就可以顺利带出,比如base64

%dtd;%send;]>

这样,即使文件存在Illegal character也可以带出,但是Java又没有相关编码的协议啊,这时候我们往往会利用FTP协议来向外传递数据,这些数据本身可能包含\r、\n等字符

看起来似乎很美好,问题得到了解决,但是,我们往往会碰到一些意外情况,如果文件中有下面这些字符呢

' " < > &

那将会得到以下报错,实体XXX的声明必须以>结尾

dtd文件如下:

"> %payload;

这是因为xml在解析的时候,会把实体进行替换,带有单引号的文件内容在拼接进字符串之后,单引号与send实体的单引号进行了闭合,然后后面的数据就变成了无效数据

如果文件中单引号后面是除了右尖括号>以外的字符,那么就会报实体XXX的声明必须以>结尾的错误

如果单引号后恰巧是右尖括号,那也不行,你后面还是有垃圾数据,顶多报错换一下

那这个时候还有什么办法读取这类的特殊文件呢?

xml在设计的时候就考虑到了这种情况,虽然一般情况下xml要求要使用这些符号最好是把相应字符用对应实体引用来代替,但是如果是不得不用的情况下,可以使用CDATA方法来读取。

CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data),CDATA 部分中的所有内容都会被解析器忽略。CDATA 部分由结束:

让我们对payload进行一下修改:

dtd

">">

payload

%asd;%c;%rrr;]>

但是其实这种方法是没办法的,因为它还是需要拼接到url里去,依旧会和外部的单引号闭合,如

但是,CDATA方法可以用于xxe有回显的情况,也算是一种不错的方法了。

正常读取无法读取

使用CDATA方法读取,但是请注意,这种情况还是不够完美,至少对于单独的 & 符号还是没办法

除非构成了完整的实体引用格式

另外JDK的版本更迭对使用FTP作为信息传送通道这一个技巧有影响,这也是为什么高版本无法用FTP来读取多行文件,因为FtpURLConnection.class中的static方法checkURL里的var0.toExternalForm().indexOf(10) > -1,此处解析URL并检查URL中是否存在换行符(ascii为10),如果存在则抛出异常

具体checkURL在哪一个版本开始检查换行,笔者没有一个一个去看,有兴趣的读者可以找找看

rt.jar!\sun\net\www\protocol\ftp\FtpURLConnection.class

static URL checkURL(URL var0) throws IllegalArgumentException {        if (var0 != null && var0.toExternalForm().indexOf(10) > -1) {            MalformedURLException var3 = new MalformedURLException("Illegal character in URL");            throw new IllegalArgumentException(var3.getMessage(), var3);        } else {            String var1 = IPAddressUtil.checkAuthority(var0);            if (var1 != null) {                MalformedURLException var2 = new MalformedURLException(var1);                throw new IllegalArgumentException(var2.getMessage(), var2);            } else {                return var0;            }        }    }

总的来说,如果是php环境,那自然是万事大吉,但是在java环境中,如果

有回显(不需要通过URL外带):

1. 普通文件  ->  直接读取回显2. 带换行文件  ->  直接读取回显3. 含特殊字符文件 -> CDATA回显

3. 含特殊字符且有换行文件 -> CDATA 回显

无回显:

1. 普通文件 -> HTTP或者FTP都可以带出2. 带换行文件 -> FTP带出3. 含特殊字符文件 -> 。。暂时没好的办法4. 含特殊字符且有换行的文件 ->  。。暂时没好的办法

另外,需要注意JDK版本的影响。

上述内容就是关于Java中XXE的利用限制是什么,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

文件 字符 数据 实体 引号 情况 方法 特殊 办法 内容 时候 版本 还是 环境 限制 普通 尖括号 技能 知识 符号 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网通讯科技 科技互联网技术 互联网公司 科技公司 唐信互联网科技 壕鑫互联网络科技 互联网科技美容 四川狮子座互联网科技 山东吉时兔互联网科技有限公司 银川新华互联网科技职业技术培训学校图片 全球顶尖互联网科技公司 岳阳华臻互联网科技有限公司 洛阳昕诺飞互联网科技有限公司 科技类公司包括互联网吗 广州千川互联网科技有限公司 江苏互联网智能科技软件 兰石爱特工业互联网科技分公司 互联网科技博主张洲 互联网科技品牌 承德科技产业互联网平台 青岛互联网科技园 广州大一互联网络科技有限公司 金融科技与互联网金融 腾讯科技 互联网女皇 成都狮子座互联网科技 承德科技产业互联网发展 晓花互联网科技有限公司网址 互联网科技与大数据专业 互联网公司高科技产品 互联网科技创新方面的资料 伍佰万互联网科技是干嘛的
0