Il linguaggio di programmazione più famoso per l'inclusione di file remoti è PHP. Di seguito è riportato il codice di esempio php per la vulnerabilità di inclusione di file remoti in PHP dall'articolo di wikipedia " Vulnerabilità di Inlucsion di file ". In questo esempio, è incluso il codice proveniente da un server esterno, quindi viene eseguito dall'applicazione vulnerabile. L'inclusione di file remoti è una vulnerabilità della classe di esecuzione di codice in modalità remota.
<?php
if ( isset( $_GET['language'] ) ) {
include( $_GET['language'] . '.php' );
}
?>
Una vulnerabilità XXE (XML External Entity) può anche essere simile all'esempio sopra. Quello che segue è un esempio di OWASP che abusa dello schema expect per eseguire il codice. Questo è solo per PHP.
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [ <!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "expect://id" >]>
<creds>
<user>&xxe;</user>
<pass>mypass</pass>
</creds>
Lo schema expect esegue il comando (a livello di sistema operativo anziché come codice PHP). PHP ha un documento che spiega come deve essere usato lo schema expect.
Ma se rimuoviamo il focus da PHP e guardiamo all'applicazione web in generale, spesso si può abusare di XXE solo per guardare i file locali (o i file remoti che l'applicazione Web vulnerabile ha accesso alla rete). Generalmente fatto con il seguente carico utile:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]><foo>&xxe;</foo>
Un altro caso di uso improprio per XXE, è che può essere utilizzato per attivare chiamate sensibili a applicazioni Web interne utilizzando il metodo GET. Ad esempio:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "https://internal.hawaii.gov/api/pacom/alert" >]><foo>&xxe;</foo>
Ma la linea di fondo è che l'inclusione di file remoti e XXE non è correlata. Entrambi potrebbero portare all'esecuzione di codice in modalità remota. Generalmente, l'inclusione di file remoti è l'esecuzione di codice in modalità remota e XXE è abusato per rubare dati da file locali (sul server)