Hallo, Habra!
Neulich habe ich mir die heruntergeladene Version des Streams über Programmierung "Wie man seine eigene Webanwendung mit Flask erstellt" angesehen. Und ich beschloss, mein Wissen in einem Projekt zu festigen. Lange wusste ich nicht, was ich schreiben sollte, und mir kam die Idee: "Warum nicht ein Mini-Backdoor mit Flask machen?".
Sofort hatte ich die ersten Varianten der Implementierungen und Möglichkeiten des Backdoors im Kopf. Aber ich beschloss, gleich eine Liste der Möglichkeiten des Backdoors zu erstellen:
- In der Lage sein, Websites zu öffnen
- Zugriff auf die Eingabeaufforderung haben
- In der Lage sein, Programme, Fotos, Videos zu öffnen
Also, der erste Punkt ist sehr einfach mit dem Modul webbrowser umzusetzen. Den zweiten Punkt habe ich mit dem Modul os umgesetzt. Und den dritten ebenfalls über das Modul os, aber ich werde "Links" verwenden (darüber später).
Schreiben Server
Also, *Trommelwirbel* hier ist der gesamte Server-Code:
from flask import Flask, request
import webbrowser
import os
import re
app = Flask(__name__)
@app.route('mycomp', methods=['POST'])
def hell():
json_string = request.json
if json_string['command'] == 'test':
return 'Der Server läuft und wartet auf Befehle...'
if json_string['command'] == 'openweb':
webbrowser.open(url='https://www.'+json_string['data'], new=0)
return 'Website öffne ' + json_string['data'] + '...'
if json_string['command'] == 'shell':
os.system(json_string['data'])
return 'Befehlsausführung ' + json_string['data'] + '...'
if json_string['command'] == 'link':
links = open('links.txt', 'r')
for i in range(int(json_string['data'])):
link = links.readline()
os.system(link.split('>')[0])
return 'Starte ' + link.split('>')[1]
if __name__ == '__main__':
app.run(host='0.0.0.0')
Ich habe bereits den gesamten Code gezeigt, es ist Zeit für eine Erklärung.
Der gesamte Code läuft auf einem lokalen Computer an Port 5000. Zur Interaktion mit Server müssen wir eine JSON-POST-Anfrage senden.
Struktur der JSON-Anfrage:
{'command': 'kommando', 'data': 'irgendwelchedaten'}Nun, es ist logisch, dass 'command' der Befehl ist, den wir ausführen möchten. Und 'data' sind die Argumente des Befehls.
Man kann JSON-Anfragen manuell an den Server senden (dafür steht die requests-Bibliothek zur Verfügung). Alternativ kann man einen Konsolenclient schreiben.
Schreiben des Clients
Code:
import requests
logo = ['nn',
'****** ********',
'******* *********',
'** ** ** **',
'** ** ** ** Geschrieben in Python',
'******* ** **',
'******** ** **',
'** ** ** ** Autor: ROBOTD4',
'** ** ** **',
'** ** ** **',
'******** *********',
'******* ********',
'nn']
p = ''
iport = '192.168.1.2:5000'
host = 'http://' + iport + '/mycomp'
def test():
dict = {'command': 'test', 'data': 0}
r = requests.post(host, json=dict)
if r.status_code == 200:
print (r.content.decode('utf-8'))
def start():
for i in logo:
print(i)
start()
test()
while True:
command = input('>')
if command == '':
continue
a = command.split()
if command == 'test':
dict = {'command': 'test', 'data': 0}
r = requests.post(host, json=dict)
if r.status_code == 200:
print (r.content.decode('utf-8'))
if a[0] == 'shell':
for i in range(1, len(a)):
p = p + a[i] + ' '
dict = {'command': 'shell', 'data': p}
r = requests.post(host, json=dict)
if r.status_code == 200:
print (r.content.decode('utf-8'))
p = ''
if a[0] == 'link':
if len(a) > 1:
dict = {'command': 'link', 'data': int(a[1])}
r = requests.post(host, json=dict)
if r.status_code == 200:
print (r.content.decode('utf-8'))
else:
print('Der Befehl enthält keine Argumente!')
if a[0] == 'openweb':
if len(a) > 1:
dict = {'command': 'openweb', 'data': a[1]}
r = requests.post(host, json=dict)
if r.status_code == 200:
print (r.content.decode('utf-8'))
else:
print('Der Befehl enthält keine Argumente!')
if a[0] == 'set':
if a[1] == 'host':
ip = a[2] + ':5000'
if command == 'quit':
break
Erklärungen:
Zuerst wird das Modul requests (für die Interaktion mit dem Server) importiert. Anschließend werden die Funktionen start und test beschrieben. Danach folgt eine Schleife, in der das Wunder geschieht. Haben Sie den Code gelesen? Dann ist Ihnen der Sinn des Wunders, das in der Schleife geschieht, klar. Geben Sie einen Befehl ein – er wird ausgeführt. Shell – Befehle für die Eingabeaufforderung (die Logik übersteigt den Rahmen).
Test – überprüft, ob der Server (Backdoor) funktioniert.
Link – Verwendung einer "Verknüpfung"
Openweb – Website öffnen
Quit – Client beenden
Set – IP Ihres Computers im lokalen Netzwerk festlegen
Jetzt mehr zum Thema Link.
Neben dem Server befindet sich die Datei link.txt. Darin sind Links (vollständiger Pfad) zu Dateien (Videos, Fotos, Programme) enthalten.
Die Struktur ist folgende:
voller_Pfad>Beschreibung
voller_Pfad>Beschreibung
Fazit
Wir haben einen Backdoor-Server zur Verwaltung von Computern im lokalen Netzwerk (innerhalb des Wi-Fi-Netzes). Technisch gesehen können wir den Client von jedem Gerät aus starten, auf dem ein Python-Interpreter installiert ist.
P.S. Ich habe den Befehl set hinzugefügt, damit, wenn dem Computer im lokalen Netzwerk eine andere IP zugewiesen wird, sie direkt im Client geändert werden kann.
Quelle: habr.com
