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
