Autarch/web/routes/starlink_hack.py

240 lines
6.7 KiB
Python
Raw Permalink Normal View History

"""Starlink Terminal Security Analysis routes."""
from flask import Blueprint, request, jsonify, render_template
from web.auth import login_required
starlink_hack_bp = Blueprint('starlink_hack', __name__, url_prefix='/starlink-hack')
_mgr = None
def _get_mgr():
global _mgr
if _mgr is None:
from modules.starlink_hack import get_starlink_hack
_mgr = get_starlink_hack()
return _mgr
@starlink_hack_bp.route('/')
@login_required
def index():
return render_template('starlink_hack.html')
@starlink_hack_bp.route('/status')
@login_required
def status():
return jsonify(_get_mgr().get_status())
@starlink_hack_bp.route('/discover', methods=['POST'])
@login_required
def discover():
data = request.get_json(silent=True) or {}
ip = data.get('ip')
return jsonify(_get_mgr().discover_dish(ip=ip))
@starlink_hack_bp.route('/dish-status')
@login_required
def dish_status():
return jsonify(_get_mgr().get_dish_status())
@starlink_hack_bp.route('/dish-info')
@login_required
def dish_info():
return jsonify(_get_mgr().get_dish_info())
@starlink_hack_bp.route('/network')
@login_required
def network():
return jsonify(_get_mgr().get_network_info())
@starlink_hack_bp.route('/scan-ports', methods=['POST'])
@login_required
def scan_ports():
data = request.get_json(silent=True) or {}
target = data.get('target')
return jsonify(_get_mgr().scan_dish_ports(target=target))
@starlink_hack_bp.route('/grpc/enumerate', methods=['POST'])
@login_required
def grpc_enumerate():
data = request.get_json(silent=True) or {}
host = data.get('host')
port = int(data['port']) if data.get('port') else None
return jsonify(_get_mgr().grpc_enumerate(host=host, port=port))
@starlink_hack_bp.route('/grpc/call', methods=['POST'])
@login_required
def grpc_call():
data = request.get_json(silent=True) or {}
method = data.get('method', '')
params = data.get('params')
if not method:
return jsonify({'ok': False, 'error': 'method is required'})
return jsonify(_get_mgr().grpc_call(method, params))
@starlink_hack_bp.route('/grpc/stow', methods=['POST'])
@login_required
def grpc_stow():
return jsonify(_get_mgr().stow_dish())
@starlink_hack_bp.route('/grpc/unstow', methods=['POST'])
@login_required
def grpc_unstow():
return jsonify(_get_mgr().unstow_dish())
@starlink_hack_bp.route('/grpc/reboot', methods=['POST'])
@login_required
def grpc_reboot():
return jsonify(_get_mgr().reboot_dish())
@starlink_hack_bp.route('/grpc/factory-reset', methods=['POST'])
@login_required
def grpc_factory_reset():
data = request.get_json(silent=True) or {}
confirm = data.get('confirm', False)
return jsonify(_get_mgr().factory_reset(confirm=confirm))
@starlink_hack_bp.route('/firmware/check', methods=['POST'])
@login_required
def firmware_check():
return jsonify(_get_mgr().check_firmware_version())
@starlink_hack_bp.route('/firmware/analyze', methods=['POST'])
@login_required
def firmware_analyze():
import os
from flask import current_app
if 'file' in request.files:
f = request.files['file']
if f.filename:
upload_dir = current_app.config.get('UPLOAD_FOLDER', '/tmp')
save_path = os.path.join(upload_dir, f.filename)
f.save(save_path)
return jsonify(_get_mgr().analyze_firmware(save_path))
data = request.get_json(silent=True) or {}
fw_path = data.get('path', '')
if not fw_path:
return jsonify({'ok': False, 'error': 'No firmware file provided'})
return jsonify(_get_mgr().analyze_firmware(fw_path))
@starlink_hack_bp.route('/firmware/debug', methods=['POST'])
@login_required
def firmware_debug():
return jsonify(_get_mgr().find_debug_interfaces())
@starlink_hack_bp.route('/firmware/dump', methods=['POST'])
@login_required
def firmware_dump():
data = request.get_json(silent=True) or {}
output_path = data.get('output_path')
return jsonify(_get_mgr().dump_firmware(output_path=output_path))
@starlink_hack_bp.route('/network/intercept', methods=['POST'])
@login_required
def network_intercept():
data = request.get_json(silent=True) or {}
target_ip = data.get('target_ip')
interface = data.get('interface')
return jsonify(_get_mgr().intercept_traffic(target_ip=target_ip, interface=interface))
@starlink_hack_bp.route('/network/intercept/stop', methods=['POST'])
@login_required
def network_intercept_stop():
return jsonify(_get_mgr().stop_intercept())
@starlink_hack_bp.route('/network/dns-spoof', methods=['POST'])
@login_required
def network_dns_spoof():
data = request.get_json(silent=True) or {}
domain = data.get('domain', '')
ip = data.get('ip', '')
interface = data.get('interface')
if not domain or not ip:
return jsonify({'ok': False, 'error': 'domain and ip are required'})
return jsonify(_get_mgr().dns_spoof(domain, ip, interface=interface))
@starlink_hack_bp.route('/network/dns-spoof/stop', methods=['POST'])
@login_required
def network_dns_spoof_stop():
return jsonify(_get_mgr().stop_dns_spoof())
@starlink_hack_bp.route('/network/mitm', methods=['POST'])
@login_required
def network_mitm():
data = request.get_json(silent=True) or {}
interface = data.get('interface')
return jsonify(_get_mgr().mitm_clients(interface=interface))
@starlink_hack_bp.route('/network/deauth', methods=['POST'])
@login_required
def network_deauth():
data = request.get_json(silent=True) or {}
target_mac = data.get('target_mac')
interface = data.get('interface')
return jsonify(_get_mgr().deauth_clients(target_mac=target_mac, interface=interface))
@starlink_hack_bp.route('/rf/downlink', methods=['POST'])
@login_required
def rf_downlink():
data = request.get_json(silent=True) or {}
duration = int(data.get('duration', 30))
device = data.get('device', 'hackrf')
return jsonify(_get_mgr().analyze_downlink(duration=duration, device=device))
@starlink_hack_bp.route('/rf/uplink', methods=['POST'])
@login_required
def rf_uplink():
data = request.get_json(silent=True) or {}
duration = int(data.get('duration', 30))
return jsonify(_get_mgr().analyze_uplink(duration=duration))
@starlink_hack_bp.route('/rf/jamming', methods=['POST'])
@login_required
def rf_jamming():
return jsonify(_get_mgr().detect_jamming())
@starlink_hack_bp.route('/cves')
@login_required
def cves():
return jsonify(_get_mgr().check_known_cves())
@starlink_hack_bp.route('/exploits')
@login_required
def exploits():
return jsonify(_get_mgr().get_exploit_database())
@starlink_hack_bp.route('/export', methods=['POST'])
@login_required
def export():
data = request.get_json(silent=True) or {}
path = data.get('path')
return jsonify(_get_mgr().export_results(path=path))