98103466d8
Sanitized version of red team infrastructure automation platform. Operational content (implant pipelines, lures, credential capture) replaced with documented stubs. Architecture and infrastructure automation code intact.
302 lines
10 KiB
Bash
302 lines
10 KiB
Bash
#!/bin/bash
|
|
# post_install_c2.sh - Post-installation setup for C2 server
|
|
|
|
# ANSI color codes
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
RED='\033[0;31m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Default settings
|
|
DEBUG=false
|
|
RUN_ON_REDIRECTOR=false
|
|
|
|
# Show usage information
|
|
function show_usage() {
|
|
echo "Usage: $0 [options]"
|
|
echo ""
|
|
echo "Options:"
|
|
echo " -d, --debug Enable debug/verbose output"
|
|
echo " -r, --run-on-redirector Run post-install script on redirector"
|
|
echo " -h, --help Show this help message"
|
|
echo ""
|
|
}
|
|
|
|
# Process command line arguments
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
-d|--debug)
|
|
DEBUG=true
|
|
shift
|
|
;;
|
|
-r|--run-on-redirector)
|
|
RUN_ON_REDIRECTOR=true
|
|
shift
|
|
;;
|
|
-h|--help)
|
|
show_usage
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "Unknown option: $1"
|
|
show_usage
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Debug function - only prints if DEBUG is true
|
|
function debug() {
|
|
if [ "$DEBUG" = true ]; then
|
|
echo -e "${BLUE}[DEBUG] $1${NC}"
|
|
fi
|
|
}
|
|
|
|
echo -e "${BLUE}==================================================${NC}"
|
|
echo -e "${BLUE} C2ingRed Post-Installation Setup - C2 Server ${NC}"
|
|
echo -e "${BLUE}==================================================${NC}"
|
|
|
|
# Function to check if domain resolves to current IP
|
|
check_dns() {
|
|
domain=$1
|
|
current_ip=$(curl -s ifconfig.me)
|
|
resolved_ip=$(dig +short $domain)
|
|
|
|
debug "Checking DNS for $domain"
|
|
debug "Current IP: $current_ip"
|
|
debug "Resolved IP: $resolved_ip"
|
|
|
|
if [ "$resolved_ip" = "$current_ip" ]; then
|
|
echo -e "${GREEN}DNS check passed for $domain!${NC}"
|
|
return 0
|
|
else
|
|
echo -e "${YELLOW}DNS check failed for $domain${NC}"
|
|
echo -e "Current IP: $current_ip"
|
|
echo -e "Resolved IP: $resolved_ip or not set"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Function to set up Let's Encrypt
|
|
setup_letsencrypt() {
|
|
domain=$1
|
|
email=$2
|
|
|
|
echo -e "\n${BLUE}Setting up Let's Encrypt for $domain${NC}"
|
|
debug "Domain: $domain, Email: $email"
|
|
|
|
# Stop Havoc service temporarily to free port 80
|
|
systemctl stop havoc 2>/dev/null
|
|
debug "Stopped Havoc service"
|
|
|
|
# Get certificate
|
|
debug "Running certbot to obtain certificate"
|
|
if [ "$DEBUG" = true ]; then
|
|
certbot certonly --standalone -d $domain -m $email --agree-tos --non-interactive
|
|
else
|
|
certbot certonly --standalone -d $domain -m $email --agree-tos --non-interactive >/dev/null 2>&1
|
|
fi
|
|
|
|
cert_result=$?
|
|
debug "Certbot result code: $cert_result"
|
|
|
|
if [ $cert_result -eq 0 ]; then
|
|
echo -e "${GREEN}Successfully obtained certificate for $domain${NC}"
|
|
|
|
# Configure applications to use the certificate if needed
|
|
if [ -f "/etc/postfix/main.cf" ]; then
|
|
debug "Updating Postfix configuration with new certificate"
|
|
sed -i "s|^smtpd_tls_cert_file =.*|smtpd_tls_cert_file = /etc/letsencrypt/live/$domain/fullchain.pem|" /etc/postfix/main.cf
|
|
sed -i "s|^smtpd_tls_key_file =.*|smtpd_tls_key_file = /etc/letsencrypt/live/$domain/privkey.pem|" /etc/postfix/main.cf
|
|
fi
|
|
|
|
# Restart Havoc
|
|
debug "Restarting Havoc service"
|
|
systemctl start havoc
|
|
|
|
return 0
|
|
else
|
|
echo -e "${RED}Failed to obtain certificate for $domain${NC}"
|
|
|
|
# Restart Havoc
|
|
debug "Restarting Havoc service"
|
|
systemctl start havoc
|
|
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Function to display DKIM/DMARC records
|
|
show_dns_records() {
|
|
domain=$1
|
|
|
|
debug "Showing DNS records for $domain"
|
|
|
|
if [ -f "/etc/opendkim/keys/$domain/mail.txt" ]; then
|
|
echo -e "\n${BLUE}DKIM DNS Record Information for $domain${NC}"
|
|
echo -e "${YELLOW}Add the following TXT record to your DNS:${NC}"
|
|
echo -e "${GREEN}=================================================${NC}"
|
|
echo -e "Name: mail._domainkey.$domain"
|
|
echo -e "Value:"
|
|
cat /etc/opendkim/keys/$domain/mail.txt | grep -v "^;" | tr -d '\n'
|
|
echo -e "\n${GREEN}=================================================${NC}"
|
|
fi
|
|
|
|
echo -e "\n${BLUE}DMARC Record Recommendation for $domain${NC}"
|
|
echo -e "${YELLOW}Add the following TXT record to your DNS:${NC}"
|
|
echo -e "${GREEN}=================================================${NC}"
|
|
echo -e "Name: _dmarc.$domain"
|
|
echo -e "Value: v=DMARC1; p=reject; rua=mailto:admin@$domain; ruf=mailto:admin@$domain; pct=100"
|
|
echo -e "${GREEN}=================================================${NC}"
|
|
}
|
|
|
|
# Function to test redirector connection
|
|
test_redirector() {
|
|
# Check if SSH to redirector is configured
|
|
debug "Testing redirector connection"
|
|
|
|
if [ -f "/root/.ssh/config" ] && grep -q "Host redirector" /root/.ssh/config; then
|
|
echo -e "\n${BLUE}Testing SSH connection to redirector...${NC}"
|
|
if [ "$DEBUG" = true ]; then
|
|
ssh -o ConnectTimeout=5 redirector "echo 'Connection successful'"
|
|
else
|
|
ssh -o ConnectTimeout=5 redirector "echo 'Connection successful'" >/dev/null 2>&1
|
|
fi
|
|
|
|
ssh_result=$?
|
|
debug "SSH connection result: $ssh_result"
|
|
|
|
if [ $ssh_result -eq 0 ]; then
|
|
echo -e "${GREEN}SSH connection to redirector successful!${NC}"
|
|
echo -e "You can access the redirector with: ${YELLOW}ssh redirector${NC}"
|
|
return 0
|
|
else
|
|
echo -e "${RED}Could not connect to redirector.${NC}"
|
|
echo -e "${YELLOW}Please verify SSH configuration and firewall rules.${NC}"
|
|
return 1
|
|
fi
|
|
else
|
|
echo -e "\n${YELLOW}Redirector SSH configuration not found.${NC}"
|
|
echo -e "If you need to access the redirector, please check deployment logs."
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Function to synchronize payloads with redirector
|
|
sync_payloads() {
|
|
# Check if sync script exists
|
|
debug "Attempting to synchronize payloads with redirector"
|
|
|
|
if [ -f "/root/Tools/secure_payload_sync.sh" ]; then
|
|
echo -e "\n${BLUE}Synchronizing payloads with redirector...${NC}"
|
|
if [ "$DEBUG" = true ]; then
|
|
/root/Tools/secure_payload_sync.sh
|
|
else
|
|
/root/Tools/secure_payload_sync.sh >/dev/null 2>&1
|
|
fi
|
|
|
|
sync_result=$?
|
|
debug "Payload sync result: $sync_result"
|
|
|
|
if [ $sync_result -eq 0 ]; then
|
|
echo -e "${GREEN}Payload synchronization successful${NC}"
|
|
return 0
|
|
else
|
|
echo -e "${RED}Payload synchronization failed${NC}"
|
|
echo -e "${YELLOW}Check /root/Tools/logs/payload_sync.log for details${NC}"
|
|
return 1
|
|
fi
|
|
else
|
|
echo -e "\n${YELLOW}Payload sync script not found${NC}"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Function to run redirector post-install script
|
|
run_redirector_setup() {
|
|
echo -e "\n${BLUE}Running post-installation setup on redirector...${NC}"
|
|
debug "Checking if we can connect to redirector"
|
|
|
|
# First, test the connection
|
|
if [ -f "/root/.ssh/config" ] && grep -q "Host redirector" /root/.ssh/config; then
|
|
# Check if post_install_redirector.sh exists on the redirector
|
|
debug "Checking for post_install_redirector.sh on redirector"
|
|
ssh -o ConnectTimeout=5 redirector "test -f /root/Tools/post_install_redirector.sh" >/dev/null 2>&1
|
|
|
|
check_result=$?
|
|
debug "Script check result: $check_result"
|
|
|
|
if [ $check_result -eq 0 ]; then
|
|
echo -e "${BLUE}Running post-install script on redirector...${NC}"
|
|
# Pass the debug flag if it's enabled here
|
|
if [ "$DEBUG" = true ]; then
|
|
ssh -o ConnectTimeout=10 redirector "/root/Tools/post_install_redirector.sh --debug"
|
|
else
|
|
ssh -o ConnectTimeout=10 redirector "/root/Tools/post_install_redirector.sh"
|
|
fi
|
|
|
|
redir_setup_result=$?
|
|
debug "Redirector setup result: $redir_setup_result"
|
|
|
|
if [ $redir_setup_result -eq 0 ]; then
|
|
echo -e "${GREEN}Redirector post-installation completed successfully${NC}"
|
|
return 0
|
|
else
|
|
echo -e "${RED}Redirector post-installation failed${NC}"
|
|
return 1
|
|
fi
|
|
else
|
|
echo -e "${RED}post_install_redirector.sh not found on redirector${NC}"
|
|
return 1
|
|
fi
|
|
else
|
|
echo -e "${RED}SSH configuration for redirector not found${NC}"
|
|
echo -e "${YELLOW}Cannot run post-installation on redirector${NC}"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Main execution
|
|
debug "Starting post-installation process with debug mode: $DEBUG"
|
|
debug "Run on redirector flag: $RUN_ON_REDIRECTOR"
|
|
|
|
echo -e "\n${BLUE}Running post-installation checks...${NC}"
|
|
|
|
# Get domain information
|
|
read -p "Enter primary domain: " domain
|
|
read -p "Enter email for Let's Encrypt: " email
|
|
|
|
# Check DNS configuration
|
|
echo -e "\n${BLUE}Checking DNS configuration...${NC}"
|
|
check_dns $domain
|
|
|
|
# Ask if user wants to set up Let's Encrypt certificates
|
|
read -p "Set up Let's Encrypt SSL certificate? (y/n): " setup_ssl
|
|
if [ "$setup_ssl" = "y" ]; then
|
|
setup_letsencrypt $domain $email
|
|
fi
|
|
|
|
# Show DNS records to configure
|
|
show_dns_records $domain
|
|
|
|
# Test redirector connection
|
|
test_redirector
|
|
|
|
# Ask if user wants to sync payloads
|
|
read -p "Synchronize payloads with redirector? (y/n): " sync_payload
|
|
if [ "$sync_payload" = "y" ]; then
|
|
sync_payloads
|
|
fi
|
|
|
|
# Ask if user wants to run post-install on redirector
|
|
if [ "$RUN_ON_REDIRECTOR" = true ] || test_redirector; then
|
|
read -p "Run post-installation setup on redirector? (y/n): " run_on_redir
|
|
if [ "$run_on_redir" = "y" ]; then
|
|
run_redirector_setup
|
|
fi
|
|
fi
|
|
|
|
echo -e "\n${GREEN}Post-installation checks complete!${NC}"
|
|
echo -e "${YELLOW}Ensure your DNS records are properly configured.${NC}"
|
|
echo -e "${YELLOW}See your deployment log for complete infrastructure details.${NC}" |