Ctrl K
ComunidadGuías…

setup.sh

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
#!/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"