Backdoor αžαžΌαž…αž˜αž½αž™αž“αŸ…αž›αžΎ Flask αž¬αžšαž”αŸ€αž”αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαž“αŸ…αž›αžΎαž”αžŽαŸ’αžαžΆαž‰αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“

ហេហេ!

αžαŸ’αž˜αžΈαŸ—αž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž˜αžΎαž›αž€αŸ†αžŽαŸ‚αžŠαŸ‚αž›αž”αžΆαž“αž‘αžΆαž‰αž™αž€αž“αŸƒαžŸαŸ’αž‘αŸ’αžšαžΈαž˜αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αžšαž”αŸ€αž”αž”αž„αŸ’αž€αžΎαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αžŽαŸ’αžαžΆαž‰ Flask αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” αž αžΎαž™αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž”αž„αŸ’αžšαž½αž”αž”αž„αŸ’αžšαž½αž˜αž…αŸ†αžŽαŸαŸ‡αžŠαžΉαž„αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž“αŸ…αž€αŸ’αž“αž»αž„αž‚αž˜αŸ’αžšαŸ„αž„αž˜αž½αž™αž…αŸ†αž“αž½αž“αŸ” αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αžŠαžΉαž„αžαžΆαžαŸ’αžšαžΌαžœαžŸαžšαžŸαŸαžšαž’αŸ’αžœαžΈαž‡αžΆαž™αžΌαžšαž˜αž€ αž αžΎαž™αž‚αŸ†αž“αž·αžαž”αžΆαž“αž˜αž€αžšαž€αžαŸ’αž‰αž»αŸ†αžαžΆ "αž αŸαžαž»αž’αŸ’αžœαžΈαž˜αž·αž“αž”αž„αŸ’αž€αžΎαž mini-backdoor αž“αŸ…αž›αžΎ Flask?"

αžœαŸ‰αžΆαžšαŸ’αž™αŸ‰αž„αŸ‹αžŠαŸ†αž”αžΌαž„αž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž“αž·αž„αž›αž‘αŸ’αž’αž—αžΆαž–αž“αŸƒ backdoor αž—αŸ’αž›αžΆαž˜αŸ—αž”αžΆαž“αž›αŸαž…αž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αž”αžΆαž›αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž…αž„αž€αŸ’αžšαž„αž”αž‰αŸ’αž‡αžΈαž“αŸƒαž˜αž»αžαž„αžΆαžš backdoor αž—αŸ’αž›αžΆαž˜αŸ—αŸ–

  1. αžŠαžΉαž„αž–αžΈαžšαž”αŸ€αž”αž”αžΎαž€αž‚αŸαž αž‘αŸ†αž–αŸαžš
  2. αž˜αžΆαž“αžŸαž·αž‘αŸ’αž’αž·αž…αžΌαž›αž”αŸ’αžšαžΎαž”αž“αŸ’αž‘αžΆαžαŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ
  3. αž’αžΆαž…αž”αžΎαž€αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αžšαžΌαž”αžαž វីដេធូ

αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž…αŸ†αžŽαž»αž…αž‘αžΈαž˜αž½αž™αž‚αžΊαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž”αŸ†αž•αž»αžαž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžŠαŸ„αž™αž”αŸ’αžšαžΎαž˜αŸ‰αžΌαžŒαž»αž›αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž»αž€αžšαž€αžαžΆαž˜αž’αŸŠαžΈαž“αž’αžΊαžŽαž·αžαŸ” αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž’αž“αž»αžœαžαŸ’αžαž…αŸ†αžŽαž»αž…αž‘αžΈαž–αžΈαžšαžŠαŸ„αž™αž”αŸ’αžšαžΎαž˜αŸ‰αžΌαžŒαž»αž› os αŸ” αž αžΎαž™αž‘αžΈαž”αžΈαž€αŸαžαžΆαž˜αžšαž™αŸˆαž˜αŸ‰αžΌαžŒαž»αž› os αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž”αŸ’αžšαžΎ "αžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹" (αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαž“αŸ…αž–αŸαž›αž€αŸ’αžšαŸ„αž™) αŸ”

αž€αžΆαžšαžŸαžšαžŸαŸαžšαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ

αžŠαžΌαž…αŸ’αž“αŸαŸ‡ *drumroll* αž€αžΌαžŠαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ–

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

αžαŸ’αž‰αž»αŸ†β€‹αž”αžΆαž“β€‹αž”αŸ„αŸ‡β€‹αž€αžΌαžŠβ€‹αž‘αžΆαŸ†αž„β€‹αž’αžŸαŸ‹β€‹αžšαž½αž…β€‹αž αžΎαž™ αžœαžΆβ€‹αžŠαž›αŸ‹β€‹αž–αŸαž›β€‹αžαŸ’αžšαžΌαžœβ€‹αž–αž“αŸ’αž™αž›αŸ‹β€‹αžαŸ’αž›αžΉαž˜αžŸαžΆαžšβ€‹αž αžΎαž™αŸ”

αž›αŸαžαž€αžΌαžŠαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž“αŸ…αž›αžΎαž…αŸ’αžšαž€ 5000αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž’αž“αŸ’αžαžšαž€αž˜αŸ’αž˜αž‡αžΆαž˜αž½αž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αž™αžΎαž„αžαŸ’αžšαžΌαžœαž•αŸ’αž‰αžΎαžŸαŸ†αžŽαžΎ JSON POST αŸ”

αžŸαŸ’αž“αžΎαžŸαž»αŸ†αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ JSONαŸ–

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

