Përshëndetje, Habr!
Së fundmi kam parë versionin e shkarkuar të transmetimit mbi programimin 'Si të krijosh aplikacionin tënd në Flask'. Dhe vendosa të forcoj njohuritë e mia në ndonjë projekt. Nuk dija çfarë të shkruaj dhe më erdhi ideja: 'Pse të mos bëj një mini-backdoor në Flask?'.
Menjëherë më erdhën disa variante realizimi dhe mundësish për backdoor-in. Por vendosa të përgatis një listë mundësish për backdoor-in:
- Të mund të hapë faqet e internetit
- Të ketë qasje në komandën e linjës
- Të mund të hapë programe, fotografi, video
NĂ« kĂ«tĂ« pikĂ«, e para Ă«shtĂ« shumĂ« e lehtĂ« pĂ«r t'u realizuar me modulin webbrowser. PikĂ«n e dytĂ« vendosa ta realizoj me modulin os. Dhe tĂ« tretĂ«n â gjithashtu pĂ«rmes modulit os, por do tĂ« pĂ«rdor 'linket' (pĂ«r kĂ«tĂ« mĂ« vonĂ«).
Shkrimi server
Pra, *të gjitha duar duar* të gjithë kodin e serverit:
nga 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 'Serveri është duke funksionuar dhe po pret komandat...'
if json_string['command'] == 'openweb':
webbrowser.open(url='https://www.'+json_string['data'], new=0)
return 'Duke hapur faqen ' + json_string['data'] + '...'
if json_string['command'] == 'shell':
os.system(json_string['data'])
return 'Ekzekutimi i komandës ' + 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 'Filloni ' + link.split('>')[1]
if __name__ == '__main__':
app.run(host='0.0.0.0')
Kisha hedhur gjithë kodin, tani është koha të shpjegoj thelbin.
GjatĂ« tĂ«rĂ« kodit, ai запŃŃĐșаДŃŃŃ nĂ« kompjuterin lokal nĂ« portin 5000. PĂ«r tu lidhur me serverin duhet tĂ« dĂ«rgojmĂ« njĂ« kĂ«rkesĂ« JSON POST.
Struktura e kërkesës JSON:
{âcommandâ: âcomecommandâ, âdataâ: âsomedataâ}E arsyeshme, âcommandâ Ă«shtĂ« komandĂ« qĂ« dĂ«shirojmĂ« tĂ« ekzekutojmĂ«. NdĂ«rsa âdataâ janĂ« argumentet e komandĂ«s.
Mund të shkruani dhe dërgoni kërkesa JSON për të komunikuar me serverin manualisht (kini në ndihmë requests). Po ashtu mund të shkruani një klient konsolë.
Shkrimi i klientit
Kodi:
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('Komanda nuk përmban argumente!')
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('Komanda nuk përmban argumente!')
if a[0] == 'set':
if a[1] == 'host':
ip = a[2] + ':5000'
if command == 'quit':
break
Shpjegimet:
E para qĂ« importohet Ă«shtĂ« moduli requests (pĂ«r t'u lidhur me serverin). MĂ« pas, pĂ«rshkruhen funksionet start dhe test. Pastaj vjen cikli ku ndodh magjia. A keni lexuar kodin? AtĂ«herĂ« ju Ă«shtĂ« e qartĂ« kuptimi i magjisĂ« qĂ« ndodh nĂ« cikĂ«l. Shkruani komandĂ«n - ajo ekzekutohet. Shell â komandat pĂ«r komandĂ« (logjika Ă«shtĂ« e lartĂ«).
Test â kontrollon nĂ«se serveri (backdoor) Ă«shtĂ« duke punuar
Link â pĂ«rdorimi i "shkurtoreve"
Openweb â hapja e faqes
Quit â dalja nga klienti
Set â pĂ«rcaktimi i ip-sĂ« sĂ« kompjuterit tuaj nĂ« rrjetin lokal
Tani le të flasim më në detaje për link.
Pranë serverit ndodhet skedari link.txt. Në të janë të dhëna lidhjesh (rruga e plotë) për skedarët (video, foto, programe).
Struktura është kështu:
пërshkrimi
пërshkrimi
Përfundimi
Ne kemi një server-backdoor për menaxhimin e kompjuterëve në rrjetin lokal (brenda rrjetit wi-fi). Teknikisht, ne mund të startojmë klientin nga çdo pajisje që ka një interpretor Python.
P.S. Komandën set e kam shtuar për të mundësuar që, nëse kompjuterit në rrjetin lokal i jepet një ip tjetër, mund ta ndryshoni atë direkt në klient.
Burimi: habr.com
