Përshëndetje, Habr!
Së fundi, pash versionin e shkarkuar të stream-it mbi programimin "Si të krijosh aplikacionin tënd në Flask". Dhe vendosa të forcoj njohuritë e mia në ndonjë projekt. Nuk dija shumë çfarë të shkruaja dhe më erdhi ideja: "Pse të mos bëj një mini-backdoor në Flask?".
Në mendje më dolën menjëherë disa mundësi për realizimin dhe funksionalitetet e backdoor-it. Por vendosa të krijoj menjëherë një listë mundësish për backdoor-in:
- Të kem mundësinë të hap faqet e internetit
- Të kem qasje në terminalin e komandave
- Të kem mundësinë të hap programe, foto, video
Pra, pika e parĂ« realizohet shumĂ« lehtĂ« me modulin webbrowser. Punktin e dytĂ« e vendosa ta realizoj me modulin os. Dhe tĂ« tretin â gjithashtu pĂ«rmes modulit os, por do tĂ« pĂ«rdor "linket" (pĂ«r kĂ«tĂ« mĂ« vonĂ«).
Shkrimi serverë
Pra, *bateritë* ky është kodi i plotë i serverit:
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 'Serveri po funksionon dhe po pret komandat...'
if json_string['command'] == 'openweb':
webbrowser.open(url='https:\/\/www.'+json_string['data'], new=0)
return 'Hapja e faqes ' + 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 'Nisja ' + link.split('>')[1]
if __name__ == '__main__':
app.run(host='0.0.0.0')
Tani që e kam dhënë gjithë kodin, është koha të shpjegoj thelbin.
Gjatë kodit ekzekutohet në kompjuterin lokal në portin 5000. Për të komunikuar me server duhet të dërgojmë një kërkesë JSON POST.
Struktura e kërkesës JSON:
{âcommandâ: âcomecommandâ, âdataâ: âsomedataâ}Pra, logjikisht, âcommandâ Ă«shtĂ« komanda qĂ« duam tĂ« ekzekutojmĂ«. NdĂ«rsa âdataâ Ă«shtĂ« argumentet e komandĂ«s.
Mund të shkruani dhe dërgoni kërkesa JSON për të komunikuar me serverin me dorë (për këtë ju ndihmojnë requests). Ose 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:
Së pari, moduli requests importohet (për ndërveprimin me serverin). Më pas, përshkruhen funksionet start dhe test. Pastaj ka një cikël ku ndodh magjia. E lexuat kodin? Do të thotë, kuptoni kuptimin e magjisë që ndodh në cikël. Shkruani një komandë - ajo do të ekzekutohet. Shell - komandat për komandën e linjës (logjika është në majë).
Test - kontrolloni nëse serveri (backdoor) funksionon.
Link - përdorimi i "shkurtoreve".
Openweb - hapja e një website.
Quit - dalja nga klienti.
Set - caktimi i IP-së së kompjuterit tuaj në rrjetin lokal.
Tani le të flasim më shumë për link.
Pranë serverit ka një skedar link.txt. Në të ndodhen lidhje (rruga e plotë) të skedarëve (video, foto, programe).
Strukturë e tillë:
plot_i_plot>përshkrim
plot_i_plot>përshkrim
Përfundimi
Ne kemi një server-backdoor për të menaxhuar kompjuterin në rrjetin lokal (në brendësi të rrjetit wi-fi). Teknikisht mund të nisni klientin nga çdo pajisje që ka interpretuesin python.
P.S. Komandën set e kam shtuar që nëse kompjuterit në rrjetin lokal i jepet një IP tjetër, të mund të ndryshohet drejtpërdrejt në klient.
Burimi: habr.com
