xxe无回显的情况下,正常的读取无特殊符号文件的时候可以只用常规的file协议来进行读取
比如payload:
%xd;
]>
&bbbb;
引入的外部dtd内容为如下:
">
%demo;
返回的内容:如果正常的内容是可以的,如果带有特殊符号的话 可以用http和ftp的带外传输方法
比如ftp的带外传输
payload:
%xd;
]>
&bbbb;
外部引入的dtd内容为如下:
">
%demo;
在读取的时候还需要架设一个本地的FTP服务器
没有深入的学习过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、如果含有特殊字符【#】,会造成截断