Hacking, Linux, UNIX

Old School Hacking : Exploiting UNIX Wildcards

the-dark-knight-joker

Les Wildcards (ou Caractères génériques en français) sont une fonctionnalité très puissante dans la plupart des shells UNIX, ils offrent la possibilité de référencer plus d’un nom de fichier à l’aide de caractères spéciaux. Ces caractères génériques vous permettent de désigner tous les fichiers dont, par exemple, le nom contient l’extension “.pdf”.

A Propos des Wildcards 

Les wildcards sont souvent utilisés dans les expressions régulières ainsi que dans les scripts shells linux/unix, dans ce cas les wildcards sont interprétés par le shell avant toute action.

Voici une petit liste des wildcards connus :

Caractère Fonction
* Correspond à un caractère, une chaîne de caractères ou un caractère NULL
? Correspond à un seul caractère
 [ ] Délimite une série de caractère qui peuvent correspondre à un seul caractère.
Utilisé avec [ ] pour désigner un éventail de caractères
~

Lorsqu’il est utilisé avant un mot il fait référence au chemin du dossier home de l’utilisateur saisi après.

Lorsqu’il est utilisé seul il fait référence au chemin du dossier home de l’utilisateur courant.

Quelques exemples :

cat e* -> Affiche le contenu de tous les fichiers dont le nom commence par “e”

cat te?t.php -> Affiche le contenu des tous les fichiers dont le nom commence par “te” qui contient ensuite un caractère et qui se termine par “t.php

cat file[123456789].txt -> Affiche le contenu de tous les fichiers dont le nom contient “file” puis un chiffre entre 1 et 9 puis “.txt

cat file[1-9].txt -> (Idem que la précédente commande)

ls~ -> Affiche le contenu du dossier home de l’utilisateur courant

ls~blackfox -> Affiche le contenu du dossier home de l’utilisateur blackfox

Exploitation:

Malheureusement cette fonctionnalité souffre d’un bug (depuis assez longtemps d’ailleurs) qui affecte les systèmes UNIX, UNIX-Like, Linux comme (Ubuntu, Android, iOS, OS X …).

Les systèmes d’exploitation de type UNIX offrent à leurs utilisateurs des centaines de commandes qui font de la console un outil pratique et extrêmement puissant. Certaines d’entre elles sont fournies directement par le shell, alors que d’autres sont des exécutables situés dans /bin, /usr/bin, /usr/local/bin ou un autre répertoire contenant des exécutables et listé dans la variable d’environnement $PATH. La distinction entre /bin et /usr/bin ne relève que de raisons historiques propres aux PDP-11 (/bin était placé sur un tambour magnétique d’accès rapide et de petite taille, /usr/bin sur un disque normal ; sur beaucoup de systèmes actuels, il s’agit d’un lien vers le même système de fichiers.

La plupart des commandes acceptent des arguments. On peut distinguer deux types d’arguments :

Les options, qui sont en général précédées du caractère – pour leur forme courte ou des caractères — pour leur forme longue, introduite par les outils GNU.
Exemple :

Cette commande affiche le contenu du répertoire courant de façon détaillée (-l) et en colorant les fichiers selon leur type (–color).

Les chaînes de caractères, qui peuvent représenter un fichier, une expression rationnelle, une commande interne, etc.
Exemple :

Cette commande recherche la chaîne foo dans le fichier bar.

(source Wikipedia بتصرف :p)

 

Back_to_the_Future_film_series_logo

 

Imaginons un dossier contenant plusieurs fichier, le premier est nommé “File1” le second est nommé “File2” et le dernier “–help” :

1

[1] Dossier contenant des fichiers

Que se passe-t-il quand un utilisateur exécute la commande cat * ?2

3

45Magic ! au lieu d’avoir le contenu des fichiers nous avons le help & usage de la commande cat.

mais que s’est-il passé réellement ? découvrons le ensemble grâce à “strace

strace

Démo :

Quelques astuces :

Chown :

Chmod :

Real life scenario – Privileges escalation (Web hosting’s cronjobed backup script)  :

 

Standard

Leave a Reply