setup.sh
Rama master · réplica de lectura del repositorio original.
#!/usr/bin/env bash
# --- PROLOGUE OBLIGATOIRE ---
export GOPROXY="${GOPROXY:-https://proxy.golang.org,direct}"
export GOSUMDB="${GOSUMDB:-sum.golang.org}"
set -euo pipefail
# Empêche le téléchargement auto d'un toolchain Go différent
export GOTOOLCHAIN=local
# Evite les warnings/erreurs "buildvcs"
export GOFLAGS="${GOFLAGS:-} -buildvcs=false"
# Où déposer les binaires buildés
export BIN_OUT="${BIN_OUT:-/out/bin}"
mkdir -p "$BIN_OUT"
# Helpers utilisés plus bas
msg(){ echo "[*] $*"; }
ok(){ echo "[OK] $*"; }
warn(){ echo "[WARN] $*" >&2; }
# Installe les deps build C/libpcap si nécessaire
ensure_build_deps() {
if command -v pkg-config >/dev/null 2>&1 && pkg-config --exists libpcap; then
return 0
fi
if command -v apt-get >/dev/null 2>&1; then
msg "Installation des deps build (libpcap-dev, gcc, pkg-config)…"
apt-get update -y
apt-get install -y --no-install-recommends libpcap-dev pkg-config gcc
rm -rf /var/lib/apt/lists/*
else
warn "libpcap headers introuvables et pas d'apt-get. Installe libpcap-dev/gcc/pkg-config dans l'image."
fi
}
ensure_build_deps
# 1) ---- kubeletctl — DOC OFFICIELLE: binary release ----
msg "kubeletctl …"
ARCH="$(uname -m)"
case "${ARCH}" in
x86_64)
KUBELETCTL_ARCH="amd64"
KUBESCAPE_ARCH="ubuntu-latest"
KUBECTL_ARCH="amd64"
LIGHTPANDA_ARCH="x86_64"
;;
aarch64|arm64)
KUBELETCTL_ARCH="arm64"
KUBESCAPE_ARCH="ubuntu-latest" # Kubescape currently uses the same binary name or builds from source, check docs if fails
KUBECTL_ARCH="arm64"
LIGHTPANDA_ARCH="aarch64"
;;
*)
warn "Unsupported architecture: ${ARCH}"
exit 1
;;
esac
KUBELETCTL_VERSION="v1.13"
KUBELETCTL_URL="https://github.com/cyberark/kubeletctl/releases/download/${KUBELETCTL_VERSION}/kubeletctl_linux_${KUBELETCTL_ARCH}"
TMP_KUBELETCTL="/tmp/kubeletctl"
curl -fsSL "$KUBELETCTL_URL" -o "$TMP_KUBELETCTL"
chmod +x "$TMP_KUBELETCTL"
if "$TMP_KUBELETCTL" version >/dev/null 2>&1 || "$TMP_KUBELETCTL" help >/dev/null 2>&1; then
install -D -m0755 "$TMP_KUBELETCTL" "$BIN_OUT/kubeletctl"
ok "kubeletctl install (${KUBELETCTL_VERSION})"
else
warn "kubeletctl KO (binaire invalide)"
fi
rm -f "$TMP_KUBELETCTL"
# 2) ---- kubescape — DOC OFFICIELLE: install.sh ----
msg "kubescape …"
KUBESCAPE_VERSION="v3.0.9"
curl -fsSL \
"https://github.com/kubescape/kubescape/releases/download/${KUBESCAPE_VERSION}/kubescape-${KUBESCAPE_ARCH}" \
-o /tmp/kubescape
chmod +x /tmp/kubescape
install -D -m0755 /tmp/kubescape "$BIN_OUT/kubescape"
ok "kubescape ${KUBESCAPE_VERSION}"
# kubectl-who-can
msg "kubectl-who-can …"
go install github.com/aquasecurity/kubectl-who-can/cmd/kubectl-who-can@latest
WHOCAN_BIN="$(go env GOPATH)/bin/kubectl-who-can"
if [ -x "$WHOCAN_BIN" ]; then
install -D -m0755 "$WHOCAN_BIN" "$BIN_OUT/kubectl-who-can"
ok "kubectl-who-can install"
else
warn "kubectl-who-can KO"
fi
# 3) ---- rbac-police — DOC OFFICIELLE: go install ----
msg "rbac-police …"
GO111MODULE=on GOTOOLCHAIN=local \
go install github.com/PaloAltoNetworks/rbac-police@latest
RBAC_POLICE_BIN="$(go env GOPATH)/bin/rbac-police"
if [ -x "$RBAC_POLICE_BIN" ]; then
install -D -m0755 "$RBAC_POLICE_BIN" "$BIN_OUT/rbac-police"
ok "rbac-police install (go install)"
else
warn "rbac-police KO (binaire introuvable)"
fi
# 4) ---- naabu — DOC OFFICIELLE: go install (v2) ----
msg "naabu …"
GO111MODULE=on GOTOOLCHAIN=local \
go install github.com/projectdiscovery/naabu/v2/cmd/naabu@latest
NAABU_BIN="$(go env GOPATH)/bin/naabu"
if [ -x "$NAABU_BIN" ]; then
install -D -m0755 "$NAABU_BIN" "$BIN_OUT/naabu"
ok "naabu install (go install)"
else
warn "naabu KO (binaire introuvable)"
fi
# 5) ---- httpx — DOC OFFICIELLE: go install ----
msg "httpx …"
GO111MODULE=on GOTOOLCHAIN=local \
go install github.com/projectdiscovery/httpx/cmd/httpx@latest
HTTPX_BIN="$(go env GOPATH)/bin/httpx"
if [ -x "$HTTPX_BIN" ]; then
install -D -m0755 "$HTTPX_BIN" "$BIN_OUT/httpx"
ok "httpx install (go install)"
else
warn "httpx KO (binaire introuvable)"
fi
# 6) katana — DOC OFFICIELLE: go install
msg "katana …"
CGO_ENABLED=1 GO111MODULE=on GOTOOLCHAIN=local \
go install github.com/projectdiscovery/katana/cmd/katana@latest
KATANA_BIN="$(go env GOPATH)/bin/katana"
if [ -x "$KATANA_BIN" ]; then
install -D -m0755 "$KATANA_BIN" "$BIN_OUT/katana"
ok "katana install (go install)"
else
warn "katana KO (binaire introuvable)"
fi
# 8) nuclei — DOC OFFICIELLE: go install (module v3)
msg "nuclei …"
GO111MODULE=on GOTOOLCHAIN=local \
go install github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
NUCLEI_BIN="$(go env GOPATH)/bin/nuclei"
if [ -x "$NUCLEI_BIN" ]; then
install -D -m0755 "$NUCLEI_BIN" "$BIN_OUT/nuclei"
ok "nuclei install (go install)"
else
warn "nuclei KO (binaire introuvable)"
fi
# 9) zgrab2 — DOC OFFICIELLE: go install (binaire cmd/zgrab2)
msg "zgrab2 …"
GO111MODULE=on GOTOOLCHAIN=local \
go install github.com/zmap/zgrab2/cmd/zgrab2@latest
ZGRAB2_BIN="$(go env GOPATH)/bin/zgrab2"
if [ -x "$ZGRAB2_BIN" ]; then
install -D -m0755 "$ZGRAB2_BIN" "$BIN_OUT/zgrab2"
ok "zgrab2 install (go install)"
else
warn "zgrab2 KO (binaire introuvable)"
fi
# 10) ffuf — fuzzer / directory & parameter discovery
msg "ffuf …"
GO111MODULE=on GOTOOLCHAIN=local \
go install github.com/ffuf/ffuf/v2@latest
FFUF_BIN="$(go env GOPATH)/bin/ffuf"
if [ -x "$FFUF_BIN" ]; then
install -D -m0755 "$FFUF_BIN" "$BIN_OUT/ffuf"
ok "ffuf install (go install)"
else
warn "ffuf KO (binaire introuvable)"
exit 1
fi
# 11) subfinder — DOC OFFICIELLE: go install (module v2)
msg "subfinder …"
GO111MODULE=on GOTOOLCHAIN=local \
go install github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest
SUBFINDER_BIN="$(go env GOPATH)/bin/subfinder"
if [ -x "$SUBFINDER_BIN" ]; then
install -D -m0755 "$SUBFINDER_BIN" "$BIN_OUT/subfinder"
ok "subfinder install (go install)"
else
warn "subfinder KO (binaire introuvable)"
fi
# 12) kube-bench — DOC OFFICIELLE: go install
msg "kube-bench …"
GO111MODULE=on GOTOOLCHAIN=local \
go install github.com/aquasecurity/kube-bench@latest
KUBE_BENCH_BIN="$(go env GOPATH)/bin/kube-bench"
if [ -x "$KUBE_BENCH_BIN" ]; then
install -D -m0755 "$KUBE_BENCH_BIN" "$BIN_OUT/kube-bench"
ok "kube-bench install (go install)"
else
warn "kube-bench KO (binaire introuvable)"
fi
# 13) grpcurl — DOC OFFICIELLE: go install
msg "grpcurl …"
GO111MODULE=on GOTOOLCHAIN=local \
go install github.com/fullstorydev/grpcurl/cmd/grpcurl@latest
GRPCURL_BIN="$(go env GOPATH)/bin/grpcurl"
if [ -x "$GRPCURL_BIN" ]; then
install -D -m0755 "$GRPCURL_BIN" "$BIN_OUT/grpcurl"
ok "grpcurl install (go install)"
else
warn "grpcurl KO (binaire introuvable)"
fi
# 14) ---- DIRB (autotools + libcurl custom) ----
msg "dirb …"
DIRB_SRC="/tmp/dirb"
OUT="/out"
CURL_PREFIX="/out/curl"
rm -rf "$DIRB_SRC"
# Official dirb 2.22 source from SourceForge (GitHub mirror no longer available)
# -L follows SourceForge redirects to mirror
curl -fsSL -L --max-redirs 5 \
"https://downloads.sourceforge.net/project/dirb/dirb/2.22/dirb222.tar.gz" \
-o /tmp/dirb.tar.gz
mkdir -p "$DIRB_SRC"
tar -xzf /tmp/dirb.tar.gz -C "$DIRB_SRC" --strip-components=1
rm -f /tmp/dirb.tar.gz
# Restore execute bits stripped by SourceForge tarball
chmod +x "$DIRB_SRC/configure" "$DIRB_SRC/install-sh" "$DIRB_SRC/missing" 2>/dev/null || true
find "$DIRB_SRC" -name "*.sh" -exec chmod +x {} \; 2>/dev/null || true
cd "$DIRB_SRC"
# rendre visible la libcurl custom
export PATH="${CURL_PREFIX}/bin:${PATH}"
export PKG_CONFIG_PATH="${CURL_PREFIX}/lib/pkgconfig:${PKG_CONFIG_PATH:-}"
export CPPFLAGS="-I${CURL_PREFIX}/include"
export LDFLAGS="-L${CURL_PREFIX}/lib -Wl,-rpath,${CURL_PREFIX}/lib"
export CFLAGS="-O2 -pipe -fPIC -fcommon"
# sanity check libcurl
if [ ! -x "${CURL_PREFIX}/bin/curl-config" ]; then
echo "[FATAL] curl-config introuvable dans ${CURL_PREFIX}/bin"
exit 1
fi
# configure (DIRB ignore --with-curl, mais garde les flags)
./configure --prefix="$OUT"
make clean || true
make -j"$(nproc)"
# installation manuelle
install -d "$OUT/bin" "$OUT/wordlists/dirb"
install -m 0755 "src/dirb" "$OUT/bin/dirb"
cp -a "wordlists/." "$OUT/wordlists/dirb/"
# vérification safe (dirb -h retourne 255 → ne pas casser set -e)
"$OUT/bin/dirb" -h >/dev/null 2>&1 || true
ok "dirb install (libcurl custom)"
# 15) ---- kubectl — DOC OFFICIELLE: binary release ----
msg "kubectl …"
KUBECTL_URL="https://dl.k8s.io/release/$(curl -fsSL https://dl.k8s.io/release/stable.txt)/bin/linux/${KUBECTL_ARCH}/kubectl"
TMP_KUBECTL="/tmp/kubectl"
curl -fsSL "$KUBECTL_URL" -o "$TMP_KUBECTL"
chmod +x "$TMP_KUBECTL"
if "$TMP_KUBECTL" version --client >/dev/null 2>&1; then
install -D -m0755 "$TMP_KUBECTL" "$BIN_OUT/kubectl"
ok "kubectl install (official binary)"
else
warn "kubectl KO (binaire invalide)"
fi
rm -f "$TMP_KUBECTL"
# 16) ---- waybackurls — DOC OFFICIELLE: go install ----
msg "waybackurls …"
GO111MODULE=on GOTOOLCHAIN=local \
go install github.com/tomnomnom/waybackurls@latest
WAYBACKURLS_BIN="$(go env GOPATH)/bin/waybackurls"
if [ -x "$WAYBACKURLS_BIN" ]; then
install -D -m0755 "$WAYBACKURLS_BIN" "$BIN_OUT/waybackurls"
ok "waybackurls install (go install)"
else
warn "waybackurls KO (binaire introuvable)"
fi
# ------------------------------------------------------------------
# 17) ---- Lightpanda — Headless Browser (latest stable release)
# ------------------------------------------------------------------
msg 'lightpanda (nightly) …'
LIGHTPANDA_URL="https://github.com/lightpanda-io/browser/releases/download/nightly/lightpanda-${LIGHTPANDA_ARCH}-linux"
TMP_LIGHTPANDA=/tmp/lightpanda
if curl -fsSL "$LIGHTPANDA_URL" -o "$TMP_LIGHTPANDA"; then
chmod +x "$TMP_LIGHTPANDA"
install -D -m0755 "$TMP_LIGHTPANDA" /out/bin/lightpanda
ok 'lightpanda install (nightly)'
else
echo "[WARN] lightpanda nightly unavailable → skipping"
fi
export LIGHTPANDA_DISABLE_TELEMETRY=true
# ------------------------------------------------------------------
# 18) ---- vulnx (cvemap) — DOC OFFICIELLE: go install
# ------------------------------------------------------------------
msg "vulnx …"
GO111MODULE=on GOTOOLCHAIN=local \
go install github.com/projectdiscovery/cvemap/cmd/vulnx@latest
VULNX_BIN="$(go env GOPATH)/bin/vulnx"
if [ -x "$VULNX_BIN" ]; then
install -D -m0755 "$VULNX_BIN" "$BIN_OUT/vulnx"
ok "vulnx install (go install)"
else
warn "vulnx KO (binaire introuvable)"
fi
# Récapitulatif et validation
msg "Binaires installés dans $BIN_OUT :"
ls -lh "$BIN_OUT" || true
# Validation stricte : vérifier qu'au moins 10 binaires ont été installés
BINARY_COUNT=$(find "$BIN_OUT" -type f -executable | wc -l)
MIN_EXPECTED=10
if [ "$BINARY_COUNT" -lt "$MIN_EXPECTED" ]; then
warn "ERREUR: Seulement $BINARY_COUNT binaires trouvés dans $BIN_OUT (minimum attendu: $MIN_EXPECTED)"
exit 1
fi
ok "Validation réussie: $BINARY_COUNT binaires installés"