αž‡αžΆαž€αžΆαžšαž”αŸ’αžšαžŸαžΎαžšαžŽαžΆαžŸαŸ‹, αžœαžΆαžŸαž˜αž αŸαžαž»αž•αž›αžαžΆ 'αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ' αž‚αžΊαž‡αžΆαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžŠαŸ‚αž›αž™αžΎαž„αž…αž„αŸ‹αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αŸ” αž αžΎαž™ 'αž‘αž·αž“αŸ’αž“αž“αŸαž™' αž‚αžΊαž‡αžΆαž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαŸ”

αž’αŸ’αž“αž€αž’αžΆαž…αžŸαžšαžŸαŸαžš αž“αž·αž„αž•αŸ’αž‰αžΎαžŸαŸ†αžŽαžΎ JSON αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž’αž“αŸ’αžαžšαž€αž˜αŸ’αž˜αž‡αžΆαž˜αž½αž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžŠαŸ„αž™αžŠαŸƒ (αžŸαŸ†αžŽαžΎαž“αžΉαž„αž‡αž½αž™αž’αŸ’αž“αž€)αŸ” αž αžΎαž™αžœαžΆαž‚αžΊαž’αžΆαž…αž’αŸ’αžœαžΎαž‘αŸ…αž”αžΆαž“αžŠαžΎαž˜αŸ’αž”αžΈαžŸαžšαžŸαŸαžšαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœαž€αž»αž„αžŸαžΌαž›αŸ”

αž€αžΆαžšαžŸαžšαžŸαŸαžšαž’αžαž·αžαž·αž‡αž“

αž›αŸαžαž€αžΌαžŠ:

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

αž€αžΆαžšαž–αž“αŸ’αž™αž›αŸ‹αŸ–

αž‡αŸ†αž αžΆαž“αžŠαŸ†αž”αžΌαž„αž‚αžΊαžαŸ’αžšαžΌαžœαž“αžΆαŸ†αž…αžΌαž›αž˜αŸ‰αžΌαžŒαž»αž›αžŸαŸ†αžŽαžΎ (αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž’αž“αŸ’αžαžšαž€αž˜αŸ’αž˜αž‡αžΆαž˜αž½αž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ) αŸ” αž€αžΆαžšαž–αž·αž–αžŽαŸŒαž“αžΆαž”αž“αŸ’αžαŸ‚αž˜αž’αŸ†αž–αžΈαž˜αž»αžαž„αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ αž“αž·αž„αžŸαžΆαž€αž›αŸ’αž”αž„αŸ” αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžœαžŠαŸ’αžαžŠαŸ‚αž›αžœαŸαž‘αž˜αž“αŸ’αžαž€αžΎαžαž‘αžΎαž„αŸ” αžαžΎαž’αŸ’αž“αž€αž”αžΆαž“αž’αžΆαž“αž€αžΌαžŠαž αžΎαž™αž¬αž“αŸ…? αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž’αŸ’αž“αž€αž™αž›αŸ‹αž–αžΈαž’αžαŸ’αžαž“αŸαž™αž“αŸƒαžœαŸαž‘αž˜αž“αŸ’αžαžŠαŸ‚αž›αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αžœαžŠαŸ’αžαŸ” αž”αž‰αŸ’αž…αžΌαž›αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ - αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αŸ” αžŸαŸ‚αž› - αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž“αŸ’αž‘αžΆαžαŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ (αžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαž”αž·αž‘αžαŸ’αž“αžΆαž) αŸ”

αžŸαžΆαž€αž›αŸ’αž”αž„ - αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαžΆαžαžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš (backdoor)
αžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹ - αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ "αž•αŸ’αž›αžΌαžœαž€αžΆαžαŸ‹"
Openweb - αž€αžΆαžšαž”αžΎαž€αž‚αŸαž αž‘αŸ†αž–αŸαžš
αž…αžΆαž€αž…αŸαž‰ - αž…αŸαž‰αž–αžΈαž’αžαž·αžαž·αž‡αž“
αž€αŸ†αžŽαžαŸ‹ - αž€αŸ†αžŽαžαŸ‹ IP αž“αŸƒαž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž“αŸ…αž›αžΎαž”αžŽαŸ’αžαžΆαž‰αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“

αž αžΎαž™αž₯αž‘αžΌαžœαž“αŸαŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αž›αž˜αŸ’αž’αž·αžαž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαž’αŸ†αž–αžΈαžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹αŸ”

αž“αŸ…αž‡αžΆαž”αŸ‹αž“αžΉαž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž‚αžΊαž―αž€αžŸαžΆαžš link.txt αŸ” αžœαžΆαž˜αžΆαž“αžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹ (αž•αŸ’αž›αžΌαžœαž–αŸαž‰) αž‘αŸ…αž―αž€αžŸαžΆαžš (វីដេធូ αžšαžΌαž”αžαž αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ)αŸ”

αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‚αžΊαžŠαžΌαž…αž“αŸαŸ‡αŸ–

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

αž›αž‘αŸ’αž’αž•αž›

αž™αžΎαž„αž˜αžΆαž“αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ backdoor αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαž“αŸ…αž›αžΎαž”αžŽαŸ’αžαžΆαž‰αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ (αž€αŸ’αž“αž»αž„αž”αžŽαŸ’αžαžΆαž‰ Wi-Fi) αŸ” αžαžΆαž˜αž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸ αž™αžΎαž„αž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœαž–αžΈαž§αž”αž€αžšαžŽαŸαžŽαžΆαž˜αž½αž™αžŠαŸ‚αž›αž˜αžΆαž“αž’αŸ’αž“αž€αž”αž€αž”αŸ’αžšαŸ‚ python αŸ”

PS αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ set αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž”αŸ’αžšαžŸαž·αž“αž”αžΎ ip αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž‘αŸ…αž±αŸ’αž™αž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαž“αŸ…αž›αžΎαž”αžŽαŸ’αžαžΆαž‰αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžαžΌαžšαžœαžΆαžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœαŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