Hack The Box. Procédure pas à pas JSON. Vulnérabilité dans Json.Net et LPE via SeImpersonatePrivilege

image

Je continue de publier des solutions envoyées pour un traitement ultérieur à partir du site HackTheBox . J'espère que cela aidera au moins quelqu'un à se développer dans le domaine de la sécurité de l'information. Dans cet article, nous exploitons une vulnérabilité dans Json.Net et voyons comment augmenter nos privilèges sur SYSTEM si nous avons le privilège SeImpersonatePrivilege.

La connexion au laboratoire se fait via VPN. Il est recommandé de ne pas se connecter à partir d'un ordinateur de travail ou d'un hôte où les données importantes pour vous sont disponibles, car vous vous retrouvez sur un réseau privé avec des personnes qui connaissent quelque chose dans le domaine de la sécurité de l'information :)

Information organisationnelle
, - , :

  • PWN;
  • (Crypto);
  • c (Network);
  • (Reverse Engineering);
  • (Stegano);
  • WEB-.

, , , .

, , Telegram . , , .

. , - , .

Service de renseignements


Cette machine a une adresse IP 10.10.10.158, que j'ajoute à / etc / hosts.

10.10.10.158    json.htb

Tout d'abord, nous analysons les ports ouverts. Puisqu'il faut beaucoup de temps pour analyser tous les ports avec nmap, je vais d'abord le faire avec masscan. Nous analysons tous les ports TCP et UDP à partir de l'interface tun0 à une vitesse de 500 paquets par seconde.

masscan -e tun0 -p1-65535,U:1-65535 10.10.10.158 --rate=500

image

Ensuite, vous devez collecter plus d'informations sur les ports connus. Pour ce faire, utilisez nmap avec l'option -A.

nmap json.htb -p49156,49154,49152,47001,80,137,49153,139,49155,135,445,49158,5985,6666,21

image

Maintenant, pour des informations plus détaillées sur les services qui fonctionnent sur les ports, nous allons exécuter une analyse avec l'option -A.

nmap -A json.htb -p80,139,135,445,5985,6666,21

image

Allons voir quoi sur le web. En conséquence, la page se charge et ce n'est qu'alors qu'elle nous renvoie à la page d'autorisation.

image

Nous pourrions contourner cela, mais admin: admin nous permet de nous connecter.

image

Il n'y a rien d'intéressant sur le site lui-même, et dans les tentatives pour trouver au moins quelque chose, nous nous accrochons aux cookies.

image

Décode Base64.

echo "eyJJZCI6MSwiVXNlck5hbWUiOiJhZG1pbiIsIlBhc3N3b3JkIjoiMjEyMzJmMjk3YTU3YTVhNzQzODk0YTBlNGE4MDFmYzMiLCJOYW1lIjoiVXNlciBBZG1pbiBIVEIiLCJSb2wiOiJBZG1pbmlzdHJhdG9yIn0=" | base64 -d ; echo

image

Autrement dit, la valeur du mot de passe est MD5 à partir du mot de passe administrateur.

image

De plus, rien d'intéressant. En ouvrant Burp et en interceptant la demande, vous pouvez trouver un en-tête HTTP intéressant.

image

Et à ce stade, j'ai suspendu jusqu'à ce qu'on me dise de «casser le sens». Évidemment, dans de tels cas, vous devez faire des erreurs et regarder la réaction de l'API dans trois états: vrai, faux et erreur. Mais pour une raison quelconque, je l'ai raté.

Point d'accès


Et puis il a été découvert que si des données brisées sont transmises dans un étrange en-tête HTTP (supprimez certains des caractères), le serveur donne des erreurs. Vous trouverez ci-dessous les données que le serveur renvoie avec une valeur d'en-tête normale et avec un à quatre caractères supprimés.

image

Nous obtenons une erreur intéressante dans ce dernier cas. Puisque l'objet JSON ne fonctionne plus, nous pouvons l'exploiter en utilisant ysoserial . Nous utiliserons le gadget ObjectDataProvider pour Json.Net et exécuterons la commande ping pour vérifier l'hypothèse de vulnérabilité.

image

Activez maintenant tcpdump avec un filtre de protocole ICMP pour attraper le ping.

image

Lors de l'interception d'une demande, nous changeons l'en-tête.

image

Et nous obtenons le ping qui a été commandé.

image

UTILISATEUR


Vous devez maintenant faire de même avec le dynamomètre. Tout d'abord, nous générons une charge et ouvrons un écouteur.

image

image

Ouvrez maintenant le serveur SMB local à partir duquel le chargement commencera.

image

Maintenant, nous sérialisons à nouveau les données nécessaires, en tant que commande, nous lançons notre chargement à partir de notre serveur.

image

Nous voyons une connexion réussie au serveur SMB et une session Meterpreter chargée avec succès.

image

image

Et lisez le fichier utilisateur.

RACINE


Tout d'abord, nous examinons les informations sur l'utilisateur sous lequel nous travaillons.

image

L'utilisateur a le privilège SeImpersonatePrivilege activé (le droit "Emprunter l'identité du client après l'authentification"). Comme le dit Microsoft :
Attribuer à un utilisateur le droit «Emprunter l'identité d'un client après l'authentification» permet aux programmes lancés au nom de cet utilisateur d'usurper l'identité d'un client. L'utilisation de ce paramètre empêche les serveurs non autorisés d'usurper l'identité des clients se connectant à ces serveurs à l'aide de procédures RPC ou de canaux nommés.
Le fait est que nous pouvons augmenter nos droits sur SYSTEM. Une étude complète peut être trouvée ici . Les privilèges suivants sont affectés par cette vulnérabilité:

  • SeImpersonatePrivilege
  • SeAssignPrimaryPrivilege
  • Setcbprivilege
  • SeBackupPrivilege
  • SeRestorePrivilege
  • SeCreateTokenPrivilege
  • SeLoadDriverPrivilege
  • SeTakeOwnershipPrivilege
  • SeDebugPrivilege

Générons une autre charge et exécutons un écouteur pour cela.

image

image

Pour le fonctionnement, nous utiliserons Juicy Potato . Mais en tant que paramètre, vous devez spécifier le CLSID du compte pour le système cible, nous le prendrons également dans le référentiel . Mais d'abord, voyons quel type de système.

image

Et maintenant, nous regardons le CLSID.

image

Téléchargez les fichiers sur l'hôte cible.

image

Exécutez maintenant Juicy Potato et indiquez-lui avec quoi le processus sera créé (CreateProcessWithTokenW ou CreateProcessAsUser, paramètre -t), fichier de processus (-p), port d'écoute (-l) et CLSID (-c).

image

Le processus a été créé avec succès et nous voyons la session metterpreter créée.

image

Et nous obtenons le compte SYSTEM.

Vous pouvez nous rejoindre sur Telegram. Créons une communauté dans laquelle il y aura des gens qui connaissent bien de nombreux domaines de l'informatique, puis nous pourrons toujours nous entraider pour tout problème informatique et de sécurité de l'information.

All Articles