0799bfbae8
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.
224 lines
8.1 KiB
Bash
224 lines
8.1 KiB
Bash
#!/bin/bash
|
|
# randomize_ports.sh - Generate and set random ports for C2 services
|
|
|
|
# ANSI color codes
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
RED='\033[0;31m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
echo -e "${BLUE}==================================================${NC}"
|
|
echo -e "${BLUE} C2ingRed Port Randomization ${NC}"
|
|
echo -e "${BLUE}==================================================${NC}"
|
|
|
|
# Define port range (avoid well-known and commonly monitored ports)
|
|
MIN_PORT=10000
|
|
MAX_PORT=60000
|
|
|
|
# Define list of ports to avoid (commonly used services and monitoring tools)
|
|
AVOID_PORTS=(22 80 443 3389 5985 5986 3306 5432 1433 8080 8443 9090 9091 8008 4444 5555 1234 4321 31337 50051)
|
|
|
|
# Function to check if a port is in the avoid list
|
|
is_port_avoided() {
|
|
local port=$1
|
|
for avoid_port in "${AVOID_PORTS[@]}"; do
|
|
if [ "$port" -eq "$avoid_port" ]; then
|
|
return 0 # Port should be avoided
|
|
fi
|
|
done
|
|
return 1 # Port is fine to use
|
|
}
|
|
|
|
# Function to check if a port is already in use
|
|
is_port_in_use() {
|
|
local port=$1
|
|
if ss -tuln | grep -q ":$port "; then
|
|
return 0 # Port is in use
|
|
fi
|
|
return 1 # Port is not in use
|
|
}
|
|
|
|
# Function to generate a random port number
|
|
generate_random_port() {
|
|
local attempts=0
|
|
local max_attempts=20
|
|
local port
|
|
|
|
while [ $attempts -lt $max_attempts ]; do
|
|
port=$((RANDOM % (MAX_PORT - MIN_PORT) + MIN_PORT))
|
|
|
|
# Check if port is in avoid list or already in use
|
|
if ! is_port_avoided $port && ! is_port_in_use $port; then
|
|
echo $port
|
|
return 0
|
|
fi
|
|
|
|
attempts=$((attempts + 1))
|
|
done
|
|
|
|
# If we reach here, we couldn't find a suitable port
|
|
echo "Error: Could not find a suitable random port after $max_attempts attempts" >&2
|
|
return 1
|
|
}
|
|
|
|
# Generate random ports for different services
|
|
HTTP_C2_PORT=$(generate_random_port)
|
|
HTTPS_C2_PORT=$(generate_random_port)
|
|
MTLS_C2_PORT=$(generate_random_port)
|
|
SHELL_HANDLER_PORT=$(generate_random_port)
|
|
BEACON_SERVER_PORT=$(generate_random_port)
|
|
ADMIN_PORT=$(generate_random_port)
|
|
|
|
# Print the generated ports
|
|
echo -e "\n${GREEN}Generated random ports:${NC}"
|
|
echo -e "HTTP C2 Port: ${YELLOW}$HTTP_C2_PORT${NC}"
|
|
echo -e "HTTPS C2 Port: ${YELLOW}$HTTPS_C2_PORT${NC}"
|
|
echo -e "MTLS C2 Port: ${YELLOW}$MTLS_C2_PORT${NC}"
|
|
echo -e "Shell Handler Port: ${YELLOW}$SHELL_HANDLER_PORT${NC}"
|
|
echo -e "Beacon Server Port: ${YELLOW}$BEACON_SERVER_PORT${NC}"
|
|
echo -e "Admin Port: ${YELLOW}$ADMIN_PORT${NC}"
|
|
|
|
# Create a port configuration file
|
|
PORT_CONFIG="/root/Tools/port_config.json"
|
|
cat > $PORT_CONFIG << EOF
|
|
{
|
|
"http_c2_port": $HTTP_C2_PORT,
|
|
"https_c2_port": $HTTPS_C2_PORT,
|
|
"mtls_c2_port": $MTLS_C2_PORT,
|
|
"shell_handler_port": $SHELL_HANDLER_PORT,
|
|
"beacon_server_port": $BEACON_SERVER_PORT,
|
|
"admin_port": $ADMIN_PORT
|
|
}
|
|
EOF
|
|
|
|
echo -e "\n${GREEN}Port configuration saved to $PORT_CONFIG${NC}"
|
|
|
|
# Function to update Sliver configuration
|
|
update_sliver_config() {
|
|
local sliver_config="/root/.sliver/configs/daemon.json"
|
|
|
|
if [ -f "$sliver_config" ]; then
|
|
echo -e "\n${BLUE}Updating Sliver daemon configuration...${NC}"
|
|
cp "$sliver_config" "${sliver_config}.bak"
|
|
|
|
# Check if jq is installed
|
|
if ! command -v jq &> /dev/null; then
|
|
echo -e "${YELLOW}jq not found, installing...${NC}"
|
|
apt-get update && apt-get install -y jq
|
|
fi
|
|
|
|
# Update the configuration with jq
|
|
jq ".daemon_port = $MTLS_C2_PORT | .daemon_http_port = $HTTP_C2_PORT | .daemon_https_port = $HTTPS_C2_PORT" "${sliver_config}.bak" > "$sliver_config"
|
|
|
|
echo -e "${GREEN}Sliver configuration updated successfully${NC}"
|
|
|
|
# Restart Sliver service
|
|
echo -e "${BLUE}Restarting Sliver service...${NC}"
|
|
systemctl restart sliver
|
|
else
|
|
echo -e "${YELLOW}Sliver configuration file not found at $sliver_config${NC}"
|
|
fi
|
|
}
|
|
|
|
# Function to update shell handler configuration
|
|
update_shell_handler() {
|
|
local handler_script="/root/Tools/shell-handler/persistent-listener.sh"
|
|
|
|
if [ -f "$handler_script" ]; then
|
|
echo -e "\n${BLUE}Updating shell handler configuration...${NC}"
|
|
|
|
# Update the port in the script
|
|
sed -i "s/LISTEN_PORT=.*/LISTEN_PORT=$SHELL_HANDLER_PORT/" "$handler_script"
|
|
|
|
# Update the service if it exists
|
|
local service_file="/etc/systemd/system/shell-handler.service"
|
|
if [ -f "$service_file" ]; then
|
|
# Add environment variable to service file if not already present
|
|
if ! grep -q "Environment=\"LISTEN_PORT=" "$service_file"; then
|
|
sed -i "/\[Service\]/a Environment=\"LISTEN_PORT=$SHELL_HANDLER_PORT\"" "$service_file"
|
|
else
|
|
sed -i "s/Environment=\"LISTEN_PORT=.*/Environment=\"LISTEN_PORT=$SHELL_HANDLER_PORT\"/" "$service_file"
|
|
fi
|
|
|
|
# Reload systemd and restart the service
|
|
systemctl daemon-reload
|
|
systemctl restart shell-handler
|
|
fi
|
|
|
|
echo -e "${GREEN}Shell handler updated to use port $SHELL_HANDLER_PORT${NC}"
|
|
else
|
|
echo -e "${YELLOW}Shell handler script not found at $handler_script${NC}"
|
|
fi
|
|
}
|
|
|
|
# Function to update beacon server configuration
|
|
update_beacon_server() {
|
|
local beacon_script="/root/Tools/serve-beacons.sh"
|
|
|
|
if [ -f "$beacon_script" ]; then
|
|
echo -e "\n${BLUE}Updating beacon server configuration...${NC}"
|
|
|
|
# Update the port in the script
|
|
sed -i "s/LISTEN_PORT=.*/LISTEN_PORT=$BEACON_SERVER_PORT/" "$beacon_script"
|
|
|
|
# Restart the beacon server if it's running
|
|
if pgrep -f "serve-beacons.sh" > /dev/null; then
|
|
echo -e "${YELLOW}Stopping running beacon server...${NC}"
|
|
pkill -f "serve-beacons.sh"
|
|
|
|
echo -e "${GREEN}Starting beacon server with new port...${NC}"
|
|
nohup "$beacon_script" > /dev/null 2>&1 &
|
|
fi
|
|
|
|
echo -e "${GREEN}Beacon server updated to use port $BEACON_SERVER_PORT${NC}"
|
|
else
|
|
echo -e "${YELLOW}Beacon server script not found at $beacon_script${NC}"
|
|
fi
|
|
}
|
|
|
|
# Function to update NGINX configuration for the redirector
|
|
update_nginx_redirector() {
|
|
local nginx_config="/etc/nginx/sites-available/default"
|
|
|
|
if [ -f "$nginx_config" ]; then
|
|
echo -e "\n${BLUE}Updating NGINX redirector configuration...${NC}"
|
|
|
|
# Update configuration to use new ports
|
|
# Note: This assumes standard format used in the C2ingRed templates
|
|
if grep -q "proxy_pass http://.*:" "$nginx_config"; then
|
|
sed -i "s|proxy_pass http://.*:8888;|proxy_pass http://{{ c2_ip }}:$HTTP_C2_PORT;|g" "$nginx_config"
|
|
sed -i "s|proxy_pass https://.*:443;|proxy_pass https://{{ c2_ip }}:$HTTPS_C2_PORT;|g" "$nginx_config"
|
|
|
|
# Update stream configuration if it exists
|
|
local stream_config="/etc/nginx/modules-enabled/stream.conf"
|
|
if [ -f "$stream_config" ]; then
|
|
sed -i "s|proxy_pass .*:31337;|proxy_pass {{ c2_ip }}:$MTLS_C2_PORT;|g" "$stream_config"
|
|
sed -i "s|proxy_pass .*:50051;|proxy_pass {{ c2_ip }}:$HTTP_C2_PORT;|g" "$stream_config"
|
|
fi
|
|
|
|
# Reload NGINX
|
|
systemctl reload nginx
|
|
|
|
echo -e "${GREEN}NGINX configuration updated to use new ports${NC}"
|
|
else
|
|
echo -e "${YELLOW}Could not find proxy_pass directives in NGINX config${NC}"
|
|
fi
|
|
else
|
|
echo -e "${YELLOW}NGINX configuration file not found at $nginx_config${NC}"
|
|
fi
|
|
}
|
|
|
|
# Apply the configuration updates
|
|
update_sliver_config
|
|
update_shell_handler
|
|
update_beacon_server
|
|
update_nginx_redirector
|
|
|
|
echo -e "\n${GREEN}Port randomization complete!${NC}"
|
|
echo -e "${YELLOW}Remember to update any firewall rules to allow traffic on these ports.${NC}"
|
|
echo -e "${YELLOW}You should also update your DNS records if they contain SRV records that specify ports.${NC}"
|
|
|
|
# Display the new port configuration again for reference
|
|
echo -e "\n${BLUE}New Port Configuration:${NC}"
|
|
cat $PORT_CONFIG | jq |