backdoor เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเปƒเบ™ Flask เบซเบผเบทเบงเบดเบ—เบตเบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบ„เบญเบกเบžเบดเบงเป€เบ•เบตเบขเบนเปˆเปƒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™

Hey Habr!

เบšเปเปˆเบ”เบปเบ™เบกเบฒเบ™เบตเป‰เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบšเบดเปˆเบ‡เบชเบฐเบšเบฑเบšเบ”เบฒเบงเป‚เบซเบผเบ”เบ‚เบญเบ‡เบฅเบฒเบเบเบฒเบ™เบฅเบฒเบเบเบฒเบ™เบฅเบฒเบเบเบฒเบ™ "เบงเบดเบ—เบตเบเบฒเบ™เบชเป‰เบฒเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเป€เบงเบฑเบšเป„เบŠเบ•เปŒเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡เปƒเบ™ Flask." เปเบฅเบฐเบ‚เป‰เบญเบเป„เบ”เป‰เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบฅเบงเบšเบฅเบงเบกเบ„เบงเบฒเบกเบฎเบนเป‰เบ‚เบญเบ‡เบ‚เป‰เบญเบเปƒเบ™เบšเบฒเบ‡เป‚เบ„เบ‡เบเบฒเบ™. เป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบ”เบปเบ™เบ—เบตเปˆเบ‚เป‰เบญเบเบšเปเปˆเบฎเบนเป‰เบงเปˆเบฒเบˆเบฐเบ‚เบฝเบ™เบซเบเบฑเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบ„เบดเบ”เบเปเปˆเบกเบฒเบฎเบญเบ”เบ‚เป‰เบญเบ: "เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบšเปเปˆเป€เบฎเบฑเบ” mini-backdoor เปƒเบ™ Flask?"

เบ•เบปเบงเป€เบฅเบทเบญเบเบ—เปเบฒเบญเบดเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปเบฅเบฐเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ‚เบญเบ‡ 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 เป€เบžเบทเปˆเบญเป‚เบ•เป‰เบ•เบญเบšเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡ (เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™). เบซเบผเบทเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เบฅเบนเบเบ„เป‰เบฒ console.

เบเบฒเบ™เบ‚เบฝเบ™เบฅเบนเบเบ„เป‰เบฒ

เบฅเบฐเบซเบฑเบ”:

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

เบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบ:

เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ”, เป‚เบกเบ”เบนเบ™เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ–เบทเบเบ™เปเบฒเป€เบ‚เบปเป‰เบฒ (เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบžเบปเบงเบžเบฑเบ™เบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ). เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เปเบกเปˆเบ™เบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบเปˆเบฝเบงเบเบฑเบšเบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบฅเบฐเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš. เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบงเบปเบ‡เบˆเบญเบ™เบ—เบตเปˆ magic เป€เบเบตเบ”เบ‚เบถเป‰เบ™. เป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบญเปˆเบฒเบ™เบฅเบฐเบซเบฑเบ”เบšเป? เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เป€เบ‚เบปเป‰เบฒเปƒเบˆเบ„เบงเบฒเบกเบซเบกเบฒเบเบ‚เบญเบ‡ magic เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™เปƒเบ™เบงเบปเบ‡เบˆเบญเบ™. เปƒเบชเปˆเบ„เปเบฒเบชเบฑเปˆเบ‡ - เบกเบฑเบ™เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”. Shell โ€“ เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบšเบฑเบ™โ€‹เบŠเบตโ€‹เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡ (เบ•เบฒเบกโ€‹เป€เบซเบ”โ€‹เบœเบปเบ™โ€‹เปเบกเปˆเบ™โ€‹เบ™เบญเบโ€‹เบ‚เบฐโ€‹เบซเบ™เบฒเบ”โ€‹)โ€‹.

เบ—เบปเบ”เบชเบญเบš โ€“ เบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเป€เบŠเบตเบšเป€เบงเบตเบเบณเบฅเบฑเบ‡เปเบฅเปˆเบ™เบขเบนเปˆเบซเบผเบทเบšเปเปˆ (backdoor)
เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ - เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ "เบ—เบฒเบ‡เบฅเบฑเบ”"
Openweb - เบเบฒเบ™โ€‹เป€เบ›เบตเบ”โ€‹เป€เบงเบฑเบšโ€‹เป„เบŠโ€‹เบ—โ€‹เปŒโ€‹
เบญเบญเบเบˆเบฒเบ - เบญเบญเบเบˆเบฒเบเบฅเบนเบเบ„เป‰เบฒ
เบ•เบฑเป‰เบ‡ โ€“ เบ•เบฑเป‰เบ‡ IP เบ‚เบญเบ‡เบ„เบญเบกเบžเบดเบงเป€เบ•เบตเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบขเบนเปˆเปƒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™

เปเบฅเบฐเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ.

เบกเบตเป„เบŸเบฅเปŒ link.txt เบขเบนเปˆเบ‚เป‰เบฒเบ‡เป€เบŠเบตเบšเป€เบงเบต. เบกเบฑเบ™โ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เบ”เป‰เบงเบโ€‹เบเบฒเบ™โ€‹เป€เบŠเบทเปˆเบญเบกโ€‹เบ•เปเปˆ (เป€เบชเบฑเป‰เบ™โ€‹เบ—เบฒเบ‡โ€‹เป€เบ•เบฑเบกโ€‹) เบเบฑเบšโ€‹เป„เบŸเบฅโ€‹เปŒ (เบงเบดโ€‹เบ”เบตโ€‹เป‚เบญโ€‹, เบฎเบนเบšโ€‹เบžเบฒเบšโ€‹, เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹)โ€‹.

เป‚เบ„เบ‡โ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เบเบฒเบ™โ€‹เปเบกเปˆเบ™โ€‹เบ”เบฑเปˆเบ‡โ€‹เบ™เบตเป‰โ€‹:

ะฟะพะปะฝั‹ะน_ะฟัƒั‚ัŒ>ะพะฟะธัะฐะฝะธะต
ะฟะพะปะฝั‹ะน_ะฟัƒั‚ัŒ>ะพะฟะธัะฐะฝะธะต

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš

เบžเบงเบเป€เบฎเบปเบฒเบกเบตเป€เบŠเบตเบšเป€เบงเบต backdoor เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบ„เบญเบกเบžเบดเบงเป€เบ•เบตเบขเบนเปˆเปƒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™ (เบžเบฒเบเปƒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบ wi-fi). เบ”เป‰เบฒเบ™เบงเบดเบŠเบฒเบเบฒเบ™, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบฅเบนเบเบ„เป‰เบฒเบˆเบฒเบเบญเบธเบ›เบฐเบเบญเบ™เปƒเบ”เป†เบ—เบตเปˆเบกเบตเบ™เบฒเบเบžเบฒเบชเบฒ python.

PS เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบžเบตเปˆเบกเบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เป€เบžเบทเปˆเบญเบงเปˆเบฒเบ–เป‰เบฒเบ„เบญเบกเบžเบดเบงเป€เบ•เบตเปƒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เบ–เบทเบเบกเบญเบšเบซเบกเบฒเบ IP เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เปเบ›เบ‡เป„เบ”เป‰เป‚เบ”เบเบเบปเบ‡เปƒเบ™เบฅเบนเบเบ„เป‰เบฒ.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™