4837 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / docker-run.sh SH
#!/bin/bash


set -e

CONTAINER_NAME="zipslip-vulnerable-server"
IMAGE_NAME="zipslip-demo"
PORT="8080"

echo "Zip Slip Vulnerability Demo"
echo "================================================"
echo ""

# Check if Docker is installed
if ! command -v docker &> /dev/null; then
    echo "Docker is not installed. Please install Docker first."
    exit 1
fi

# Check if Docker is running
if ! docker info &> /dev/null; then
    echo "Docker is not running. Please start Docker first."
    exit 1
fi

echo "Docker is available"

# Create directories if they don't exist
mkdir -p uploads extracted

# Function to cleanup existing container and image
cleanup() {
    echo "Cleaning up existing container and image..."
    
    # Stop and remove container if it exists
    if docker ps -a --format "table {{.Names}}" | grep -q "^${CONTAINER_NAME}$"; then
        echo "Stopping existing container..."
        docker stop ${CONTAINER_NAME} 2>/dev/null || true
        echo "Removing existing container..."
        docker rm ${CONTAINER_NAME} 2>/dev/null || true
    fi
    
    # Remove image if it exists
    if docker images --format "table {{.Repository}}" | grep -q "^${IMAGE_NAME}$"; then
        echo "Removing existing image..."
        docker rmi ${IMAGE_NAME} 2>/dev/null || true
    fi
    
    echo "Cleanup completed"
    echo ""
}

# Function to build and run container
run_container() {
    echo "Building and running with Docker..."
    echo ""
    
    # Build the image
    echo "Building Docker image..."
    docker build -t ${IMAGE_NAME} .
    
    echo ""
    echo "Starting container..."
    docker run -d \
        --name ${CONTAINER_NAME} \
        -p ${PORT}:8080 \
        ${IMAGE_NAME}
    
    echo ""
    echo "Container is running!"
    echo "Open http://localhost:${PORT} in your browser"
    echo ""
    echo "Uploaded files will be saved to: ./uploads"
    echo "Extracted files will be saved to: ./extracted"
    echo ""
    echo "Container Management:"
    echo "  Stop container:    docker stop ${CONTAINER_NAME}"
    echo "  View logs:         docker logs -f ${CONTAINER_NAME}"
    echo "  Enter container:   docker exec -it ${CONTAINER_NAME} /bin/bash"
    echo "  Remove container:  docker rm ${CONTAINER_NAME}"
}

# Function to show usage
show_usage() {
    echo "Usage: $0 [start|stop|cleanup|logs|status]"
    echo ""
    echo "Commands:"
    echo "  start     - Build and start the container (default)"
    echo "  stop      - Stop the running container"
    echo "  cleanup   - Remove container and image"
    echo "  logs      - Show container logs"
    echo "  status    - Show container status"
    echo "  help      - Show this help message"
    echo ""
    echo "Examples:"
    echo "  $0 start"
    echo "  $0 stop"
    echo "  $0 cleanup"
    echo "  $0 logs"
}

# Function to stop container
stop_container() {
    echo "Stopping container..."
    if docker ps --format "table {{.Names}}" | grep -q "^${CONTAINER_NAME}$"; then
        docker stop ${CONTAINER_NAME}
        echo "Container stopped"
    else
        echo "Container is not running"
    fi
}

# Function to show logs
show_logs() {
    echo "Container logs:"
    if docker ps -a --format "table {{.Names}}" | grep -q "^${CONTAINER_NAME}$"; then
        docker logs -f ${CONTAINER_NAME}
    else
        echo "Container not found"
    fi
}

# Function to show status
show_status() {
    echo "Container status:"
    if docker ps --format "table {{.Names}}" | grep -q "^${CONTAINER_NAME}$"; then
        echo "Container is running"
        docker ps --filter "name=${CONTAINER_NAME}" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
    elif docker ps -a --format "table {{.Names}}" | grep -q "^${CONTAINER_NAME}$"; then
        echo "Container exists but is not running"
        docker ps -a --filter "name=${CONTAINER_NAME}" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
    else
        echo "Container not found"
    fi
}

# Main script logic
case "${1:-start}" in
    "start")
        cleanup
        run_container
        ;;
    "stop")
        stop_container
        ;;
    "cleanup")
        cleanup
        ;;
    "logs")
        show_logs
        ;;
    "status")
        show_status
        ;;
    "help"|"-h"|"--help")
        show_usage
        ;;
    *)
        echo "Unknown command: $1"
        show_usage
        exit 1
        ;;
esac