Jour 5 OSCP | L’environnement Bash

Reading Time: ( Word Count: )

December 10, 2020
Nextdoorsec-course

Qu’est-ce que le “Bash” ?

Voici une petite histoire pour vous.

Lorsqu’un ordinateur démarre, un noyau (qu’il s’agisse de Linux, BSD, Mach ou Windows NT) reconnaît tout le matériel physique et permet à chaque composant de communiquer entre eux et d’être organisé par certains logiciels de base. Le jeu d’instructions le plus élémentaire d’un ordinateur permet simplement de le maintenir sous tension et dans un état de sécurité : activation périodique des ventilateurs pour éviter la surchauffe, utilisation de sous-systèmes pour surveiller l’espace disque ou “écouter” les périphériques nouvellement connectés, etc. Si les ordinateurs ne faisaient que cela, ils seraient aussi intéressants qu’un four à convection.

Les informaticiens l’ont compris très tôt, c’est pourquoi
ils ont développé
a
shell
pour les ordinateurs Unix qui fonctionnent en dehors du noyau (ou
autour
le noyau, comme une coquille dans la nature) et permet aux humains d’interagir avec l’ordinateur quand ils le souhaitent. Il s’agissait d’un développement passionnant à une époque où les gens avaient l’impression d’être en train de faire des erreurs. introduire des cartes perforées dans des ordinateurs pour leur dire ce qu’ils doivent faire. De tous les shells disponibles, Bash est l’un des plus populaires, des plus puissants et des plus conviviaux.
De https://opensource.com/resources/what-bash

Le cambriolage nous permet d’exécuter des commandes complexes et de réaliser différentes tâches à partir d’une fenêtre de terminal. Il intègre des fonctionnalités utiles provenant à la fois de la
KornShell
(ksh) et
C shell
(csh).
J’utilise Z shell (zsh) ; il s’agit d’une version étendue de Bash, livrée par défaut avec la version 2020.4 de Kali Linux.

Variables d’environnement

J’ai déjà couvert brièvement ce qu’est une variable d’environnement dans la rubrique
Jour 2
Il s’agit d’une vérification rapide. Ainsi, lorsque nous ouvrons une fenêtre de terminal un nouveau processus Bash, qui possède ses propres variables d’environnementest initialisé.

Les variables d’environnement permettent aux programmes de savoir dans quel répertoire installer les fichiers, où stocker les fichiers temporaires et où trouver les paramètres du profil de l’utilisateur.

D’autres variables d’environnement utiles sont USER, PWD et HOME, qui contiennent respectivement les valeurs du nom d’utilisateur, du répertoire de travail actuel et du répertoire personnel de l’utilisateur du terminal en cours :

┌──(kali㉿kali)-[~] └─$ echo $USER kali
┌──(kali㉿kali)-[~] └─$ echo $PWD /home/kali
┌──(kali㉿kali)-[~] └─$ echo $HOME /home/kali

Une variable d’environnement peut être définie à l’aide de l’option export commandement. Par exemple, si nous analysons une cible et que nous ne voulons pas saisir l’adresse IP du système à plusieurs reprises, nous pouvons rapidement lui attribuer une variable d’environnement et l’utiliser à la place.

Pour cet exemple, prenons notre adresse IPv4 locale à partir de la commande“ifconfig“.

┌──(kali㉿kali)-[~] └─$ export target=192.168.117.128
┌──(kali㉿kali)-[~] └─$ ping -c 4 $target PING 192.168.117.128 (192.168.117.128) 56(84) octets de données. 64 octets en provenance de 192.168.117.128 : icmp_seq=1 ttl=64 time=0.022 ms 64 octets en provenance de 192.168.117.128 : icmp_seq=2 ttl=64 time=0.047 ms 64 octets en provenance de 192.168.117.128 : icmp_seq=3 ttl=64 time=0.038 ms 64 octets en provenance de 192.168.117.128 : icmp_seq=4 ttl=64 time=0.027 ms --- 192.168.117.128 ping statistics --- 4 paquets transmis, 4 reçus, 0% de perte de paquets, time 3076ms rtt min/avg/max/mdev = 0.022/0.033/0.047/0.009 ms

