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
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
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
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.
Nous pourrions contourner cela, mais admin: admin nous permet de nous connecter.
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.
Décode Base64.echo "eyJJZCI6MSwiVXNlck5hbWUiOiJhZG1pbiIsIlBhc3N3b3JkIjoiMjEyMzJmMjk3YTU3YTVhNzQzODk0YTBlNGE4MDFmYzMiLCJOYW1lIjoiVXNlciBBZG1pbiBIVEIiLCJSb2wiOiJBZG1pbmlzdHJhdG9yIn0=" | base64 -d ; echo
Autrement dit, la valeur du mot de passe est MD5 à partir du mot de passe administrateur.
De plus, rien d'intéressant. En ouvrant Burp et en interceptant la demande, vous pouvez trouver un en-tête HTTP intéressant.
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.
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é.
Activez maintenant tcpdump avec un filtre de protocole ICMP pour attraper le ping.
Lors de l'interception d'une demande, nous changeons l'en-tête.
Et nous obtenons le ping qui a été commandé.
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.
Ouvrez maintenant le serveur SMB local à partir duquel le chargement commencera.
Maintenant, nous sérialisons à nouveau les données nécessaires, en tant que commande, nous lançons notre chargement à partir de notre serveur.
Nous voyons une connexion réussie au serveur SMB et une session Meterpreter chargée avec succès.
Et lisez le fichier utilisateur.RACINE
Tout d'abord, nous examinons les informations sur l'utilisateur sous lequel nous travaillons.
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.
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.
Et maintenant, nous regardons le CLSID.
Téléchargez les fichiers sur l'hôte cible.
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).
Le processus a été créé avec succès et nous voyons la session metterpreter créée.
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.