greydgl--pentestgpt
165 行
5.5 KiB
Docker
165 行
5.5 KiB
Docker
# Excalibur Docker Image
|
|
# Lightweight penetration testing environment with Excalibur
|
|
|
|
FROM ubuntu:24.04
|
|
|
|
LABEL description="Excalibur - AI-Powered Penetration Testing Agent"
|
|
LABEL version="1.0.0"
|
|
|
|
# Prevent interactive prompts during build
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
|
|
# Update and install system dependencies
|
|
RUN apt-get update && \
|
|
apt-get upgrade -y && \
|
|
apt-get install -y \
|
|
# Build essentials
|
|
build-essential \
|
|
software-properties-common \
|
|
ca-certificates \
|
|
gnupg \
|
|
# Python
|
|
python3.12 \
|
|
python3-pip \
|
|
python3-venv \
|
|
python3-dev \
|
|
# Essential pentesting tools
|
|
nmap \
|
|
netcat-openbsd \
|
|
curl \
|
|
wget \
|
|
git \
|
|
sudo \
|
|
# Network utilities
|
|
net-tools \
|
|
dnsutils \
|
|
whois \
|
|
# VPN (for HackTheBox/TryHackMe connectivity)
|
|
openvpn \
|
|
# Text processing
|
|
jq \
|
|
ripgrep \
|
|
# Terminal
|
|
tmux \
|
|
&& apt-get autoremove -y \
|
|
&& apt-get autoclean \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Install additional security/pentesting tools
|
|
RUN apt-get update && \
|
|
apt-get install -y \
|
|
# Web fuzzing/brute-forcing
|
|
gobuster \
|
|
dirb \
|
|
# Web vulnerability scanning
|
|
nikto \
|
|
# SQL injection
|
|
sqlmap \
|
|
# Credential attacks
|
|
hydra \
|
|
john \
|
|
# Network analysis
|
|
tcpdump \
|
|
# Additional utilities
|
|
sshpass \
|
|
proxychains4 \
|
|
socat \
|
|
&& apt-get autoremove -y \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Install ffuf (architecture-aware)
|
|
RUN ARCH=$(dpkg --print-architecture) && \
|
|
if [ "$ARCH" = "amd64" ]; then FFUF_ARCH="linux_amd64"; \
|
|
elif [ "$ARCH" = "arm64" ]; then FFUF_ARCH="linux_arm64"; \
|
|
else echo "Unsupported architecture: $ARCH" && exit 1; fi && \
|
|
wget -q "https://github.com/ffuf/ffuf/releases/download/v2.1.0/ffuf_2.1.0_${FFUF_ARCH}.tar.gz" -O /tmp/ffuf.tar.gz && \
|
|
tar -xzf /tmp/ffuf.tar.gz -C /tmp && \
|
|
mv /tmp/ffuf /usr/local/bin/ && \
|
|
chmod +x /usr/local/bin/ffuf && \
|
|
rm /tmp/ffuf.tar.gz
|
|
|
|
# Download common wordlists from SecLists with retry logic
|
|
# Falls back gracefully if downloads fail (users can download manually)
|
|
RUN mkdir -p /usr/share/wordlists && \
|
|
(curl -fsSL --retry 3 --retry-delay 5 \
|
|
"https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/common.txt" \
|
|
-o /usr/share/wordlists/common.txt || echo "Warning: Failed to download common.txt") && \
|
|
(curl -fsSL --retry 3 --retry-delay 5 \
|
|
"https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/raft-medium-directories.txt" \
|
|
-o /usr/share/wordlists/raft-medium-directories.txt || echo "Warning: Failed to download raft-medium-directories.txt") && \
|
|
(curl -fsSL --retry 3 --retry-delay 5 \
|
|
"https://raw.githubusercontent.com/danielmiessler/SecLists/master/Passwords/Common-Credentials/10-million-password-list-top-10000.txt" \
|
|
-o /usr/share/wordlists/top-10000-passwords.txt || echo "Warning: Failed to download top-10000-passwords.txt")
|
|
|
|
# Install linpeas/winpeas scripts for privilege escalation enumeration
|
|
RUN mkdir -p /opt/peass && \
|
|
wget -q https://github.com/peass-ng/PEASS-ng/releases/latest/download/linpeas.sh -O /opt/peass/linpeas.sh && \
|
|
chmod +x /opt/peass/linpeas.sh
|
|
|
|
# Install Node.js v20 (required for Claude Code CLI)
|
|
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \
|
|
apt-get install -y nodejs && \
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
# Remove EXTERNALLY-MANAGED marker to allow pip/poetry in Docker
|
|
# Also remove system Python packages that conflict with Poetry dependencies
|
|
RUN rm -f /usr/lib/python3.*/EXTERNALLY-MANAGED && \
|
|
apt-get remove -y python3-cryptography && \
|
|
apt-get autoremove -y
|
|
|
|
# Install Claude Code CLI globally
|
|
RUN npm install -g @anthropic-ai/claude-code
|
|
|
|
# Install Claude Code Router globally (for OpenRouter support)
|
|
RUN npm install -g @musistudio/claude-code-router
|
|
|
|
# Create non-root user
|
|
RUN useradd -m -s /bin/bash pentester && \
|
|
usermod -aG sudo pentester && \
|
|
echo "pentester ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
|
|
|
# Set up working directories (including ccr config)
|
|
RUN mkdir -p /workspace /app /home/pentester/.claude /home/pentester/.claude-code-router && \
|
|
chown -R pentester:pentester /workspace /app /home/pentester/.claude /home/pentester/.claude-code-router
|
|
|
|
# Switch to pentester user
|
|
USER pentester
|
|
WORKDIR /app
|
|
|
|
# Install Poetry for Python dependency management
|
|
RUN curl -sSL https://install.python-poetry.org | python3 - && \
|
|
echo 'export PATH="/home/pentester/.local/bin:$PATH"' >> /home/pentester/.bashrc
|
|
|
|
ENV PATH="/home/pentester/.local/bin:$PATH"
|
|
|
|
# Copy project files
|
|
COPY --chown=pentester:pentester pyproject.toml README.md /app/
|
|
COPY --chown=pentester:pentester excalibur/ /app/excalibur/
|
|
COPY --chown=pentester:pentester scripts/entrypoint.sh /home/pentester/entrypoint.sh
|
|
COPY --chown=pentester:pentester scripts/ccr-config-template.json /app/scripts/ccr-config-template.json
|
|
|
|
# Install Python dependencies as root to system Python
|
|
# Allow pip to override system packages in Docker
|
|
ENV PIP_BREAK_SYSTEM_PACKAGES=1
|
|
USER root
|
|
RUN poetry config virtualenvs.create false && \
|
|
poetry install --only main && \
|
|
chmod +x /home/pentester/entrypoint.sh
|
|
|
|
# Switch back to pentester user for runtime
|
|
USER pentester
|
|
|
|
# Set environment variables
|
|
ENV PYTHONPATH=/app
|
|
ENV PYTHONUNBUFFERED=1
|
|
|
|
# Default working directory for penetration tests
|
|
WORKDIR /workspace
|
|
|
|
# Use entrypoint script for auth setup
|
|
ENTRYPOINT ["/home/pentester/entrypoint.sh"]
|
|
|
|
# Default command - interactive bash
|
|
# Users can run: excalibur --target X
|
|
CMD ["/bin/bash"]
|