Ẹnu ẹhin kekere lori Flask tabi bii o ṣe le ṣakoso kọnputa lori nẹtiwọọki agbegbe kan

Hey Habr!

Laipẹ Mo wo ẹya ti a ṣe igbasilẹ ti ṣiṣan siseto “Bi o ṣe le ṣẹda ohun elo wẹẹbu tirẹ ni Flask.” Mo si pinnu lati fese mi imo ni diẹ ninu awọn ise agbese. Fun igba pipẹ Emi ko mọ kini lati kọ ati imọran naa wa si mi: “Kini idi ti o ko ṣe mini-backdoor ni Flask?”

Awọn aṣayan akọkọ fun awọn imuse ati awọn agbara ti ẹhin ẹhin lẹsẹkẹsẹ han ni ori mi. Ṣugbọn Mo pinnu lati ṣe atokọ lẹsẹkẹsẹ ti awọn agbara ẹhin:

  1. Mọ bi o ṣe le ṣii awọn oju opo wẹẹbu
  2. Ni wiwọle laini aṣẹ
  3. Ni anfani lati ṣii awọn eto, awọn fọto, awọn fidio

Nitorinaa, aaye akọkọ jẹ rọrun pupọ lati ṣe ni lilo module aṣawakiri wẹẹbu. Mo ti pinnu a se awọn keji ojuami lilo OS module. Ati awọn kẹta jẹ tun nipasẹ OS module, ṣugbọn emi o lo "ìjápọ" (diẹ sii lori wipe nigbamii).

Kikọ olupin

Nitorinaa, * drumroll * gbogbo koodu olupin:

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

Mo ti sọ gbogbo koodu naa silẹ tẹlẹ, o to akoko lati ṣe alaye pataki naa.

Gbogbo koodu nṣiṣẹ lori kọnputa agbegbe lori ibudo 5000. Lati ṣe ajọṣepọ pẹlu olupin naa, a gbọdọ fi ibeere JSON POST ranṣẹ.

Ilana ibeere JSON:

{‘command’:  ‘comecommand’, ‘data’: ‘somedata’}

O dara, o ni oye pe 'aṣẹ' ni aṣẹ ti a fẹ lati ṣiṣẹ. Ati 'data' jẹ awọn ariyanjiyan aṣẹ.

O le kọ ati firanṣẹ awọn ibeere JSON lati ṣe ajọṣepọ pẹlu olupin pẹlu ọwọ (awọn ibeere yoo ran ọ lọwọ). Tabi o le kọ onibara console kan.

Kikọ kan ni ose

Koodu:

import requests

logo = ['nn',
        '******      ********',
        '*******     *********',
        '**    **    **     **',
        '**    **    **     **      Written on Python',
        '*******     **     **',
        '********    **     **',
        '**     **   **     **      Author: 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('Комманда не содержит аргументов!')
    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

Awọn alaye:

Ni akọkọ, a gbe wọle module ibeere (fun ibaraenisepo pẹlu olupin). Ni isalẹ wa awọn apejuwe ti ibẹrẹ ati awọn iṣẹ idanwo. Ati ki o si awọn ọmọ ninu eyi ti awọn idan ṣẹlẹ. Njẹ o ti ka koodu naa? Nitorina o loye itumọ idan ti o ṣẹlẹ ninu iyipo. Tẹ aṣẹ sii - o ti ṣiṣẹ. Shell – awọn pipaṣẹ fun laini aṣẹ (ọgbọn naa wa ni pipa iwọn).

Idanwo – ṣayẹwo boya olupin naa nṣiṣẹ (ẹnu ẹhin)
Ọna asopọ – lilo “ọna abuja”
Openweb – ṣiṣi oju opo wẹẹbu kan
Jade – jade ni ose
Ṣeto – ṣeto ip ti kọmputa rẹ lori nẹtiwọki agbegbe

Ati nisisiyi diẹ sii nipa ọna asopọ.

Faili link.txt wa lẹgbẹẹ olupin naa. O ni awọn ọna asopọ (ọna kikun) si awọn faili (awọn fidio, awọn fọto, awọn eto).

Ilana naa jẹ bi eleyi:

полный_путь>описание
полный_путь>описание

Abajade

A ni olupin ẹhin ẹhin fun ṣiṣakoso kọnputa lori nẹtiwọọki agbegbe kan (laarin nẹtiwọọki wi-fi). Ni imọ-ẹrọ, a le ṣiṣẹ alabara lati ẹrọ eyikeyi ti o ni onitumọ Python.

PS Mo ṣafikun aṣẹ ti o ṣeto pe ti kọnputa kan lori nẹtiwọọki agbegbe ba ti sọtọ IP ti o yatọ, o le yipada taara ni alabara.

orisun: www.habr.com

Fi ọrọìwòye kun