Le ping (latence) est le temps nécessaire pour qu’un petit ensemble de données soit transmis de votre appareil à un autre appareil. autre appareil et revenir à votre appareil, et il se mesure en millisecondes (ms)..

Si nous n’incluions pas“-c 4“, qui correspond au“nombre” de pings, il continuerait à faire des pings sans fin dans un environnement Linux par défaut.

Sous-processus

Les exportationrend la variable accessible à tous les sous-processus que nous pourrions créer à partir de notre instance Bash actuelle. Cela signifie que la variable sera incluse dans le sous-processus lorsqu’elle sera définie par “export”.

Cependant, sii nous définissons une variable d’environnement sans leexport“elle ne sera disponible que dans le processus shell en cours et ne sera PAS dupliquée, elle ne sera disponible que dans le processus shell en cours et ne sera PAS dupliquée.

Nous utiliserons la variable $$ pour afficher l’ID du processus de l’instance actuelle du shell afin de nous assurer que nous émettons bien des commandes dans deux shells différents.

Te “bash“permet d’initialiser un nouveau processus Bash et lorsque nous “exit“, on revient au processus bash précédent.

┌──(kali㉿kali)-[~] └─$ echo $$ 77589
┌──(kali㉿kali)-[~] └─$ localvar="Local Var"
┌──(kali㉿kali)-[~] └─$ echo $localvar Local Var
┌──(kali㉿kali)-[~] └─$ bash
┌──(kali㉿kali)-[~] └─$ echo $$ 77821
┌──(kali㉿kali)-[~] └─$ echo $var

 

Ci-dessus, nous avons créé une variable d’environnement locale nommée “localvar”, nous l’avons mise en écho pour voir si elle fonctionne. Ensuite, j’ai initialisé un nouveau processus bash, j’ai fait un écho à“$$” pour m’assurer qu’il s’agissait bien d’un nouveau processus. Ensuite, j’ai fait un nouvel écho de la variable d’environnement local “localvar” précédemment créée, pour voir si elle est incluse dans le nouveau processus bash et aucune sortie n’est générée. Vous pouvez “quitter” et réexécuter la commande pour voir ce qui se passe.

 

Testons la même chose en ajoutant la commande“export“.

┌──(kali㉿kali)-[~] └─$ echo $$ 75574
┌──(kali㉿kali)-[~] └─$ export globalvar="Global Var"
┌──(kali㉿kali)-[~] └─$ echo $globalvar Global Var
┌──(kali㉿kali)-[~] └─$ bash
┌──(kali㉿kali)-[~] └─$ echo $$ 77981
┌──(kali㉿kali)-[~] └─$ echo $globalvar Global Var

 

Pour afficher les autres variables d’environnement définies par défaut dans Kali Linux, exécutez“env“.

┌──(kali㉿kali)-[~] └─$ env SHELL=/usr/bin/zsh SUDO_GID=0 LANGUE= LESS_TERMCAP_se= LESS_TERMCAP_so= SUDO_COMMAND=/usr/bin/su SUDO_USER=root PWD=/home/kali ...

 

Bonus

Voici un article intéressant que j’ai trouvé récemment sur la détection du système d’exploitation à l’aide de la seule commande ping . Bien qu’il ne soit pas aussi précis à mon avis.

Nous lançons d’abord la commande“traceroute” (qui n’est pas fournie par défaut, il suffit de lancer“apt install traceroute“), suivie de la destination cible pour déterminer les sauts entre les deux.

