Hoy Habr!
Bag-o lang ako nagtan-aw sa usa ka na-download nga bersyon sa programming stream "Unsaon paghimo sa imong kaugalingong web application sa Flask." Ug nakahukom ko sa pagkonsolida sa akong kahibalo sa pipila ka proyekto. Sulod sa dugay nga panahon wala ko mahibal-an kung unsa ang isulat ug ang ideya miabut kanako: "Ngano nga dili maghimo og mini-backdoor sa Flask?"
Ang unang mga kapilian alang sa pagpatuman ug mga kapabilidad sa backdoor diha-diha dayon mitungha sa akong ulo. Apan nakahukom ko nga maghimo dayon og lista sa mga kapabilidad sa backdoor:
- Kahibalo unsaon pag-abli sa mga website
- Adunay pag-access sa command line
- Mahimong magbukas sa mga programa, litrato, video
Busa, ang unang punto sayon ββkaayo nga ipatuman gamit ang webbrowser module. Nakahukom ko nga ipatuman ang ikaduhang punto gamit ang os module. Ug ang ikatulo pinaagi usab sa os module, apan akong gamiton ang "mga link" (dugang pa niana sa ulahi).
Pagsulat sa usa ka server
Busa, *drumroll* ang tanang server code:
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')
Gilabay na nako ang tanan nga code, panahon na aron ipasabut ang esensya.
Ang tanan nga code nagdagan sa lokal nga kompyuter sa port 5000. Aron makig-uban sa server, kinahanglan nga magpadala kami usa ka hangyo sa JSON POST.
Estruktura sa hangyo sa JSON:
{βcommandβ: βcomecommandβ, βdataβ: βsomedataβ}
Aw, makatarunganon nga ang 'sugo' mao ang mando nga gusto naton ipatuman. Ug ang 'data' mao ang mga argumento sa command.
Mahimo nimong isulat ug ipadala ang mga hangyo sa JSON aron mano-mano nga makig-uban sa server (makatabang kanimo ang mga hangyo). O mahimo ka magsulat usa ka kliyente sa console.
Pagsulat sa usa ka kliyente
Code:
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
Mga Katin-awan:
Una sa tanan, ang module sa mga hangyo gi-import (alang sa pagpakig-uban sa server). Sa ubos mao ang mga paghulagway sa pagsugod ug pagsulay nga mga gimbuhaton. Ug dayon ang siklo diin ang salamangka mahitabo. Nabasa ba nimo ang code? Busa nasabtan nimo ang kahulogan sa salamangka nga mahitabo sa siklo. Pagsulod sa sugo - kini gipatuman. Shell β mga sugo alang sa command line (ang lohika dili sukod).
Pagsulay - susiha kung ang server nagdagan (backdoor)
Link - paggamit sa usa ka "shortcut"
Openweb - pagbukas sa usa ka website
Pag-undang - paggawas sa kliyente
Itakda β i-set ang ip sa imong computer sa lokal nga network
Ug karon dugang bahin sa link.
Adunay link.txt file sunod sa server. Naglangkob kini og mga link (bug-os nga agianan) sa mga file (mga video, litrato, mga programa).
Ang istruktura sama niini:
ΠΏΠΎΠ»Π½ΡΠΉ_ΠΏΡΡΡ>ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅
ΠΏΠΎΠ»Π½ΡΠΉ_ΠΏΡΡΡ>ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅
Ang resulta
Kami adunay backdoor server alang sa pagkontrol sa usa ka kompyuter sa usa ka lokal nga network (sa sulod sa usa ka wi-fi network). Sa teknikal nga paagi, mahimo namon nga mapadagan ang kliyente gikan sa bisan unsang aparato nga adunay tighubad sa python.
PS Gidugang nako ang set command aron kung ang usa ka computer sa lokal nga network gi-assign sa usa ka lahi nga IP, mahimo kini nga mabag-o direkta sa kliyente.
Source: www.habr.com