Nous utiliserons l’option supplémentaire“-I” (i majuscule) pour envoyer ICMP ECHO pour les sondes, comme sous Windows.
Linux utilise des paquets UDP par défaut et, pour une raison ou une autre, ils sont bloqués par le pare-feu. Cependant, nous n’avons besoin que du nombre de sauts.

┌──(kali㉿kali)-[~] └─$ sudo traceroute -I nextdoorsec.com traceroute vers nextdoorsec.com (104.28.29.172), 30 sauts maximum, paquets de 60 octets 1 192.168.117.2 (192.168.117.2) 0.192 ms 0.092 ms 0.173 ms 2 * * * 3 * * * 4 * * * 5 * * * 6 * * * 7 * 104.28.29.172 (104.28.29.172) 30.179 ms 30.228 ms

 

Le nombre total de sauts est de 7 sous Linux et de 8 sous Windows.

Envoyez maintenant un ping au domaine nextdoorsec.com

┌──(kali㉿kali)-[~] └─$ ping -c 2 nextdoorsec.com PING nextdoorsec.com (104.28.29.172) 56(84) octets de données. 64 bytes from 104.28.29.172 (104.28.29.172) : icmp_seq=1 ttl=128 time=28.6 ms 64 bytes from 104.28.29.172 (104.28.29.172) : icmp_seq=2 ttl=128 time=41.0 ms

Fenêtres :
>ping -n 2 nextdoorsec.com Ping de nextdoorsec.com [172 .67.181.144] avec 32 octets de données : Réponse de 172.67.181.144 : bytes=32 time=17ms TTL=57 Réponse de 172.67.181.144 : bytes=32 time=19ms TTL=57

 

La valeur TTL est de 128 sous Linux et de 57 sous Windows. Je ne sais pas exactement pourquoi j’obtiens deux valeurs différentes, mais c’est probablement à cause des protocoles utilisés lors du ping ou peut-être que le pare-feu me joue des tours. Vous pouvez me faire savoir ci-dessous si vous avez réussi à trouver pourquoi.

Après avoir déterminé la somme de la valeur TTL et le nombre de sauts, nous pouvons définir le système d’exploitation :

Linux : (7 + 128 = 135), ce résultat n’est pas très concluant, mais si nous ne regardons que la valeur du TTL, notre résultat indique Linux.
Windows :
(8 + 57 = 65), ce résultat ne conclut pas grand-chose non plus, mais il est proche du TTL de 64 de Windows.

Voici une version abrégée des valeurs TTL par défaut :

Appareil / OS TTL
*nix (Linux/Unix) 64
Fenêtres 128
Solaris/AIX 254

 

Par conséquent, ne vous fiez pas à cette technique. J’aborderai de meilleures façons de trouver le système d’exploitation de notre cible. Je voulais juste avoir quelque chose de pratique pour ce billet de blog.

Aydan Arabadzha

Aydan Arabadzha

Author

Aydan, a cybersecurity ace and AI visionary, thrives on the frontlines of offensive security. His passion birthed NextdoorSec, a groundbreaking cybersecurity firm. A relentless pioneer, Aydan is persistently pushing boundaries, shaping the future of the digital world one byte at a time.

Other interesting articles

Automated vs Manual Penetration Testing

Automated vs Manual Penetration Testing

Pentesting is largely divided into two methodologies: Automated vs Manual Penetration Testing. Both have ...
8 Steps in Penetration Testing You Should Know

8 Steps in Penetration Testing You Should Know

Mastering the art of penetration testing has become a critical ability for security experts to combat cyber ...
Spear Phishing vs Whaling: What is the Difference

Spear Phishing vs Whaling: What is the Difference

Spear phishing is a particularly devious type of phishing assault in which the individual targeted plays a ...
How Often Should Penetration Testing Be Done

How Often Should Penetration Testing Be Done

Penetration testing is a crucial technique that involves simulating a cyberattack on networks, computer systems, ...
0 Comments

Submit a Comment

Your email address will not be published. Required fields are marked *