mirror of https://github.com/1N3/Sn1per.git
933 lines
31 KiB
Bash
Executable File
933 lines
31 KiB
Bash
Executable File
#!/bin/bash
|
|
# Cross-platform install script for Sn1per CE
|
|
# Supports: Debian/Ubuntu, RHEL/CentOS/Fedora/Amazon Linux, Arch Linux, macOS
|
|
# Created by @xer0dayz - https://sn1persecurity.com
|
|
# Optimized by D4rth R3v4n - https://github.com/gbiagomba
|
|
# Optimized for multi-distro support
|
|
|
|
set -e # Exit on error
|
|
|
|
# Color definitions
|
|
OKBLUE='\033[94m'
|
|
OKRED='\033[91m'
|
|
OKGREEN='\033[92m'
|
|
OKORANGE='\033[93m'
|
|
RESET='\e[0m'
|
|
|
|
# Banner
|
|
echo -e "$OKRED ____ $RESET"
|
|
echo -e "$OKRED _________ / _/___ ___ _____$RESET"
|
|
echo -e "$OKRED / ___/ __ \ / // __ \/ _ \/ ___/$RESET"
|
|
echo -e "$OKRED (__ ) / / // // /_/ / __/ / $RESET"
|
|
echo -e "$OKRED /____/_/ /_/___/ .___/\___/_/ $RESET"
|
|
echo -e "$OKRED /_/ $RESET"
|
|
echo -e "$RESET"
|
|
echo -e "$OKORANGE + -- --=[ https://sn1persecurity.com $RESET"
|
|
echo -e "$OKORANGE + -- --=[ Sn1per CE by @xer0dayz $RESET"
|
|
echo -e "$OKORANGE + -- --=[ Multi-distro installer $RESET"
|
|
echo ""
|
|
|
|
# Installation directories
|
|
INSTALL_DIR=/usr/share/sniper
|
|
LOOT_DIR=/usr/share/sniper/loot
|
|
PLUGINS_DIR=/usr/share/sniper/plugins
|
|
GO_DIR=~/go/bin
|
|
|
|
# Detect OS and distribution
|
|
detect_os() {
|
|
if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
OS="macos"
|
|
echo -e "$OKBLUE[*]$RESET Detected macOS"
|
|
elif [[ -f /etc/os-release ]]; then
|
|
. /etc/os-release
|
|
case "$ID" in
|
|
ubuntu|debian|kali|parrot)
|
|
OS="debian"
|
|
PKG_MANAGER="apt"
|
|
echo -e "$OKBLUE[*]$RESET Detected Debian-based system: $PRETTY_NAME"
|
|
;;
|
|
rhel|centos|fedora|rocky|alma|amzn)
|
|
OS="rhel"
|
|
if command -v dnf &> /dev/null; then
|
|
PKG_MANAGER="dnf"
|
|
else
|
|
PKG_MANAGER="yum"
|
|
fi
|
|
echo -e "$OKBLUE[*]$RESET Detected RHEL-based system: $PRETTY_NAME"
|
|
;;
|
|
arch|manjaro|endeavouros)
|
|
OS="arch"
|
|
PKG_MANAGER="pacman"
|
|
echo -e "$OKBLUE[*]$RESET Detected Arch-based system: $PRETTY_NAME"
|
|
;;
|
|
opensuse*|sles)
|
|
OS="opensuse"
|
|
PKG_MANAGER="zypper"
|
|
echo -e "$OKBLUE[*]$RESET Detected openSUSE-based system: $PRETTY_NAME"
|
|
;;
|
|
*)
|
|
echo -e "$OKRED[!]$RESET Unsupported distribution: $ID"
|
|
echo -e "$OKRED[!]$RESET Supported: Debian/Ubuntu, RHEL/CentOS/Fedora, Arch Linux, macOS"
|
|
exit 1
|
|
;;
|
|
esac
|
|
else
|
|
echo -e "$OKRED[!]$RESET Unable to detect operating system"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Check if running as root (not needed for macOS with brew)
|
|
check_root() {
|
|
if [[ "$OS" != "macos" ]] && [[ $EUID -ne 0 ]]; then
|
|
echo -e "$OKRED[!]$RESET This script must be run as root on Linux systems"
|
|
echo -e "$OKRED[!]$RESET Please run: sudo $0"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Package manager abstraction
|
|
pkg_update() {
|
|
echo -e "$OKBLUE[*]$RESET Updating package repositories..."
|
|
case "$OS" in
|
|
debian)
|
|
apt update -y
|
|
;;
|
|
rhel)
|
|
$PKG_MANAGER makecache -y || $PKG_MANAGER makecache
|
|
;;
|
|
arch)
|
|
pacman -Sy --noconfirm
|
|
;;
|
|
opensuse)
|
|
zypper refresh -y
|
|
;;
|
|
macos)
|
|
brew update
|
|
;;
|
|
esac
|
|
}
|
|
|
|
pkg_install() {
|
|
local packages=("$@")
|
|
echo -e "$OKBLUE[*]$RESET Installing: ${packages[*]}"
|
|
|
|
case "$OS" in
|
|
debian)
|
|
apt install -y "${packages[@]}" 2>/dev/null || true
|
|
;;
|
|
rhel)
|
|
$PKG_MANAGER install -y "${packages[@]}" 2>/dev/null || true
|
|
;;
|
|
arch)
|
|
pacman -S --noconfirm --needed "${packages[@]}" 2>/dev/null || true
|
|
;;
|
|
opensuse)
|
|
zypper install -y "${packages[@]}" 2>/dev/null || true
|
|
;;
|
|
macos)
|
|
for pkg in "${packages[@]}"; do
|
|
brew install "$pkg" 2>/dev/null || brew upgrade "$pkg" 2>/dev/null || true
|
|
done
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Map package names across distributions
|
|
get_package_name() {
|
|
local generic_name=$1
|
|
|
|
case "$OS" in
|
|
debian)
|
|
case "$generic_name" in
|
|
python) echo "python3" ;;
|
|
pip) echo "python3-pip" ;;
|
|
ruby-dev) echo "ruby-dev" ;;
|
|
*) echo "$generic_name" ;;
|
|
esac
|
|
;;
|
|
rhel)
|
|
case "$generic_name" in
|
|
python) echo "python3" ;;
|
|
pip) echo "python3-pip" ;;
|
|
ruby-dev) echo "ruby-devel" ;;
|
|
libssl-dev) echo "openssl-devel" ;;
|
|
build-essential) echo "gcc gcc-c++ make" ;;
|
|
*) echo "$generic_name" ;;
|
|
esac
|
|
;;
|
|
arch)
|
|
case "$generic_name" in
|
|
python) echo "python" ;;
|
|
pip) echo "python-pip" ;;
|
|
ruby-dev) echo "ruby" ;;
|
|
libssl-dev) echo "openssl" ;;
|
|
build-essential) echo "base-devel" ;;
|
|
*) echo "$generic_name" ;;
|
|
esac
|
|
;;
|
|
macos)
|
|
case "$generic_name" in
|
|
python) echo "python@3" ;;
|
|
pip) echo "" ;; # comes with python
|
|
ruby-dev) echo "ruby" ;;
|
|
libssl-dev) echo "openssl" ;;
|
|
build-essential) echo "" ;; # xcode tools
|
|
*) echo "$generic_name" ;;
|
|
esac
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Install build tools
|
|
install_build_tools() {
|
|
echo -e "$OKBLUE[*]$RESET Installing build tools..."
|
|
|
|
case "$OS" in
|
|
debian)
|
|
pkg_install build-essential git curl wget
|
|
;;
|
|
rhel)
|
|
pkg_install gcc gcc-c++ make git curl wget
|
|
if [[ "$PKG_MANAGER" == "dnf" ]]; then
|
|
$PKG_MANAGER groupinstall -y "Development Tools" 2>/dev/null || true
|
|
else
|
|
$PKG_MANAGER groupinstall -y "Development Tools" 2>/dev/null || true
|
|
fi
|
|
;;
|
|
arch)
|
|
pkg_install base-devel git curl wget
|
|
;;
|
|
opensuse)
|
|
pkg_install -t pattern devel_basis
|
|
pkg_install git curl wget
|
|
;;
|
|
macos)
|
|
# Check for Xcode Command Line Tools
|
|
if ! xcode-select -p &>/dev/null; then
|
|
echo -e "$OKBLUE[*]$RESET Installing Xcode Command Line Tools..."
|
|
xcode-select --install 2>/dev/null || true
|
|
fi
|
|
pkg_install git curl wget
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Install base dependencies
|
|
install_base_dependencies() {
|
|
echo -e "$OKBLUE[*]$RESET Installing base dependencies..."
|
|
|
|
local base_pkgs=()
|
|
|
|
case "$OS" in
|
|
debian)
|
|
base_pkgs=(
|
|
sudo gpg curl wget git
|
|
nmap nikto sqlmap hydra
|
|
whois dnsutils dnsrecon
|
|
ruby rubygems ruby-dev
|
|
python3 python3-pip python3-paramiko
|
|
golang
|
|
nodejs npm
|
|
php php-curl
|
|
dos2unix aha jq xmlstarlet
|
|
libxml2-utils xsltproc
|
|
net-tools iputils-ping
|
|
nfs-common rpcbind
|
|
nbtscan enum4linux
|
|
whatweb wafw00f sslscan
|
|
xdg-utils xvfb
|
|
p7zip-full
|
|
libssl-dev
|
|
)
|
|
|
|
# Optional packages
|
|
pkg_install theharvester 2>/dev/null || true
|
|
pkg_install urlcrazy 2>/dev/null || true
|
|
|
|
# Install chromium
|
|
if [[ "$ID" == "ubuntu" ]]; then
|
|
snap install chromium 2>/dev/null || apt install -y chromium-browser 2>/dev/null || true
|
|
else
|
|
pkg_install chromium 2>/dev/null || pkg_install chromium-browser 2>/dev/null || true
|
|
fi
|
|
;;
|
|
|
|
rhel)
|
|
# Enable EPEL for RHEL-based systems
|
|
if [[ "$ID" == "rhel" ]] || [[ "$ID" == "centos" ]] || [[ "$ID" == "rocky" ]] || [[ "$ID" == "alma" ]]; then
|
|
$PKG_MANAGER install -y epel-release 2>/dev/null || true
|
|
fi
|
|
|
|
base_pkgs=(
|
|
sudo git curl wget
|
|
nmap
|
|
whois bind-utils
|
|
ruby ruby-devel rubygems
|
|
python3 python3-pip
|
|
golang
|
|
nodejs npm
|
|
php php-curl
|
|
jq
|
|
libxml2 libxslt
|
|
net-tools iputils
|
|
rpcbind
|
|
openssl openssl-devel
|
|
p7zip p7zip-plugins
|
|
xorg-x11-server-Xvfb
|
|
)
|
|
|
|
# Try to install additional tools (may not be available)
|
|
pkg_install nikto sqlmap hydra 2>/dev/null || true
|
|
;;
|
|
|
|
arch)
|
|
base_pkgs=(
|
|
sudo git curl wget
|
|
nmap nikto sqlmap hydra
|
|
whois dnsutils
|
|
ruby rubygems
|
|
python python-pip python-paramiko
|
|
go
|
|
nodejs npm
|
|
php
|
|
dos2unix jq xmlstarlet
|
|
libxml2 libxslt
|
|
net-tools iputils
|
|
nfs-utils rpcbind
|
|
sslscan
|
|
xorg-xauth xorg-server-xvfb
|
|
p7zip
|
|
openssl
|
|
)
|
|
;;
|
|
|
|
macos)
|
|
base_pkgs=(
|
|
git curl wget
|
|
nmap
|
|
ruby
|
|
python@3
|
|
go
|
|
node
|
|
php
|
|
jq
|
|
libxml2 libxslt
|
|
p7zip
|
|
openssl
|
|
)
|
|
|
|
# Some tools may need cask
|
|
brew install --cask chromium 2>/dev/null || true
|
|
;;
|
|
esac
|
|
|
|
pkg_install "${base_pkgs[@]}"
|
|
}
|
|
|
|
# Setup Python environment
|
|
setup_python() {
|
|
echo -e "$OKBLUE[*]$RESET Setting up Python environment..."
|
|
|
|
# Upgrade pip
|
|
python3 -m pip install --upgrade pip --break-system-packages 2>/dev/null || \
|
|
python3 -m pip install --upgrade pip 2>/dev/null || true
|
|
|
|
# Install Python packages
|
|
local py_packages=(
|
|
dnspython
|
|
colorama
|
|
tldextract
|
|
urllib3
|
|
ipaddress
|
|
requests
|
|
h8mail
|
|
webtech
|
|
)
|
|
|
|
for pkg in "${py_packages[@]}"; do
|
|
pip3 install "$pkg" --break-system-packages 2>/dev/null || \
|
|
pip3 install "$pkg" 2>/dev/null || true
|
|
done
|
|
}
|
|
|
|
# Setup Ruby environment
|
|
setup_ruby() {
|
|
echo -e "$OKBLUE[*]$RESET Setting up Ruby environment..."
|
|
|
|
local ruby_gems=(
|
|
rake
|
|
ruby-nmap
|
|
net-http-persistent
|
|
mechanize
|
|
text-table
|
|
public_suffix
|
|
)
|
|
|
|
for gem in "${ruby_gems[@]}"; do
|
|
gem install "$gem" 2>/dev/null || true
|
|
done
|
|
|
|
# Reconfigure ruby (Debian-specific)
|
|
if [[ "$OS" == "debian" ]]; then
|
|
dpkg-reconfigure ruby 2>/dev/null || true
|
|
fi
|
|
}
|
|
|
|
# Setup Go environment
|
|
setup_go() {
|
|
echo -e "$OKBLUE[*]$RESET Setting up Go environment..."
|
|
|
|
# Ensure Go is in PATH
|
|
export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin
|
|
export GOPATH=$HOME/go
|
|
|
|
# Create Go bin directory
|
|
mkdir -p "$GO_DIR" 2>/dev/null || true
|
|
|
|
# Update Go (if needed)
|
|
go version 2>/dev/null || {
|
|
echo -e "$OKRED[!]$RESET Go is not properly installed"
|
|
return 1
|
|
}
|
|
}
|
|
|
|
# Install Metasploit
|
|
install_metasploit() {
|
|
echo -e "$OKBLUE[*]$RESET Installing Metasploit Framework..."
|
|
|
|
case "$OS" in
|
|
debian|rhel)
|
|
# Use official installer
|
|
if ! command -v msfconsole &>/dev/null; then
|
|
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > /tmp/msfinstall
|
|
chmod 755 /tmp/msfinstall
|
|
/tmp/msfinstall 2>/dev/null || echo -e "$OKORANGE[!]$RESET Metasploit installation failed (optional)"
|
|
rm -f /tmp/msfinstall
|
|
fi
|
|
;;
|
|
arch)
|
|
pkg_install metasploit 2>/dev/null || true
|
|
;;
|
|
macos)
|
|
brew install metasploit 2>/dev/null || true
|
|
;;
|
|
esac
|
|
|
|
# Initialize database
|
|
if command -v msfdb &>/dev/null; then
|
|
msfdb init 2>/dev/null || true
|
|
fi
|
|
}
|
|
|
|
# Create directory structure
|
|
create_directories() {
|
|
echo -e "$OKBLUE[*]$RESET Creating directory structure..."
|
|
|
|
local dirs=(
|
|
"$INSTALL_DIR"
|
|
"$LOOT_DIR"
|
|
"$LOOT_DIR/domains"
|
|
"$LOOT_DIR/screenshots"
|
|
"$LOOT_DIR/nmap"
|
|
"$LOOT_DIR/reports"
|
|
"$LOOT_DIR/output"
|
|
"$LOOT_DIR/osint"
|
|
"$LOOT_DIR/workspaces"
|
|
"$PLUGINS_DIR"
|
|
"$GO_DIR"
|
|
)
|
|
|
|
for dir in "${dirs[@]}"; do
|
|
mkdir -p "$dir" 2>/dev/null || true
|
|
done
|
|
|
|
# Set permissions
|
|
if [[ "$OS" != "macos" ]]; then
|
|
chmod 755 -Rf "$INSTALL_DIR" 2>/dev/null || true
|
|
chown -R root:root "$INSTALL_DIR" 2>/dev/null || true
|
|
fi
|
|
}
|
|
|
|
# Install Sn1per files
|
|
install_sniper_files() {
|
|
echo -e "$OKBLUE[*]$RESET Installing Sn1per files..."
|
|
|
|
# Copy all files to install directory
|
|
cp -Rf ./* "$INSTALL_DIR/" 2>/dev/null || true
|
|
|
|
# Make main script executable
|
|
chmod +x "$INSTALL_DIR/sniper" 2>/dev/null || true
|
|
}
|
|
|
|
# Install Go-based tools
|
|
install_go_tools() {
|
|
echo -e "$OKBLUE[*]$RESET Installing Go-based tools..."
|
|
|
|
cd "$GO_DIR" || return
|
|
|
|
local go_tools=(
|
|
"github.com/projectdiscovery/nuclei/v2/cmd/nuclei@latest:nuclei"
|
|
"github.com/haccer/subjack@latest:subjack"
|
|
"github.com/Ice3man543/SubOver@latest:subover"
|
|
"github.com/theblackturtle/fprobe@latest:fprobe"
|
|
"github.com/harleo/asnip@latest:asnip"
|
|
"github.com/lc/gau@latest:gau"
|
|
"github.com/projectdiscovery/httpx@latest:httpx"
|
|
"github.com/ffuf/ffuf@latest:ffuf"
|
|
"github.com/gwen001/github-endpoints@latest:github-endpoints"
|
|
"github.com/d3mondev/puredns/v2@latest:puredns"
|
|
"github.com/OWASP/Amass/v3/...@master:amass"
|
|
"github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest:subfinder"
|
|
"github.com/1N3/dirdar@latest:dirdar"
|
|
)
|
|
|
|
for tool_info in "${go_tools[@]}"; do
|
|
IFS=':' read -r tool_path tool_name <<< "$tool_info"
|
|
echo -e "$OKBLUE[*]$RESET Installing $tool_name..."
|
|
|
|
GO111MODULE=on go install -v "$tool_path" 2>/dev/null || true
|
|
|
|
# Create symlink
|
|
if [[ -f "$HOME/go/bin/$tool_name" ]]; then
|
|
ln -fs "$HOME/go/bin/$tool_name" /usr/local/bin/"$tool_name" 2>/dev/null || \
|
|
ln -fs "$HOME/go/bin/$tool_name" /usr/bin/"$tool_name" 2>/dev/null || true
|
|
fi
|
|
done
|
|
|
|
# Update nuclei templates
|
|
if command -v nuclei &>/dev/null; then
|
|
nuclei -update-templates 2>/dev/null || nuclei --update 2>/dev/null || true
|
|
fi
|
|
}
|
|
|
|
# Install Python-based tools
|
|
install_python_tools() {
|
|
echo -e "$OKBLUE[*]$RESET Installing Python-based tools..."
|
|
|
|
cd "$PLUGINS_DIR" || return
|
|
|
|
# Sublist3r
|
|
if [[ ! -d "Sublist3r" ]]; then
|
|
echo -e "$OKBLUE[*]$RESET Installing Sublist3r..."
|
|
git clone https://github.com/1N3/Sublist3r.git 2>/dev/null || true
|
|
fi
|
|
|
|
# Shocker
|
|
if [[ ! -d "shocker" ]]; then
|
|
echo -e "$OKBLUE[*]$RESET Installing Shocker..."
|
|
git clone https://github.com/nccgroup/shocker.git 2>/dev/null || true
|
|
fi
|
|
|
|
# SSH-Audit
|
|
if [[ ! -d "ssh-audit" ]]; then
|
|
echo -e "$OKBLUE[*]$RESET Installing SSH-Audit..."
|
|
git clone https://github.com/arthepsy/ssh-audit 2>/dev/null || true
|
|
fi
|
|
|
|
# Jexboss
|
|
if [[ ! -d "jexboss" ]]; then
|
|
echo -e "$OKBLUE[*]$RESET Installing Jexboss..."
|
|
git clone https://github.com/1N3/jexboss.git 2>/dev/null || true
|
|
fi
|
|
|
|
# WIG
|
|
if [[ ! -d "wig" ]]; then
|
|
echo -e "$OKBLUE[*]$RESET Installing Wig..."
|
|
git clone https://github.com/jekyc/wig.git 2>/dev/null || true
|
|
fi
|
|
|
|
# CORStest
|
|
if [[ ! -d "CORStest" ]]; then
|
|
echo -e "$OKBLUE[*]$RESET Installing CORStest..."
|
|
git clone https://github.com/RUB-NDS/CORStest.git 2>/dev/null || true
|
|
fi
|
|
|
|
# Vulscan
|
|
if [[ ! -d "vulscan" ]]; then
|
|
echo -e "$OKBLUE[*]$RESET Installing Vulscan..."
|
|
git clone https://github.com/scipag/vulscan 2>/dev/null || true
|
|
fi
|
|
|
|
# Metagoofil
|
|
if [[ ! -d "metagoofil" ]]; then
|
|
echo -e "$OKBLUE[*]$RESET Installing Metagoofil..."
|
|
git clone https://github.com/laramies/metagoofil.git 2>/dev/null || true
|
|
fi
|
|
|
|
# Shodan
|
|
if [[ ! -d "shodan-python" ]]; then
|
|
echo -e "$OKBLUE[*]$RESET Installing Shodan..."
|
|
git clone https://github.com/achillean/shodan-python 2>/dev/null || true
|
|
cd shodan-python && python3 setup.py install 2>/dev/null || true
|
|
cd "$PLUGINS_DIR"
|
|
fi
|
|
|
|
# CMSMap
|
|
if [[ ! -d "CMSmap" ]]; then
|
|
echo -e "$OKBLUE[*]$RESET Installing CMSMap..."
|
|
git clone https://github.com/Dionach/CMSmap.git 2>/dev/null || true
|
|
cd CMSmap && pip3 install . --break-system-packages 2>/dev/null || pip3 install . 2>/dev/null || true
|
|
python3 setup.py install 2>/dev/null || true
|
|
cd "$PLUGINS_DIR"
|
|
fi
|
|
|
|
# Smuggler
|
|
if [[ ! -d "smuggler" ]]; then
|
|
echo -e "$OKBLUE[*]$RESET Installing Smuggler..."
|
|
git clone https://github.com/defparam/smuggler.git 2>/dev/null || true
|
|
fi
|
|
|
|
# Dirsearch
|
|
if [[ ! -d "dirsearch" ]]; then
|
|
echo -e "$OKBLUE[*]$RESET Installing Dirsearch..."
|
|
wget -q https://github.com/maurosoria/dirsearch/archive/refs/tags/v0.4.2.tar.gz -O /tmp/dirsearch.tar.gz
|
|
tar -xzf /tmp/dirsearch.tar.gz -C "$PLUGINS_DIR"
|
|
mv "$PLUGINS_DIR/dirsearch-0.4.2" "$PLUGINS_DIR/dirsearch" 2>/dev/null || true
|
|
cd dirsearch && pip3 install -r requirements.txt --break-system-packages 2>/dev/null || pip3 install -r requirements.txt 2>/dev/null || true
|
|
rm -f /tmp/dirsearch.tar.gz
|
|
cd "$PLUGINS_DIR"
|
|
fi
|
|
|
|
# SecretFinder
|
|
if [[ ! -d "secretfinder" ]]; then
|
|
echo -e "$OKBLUE[*]$RESET Installing SecretFinder..."
|
|
git clone https://github.com/m4ll0k/SecretFinder.git secretfinder 2>/dev/null || true
|
|
pip3 install -r "$PLUGINS_DIR/secretfinder/requirements.txt" --break-system-packages 2>/dev/null || \
|
|
pip3 install -r "$PLUGINS_DIR/secretfinder/requirements.txt" 2>/dev/null || true
|
|
fi
|
|
|
|
# LinkFinder
|
|
if [[ ! -d "LinkFinder" ]]; then
|
|
echo -e "$OKBLUE[*]$RESET Installing LinkFinder..."
|
|
git clone https://github.com/1N3/LinkFinder 2>/dev/null || true
|
|
cd LinkFinder && python3 setup.py install 2>/dev/null || true
|
|
cd "$PLUGINS_DIR"
|
|
fi
|
|
|
|
# GitGraber
|
|
if [[ ! -d "gitGraber" ]]; then
|
|
echo -e "$OKBLUE[*]$RESET Installing GitGrabber..."
|
|
git clone https://github.com/hisxo/gitGraber.git 2>/dev/null || true
|
|
pip3 install -r "$PLUGINS_DIR/gitGraber/requirements.txt" --break-system-packages 2>/dev/null || \
|
|
pip3 install -r "$PLUGINS_DIR/gitGraber/requirements.txt" 2>/dev/null || true
|
|
fi
|
|
|
|
# Censys-Subdomain-Finder
|
|
if [[ ! -d "censys-subdomain-finder" ]]; then
|
|
echo -e "$OKBLUE[*]$RESET Installing Censys-Subdomain-Finder..."
|
|
git clone https://github.com/christophetd/censys-subdomain-finder.git 2>/dev/null || true
|
|
pip3 install -r "$PLUGINS_DIR/censys-subdomain-finder/requirements.txt" --break-system-packages 2>/dev/null || \
|
|
pip3 install -r "$PLUGINS_DIR/censys-subdomain-finder/requirements.txt" 2>/dev/null || true
|
|
fi
|
|
|
|
# DNScan
|
|
if [[ ! -d "dnscan" ]]; then
|
|
echo -e "$OKBLUE[*]$RESET Installing DNScan..."
|
|
git clone https://github.com/rbsec/dnscan.git 2>/dev/null || true
|
|
pip3 install -r "$PLUGINS_DIR/dnscan/requirements.txt" --break-system-packages 2>/dev/null || \
|
|
pip3 install -r "$PLUGINS_DIR/dnscan/requirements.txt" 2>/dev/null || true
|
|
fi
|
|
|
|
# AltDNS
|
|
if [[ ! -d "altdns" ]]; then
|
|
echo -e "$OKBLUE[*]$RESET Installing AltDNS..."
|
|
git clone https://github.com/infosec-au/altdns.git 2>/dev/null || true
|
|
cd altdns
|
|
pip3 install -r requirements.txt --break-system-packages 2>/dev/null || pip3 install -r requirements.txt 2>/dev/null || true
|
|
python3 setup.py install 2>/dev/null || true
|
|
pip3 install py-altdns --break-system-packages 2>/dev/null || pip3 install py-altdns 2>/dev/null || true
|
|
cd "$PLUGINS_DIR"
|
|
fi
|
|
|
|
# MassDNS
|
|
if [[ ! -d "massdns" ]]; then
|
|
echo -e "$OKBLUE[*]$RESET Installing MassDNS..."
|
|
git clone https://github.com/blechschmidt/massdns.git 2>/dev/null || true
|
|
cd massdns
|
|
make 2>/dev/null && make install 2>/dev/null || true
|
|
cd "$PLUGINS_DIR"
|
|
fi
|
|
|
|
# DNSGen
|
|
if [[ ! -d "dnsgen" ]]; then
|
|
echo -e "$OKBLUE[*]$RESET Installing DNSGen..."
|
|
git clone https://github.com/ProjectAnte/dnsgen 2>/dev/null || true
|
|
cd dnsgen
|
|
pip3 install -r requirements.txt --break-system-packages 2>/dev/null || pip3 install -r requirements.txt 2>/dev/null || true
|
|
python3 setup.py install 2>/dev/null || true
|
|
cd "$PLUGINS_DIR"
|
|
fi
|
|
|
|
# BlackWidow
|
|
if [[ ! -d "BlackWidow" ]]; then
|
|
echo -e "$OKBLUE[*]$RESET Installing BlackWidow..."
|
|
git clone https://github.com/1N3/BlackWidow 2>/dev/null || true
|
|
cd BlackWidow && bash install.sh force 2>/dev/null || true
|
|
cd "$PLUGINS_DIR"
|
|
fi
|
|
|
|
# BruteX
|
|
if [[ ! -d "BruteX" ]]; then
|
|
echo -e "$OKBLUE[*]$RESET Installing BruteX..."
|
|
git clone https://github.com/1N3/BruteX.git 2>/dev/null || true
|
|
cd BruteX && bash install.sh 2>/dev/null || true
|
|
cd "$PLUGINS_DIR"
|
|
fi
|
|
|
|
# FindSploit
|
|
if [[ ! -d "Findsploit" ]]; then
|
|
echo -e "$OKBLUE[*]$RESET Installing FindSploit..."
|
|
git clone https://github.com/1N3/Findsploit.git 2>/dev/null || true
|
|
cd Findsploit && bash install.sh 2>/dev/null || true
|
|
cd "$PLUGINS_DIR"
|
|
fi
|
|
|
|
# GooHak
|
|
if [[ ! -d "Goohak" ]]; then
|
|
echo -e "$OKBLUE[*]$RESET Installing GooHak..."
|
|
git clone https://github.com/1N3/Goohak.git 2>/dev/null || true
|
|
chmod +x "$PLUGINS_DIR/Goohak/goohak" 2>/dev/null || true
|
|
fi
|
|
}
|
|
|
|
# Install additional tools
|
|
install_additional_tools() {
|
|
echo -e "$OKBLUE[*]$RESET Installing additional tools..."
|
|
|
|
# GoBuster
|
|
if ! command -v gobuster &>/dev/null; then
|
|
echo -e "$OKBLUE[*]$RESET Installing GoBuster..."
|
|
case "$OS" in
|
|
debian)
|
|
apt install -y gobuster 2>/dev/null || {
|
|
# Manual install if not in repos
|
|
wget -q https://github.com/OJ/gobuster/releases/download/v3.0.1/gobuster-linux-amd64.7z -O /tmp/gobuster.7z
|
|
cd /tmp && 7z e gobuster.7z && chmod +rx gobuster && mv gobuster /usr/bin/gobuster
|
|
}
|
|
;;
|
|
rhel)
|
|
# Manual install
|
|
wget -q https://github.com/OJ/gobuster/releases/download/v3.0.1/gobuster-linux-amd64.7z -O /tmp/gobuster.7z
|
|
cd /tmp && 7z e gobuster.7z && chmod +rx gobuster && mv gobuster /usr/bin/gobuster
|
|
;;
|
|
macos)
|
|
brew install gobuster 2>/dev/null || true
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
# Arachni (Linux only)
|
|
if [[ "$OS" != "macos" ]] && [[ ! -d "/usr/share/arachni" ]]; then
|
|
echo -e "$OKBLUE[*]$RESET Installing Arachni..."
|
|
wget -q https://github.com/Arachni/arachni/releases/download/v1.5.1/arachni-1.5.1-0.5.12-linux-x86_64.tar.gz -O /tmp/arachni.tar.gz
|
|
cd /tmp && tar -xzf arachni.tar.gz && rm -f arachni.tar.gz
|
|
mkdir -p /usr/share/arachni 2>/dev/null
|
|
cp -Rf arachni-*/* /usr/share/arachni/ 2>/dev/null
|
|
rm -rf arachni-*
|
|
# Create symlinks
|
|
cd /usr/share/arachni/bin/
|
|
for binary in *; do
|
|
ln -fs "$PWD/$binary" /usr/bin/"$binary" 2>/dev/null || true
|
|
done
|
|
fi
|
|
|
|
# Vulners Nmap Script
|
|
echo -e "$OKBLUE[*]$RESET Installing Vulners Nmap script..."
|
|
local nmap_scripts_dir
|
|
case "$OS" in
|
|
debian|rhel|arch)
|
|
nmap_scripts_dir="/usr/share/nmap/scripts"
|
|
;;
|
|
macos)
|
|
nmap_scripts_dir="/usr/local/share/nmap/scripts"
|
|
;;
|
|
esac
|
|
|
|
if [[ -d "$nmap_scripts_dir" ]]; then
|
|
wget -q https://raw.githubusercontent.com/vulnersCom/nmap-vulners/master/vulners.nse -O "$nmap_scripts_dir/vulners.nse"
|
|
chmod 644 "$nmap_scripts_dir/vulners.nse" 2>/dev/null || true
|
|
nmap --script-updatedb 2>/dev/null || true
|
|
fi
|
|
|
|
# DNS Resolvers
|
|
echo -e "$OKBLUE[*]$RESET Downloading DNS resolvers list..."
|
|
mkdir -p "$INSTALL_DIR/wordlists" 2>/dev/null
|
|
wget -q https://raw.githubusercontent.com/janmasarik/resolvers/master/resolvers.txt -O "$INSTALL_DIR/wordlists/resolvers.txt" 2>/dev/null || true
|
|
}
|
|
|
|
# Create symlinks
|
|
create_symlinks() {
|
|
echo -e "$OKBLUE[*]$RESET Creating symlinks..."
|
|
|
|
# Main symlinks
|
|
ln -fs "$INSTALL_DIR/sniper" /usr/bin/sniper 2>/dev/null || \
|
|
ln -fs "$INSTALL_DIR/sniper" /usr/local/bin/sniper 2>/dev/null || true
|
|
|
|
ln -fs "$PLUGINS_DIR/Goohak/goohak" /usr/bin/goohak 2>/dev/null || \
|
|
ln -fs "$PLUGINS_DIR/Goohak/goohak" /usr/local/bin/goohak 2>/dev/null || true
|
|
|
|
ln -fs "$PLUGINS_DIR/dirsearch/dirsearch.py" /usr/bin/dirsearch 2>/dev/null || \
|
|
ln -fs "$PLUGINS_DIR/dirsearch/dirsearch.py" /usr/local/bin/dirsearch 2>/dev/null || true
|
|
|
|
# Directory symlinks
|
|
ln -fs /usr/share/sniper /sniper 2>/dev/null || true
|
|
ln -fs /usr/share/sniper /usr/share/sn1per 2>/dev/null || true
|
|
ln -fs /usr/share/sniper/loot/workspaces /workspace 2>/dev/null || true
|
|
|
|
# User directory symlinks (Linux only)
|
|
if [[ "$OS" != "macos" ]]; then
|
|
ln -fs /usr/share/sniper/loot/workspaces /root/workspace 2>/dev/null || true
|
|
ln -fs /usr/share/sniper /root/sniper 2>/dev/null || true
|
|
ln -fs /root/.sniper.conf /usr/share/sniper/conf/sniper.conf 2>/dev/null || true
|
|
ln -fs /root/.sniper_api_keys.conf /usr/share/sniper/conf/sniper_api_keys.conf 2>/dev/null || true
|
|
fi
|
|
}
|
|
|
|
# Setup desktop shortcuts (Linux only)
|
|
setup_desktop_shortcuts() {
|
|
if [[ "$OS" == "macos" ]]; then
|
|
return
|
|
fi
|
|
|
|
echo -e "$OKBLUE[*]$RESET Setting up desktop shortcuts..."
|
|
|
|
# Copy desktop files
|
|
cp -f "$INSTALL_DIR/sn1per.desktop" /usr/share/applications/ 2>/dev/null || true
|
|
cp -f "$INSTALL_DIR/sn1per.png" /usr/share/pixmaps/ 2>/dev/null || true
|
|
|
|
# Kali menu integration
|
|
if [[ -d /usr/share/kali-menu/applications ]]; then
|
|
cp -f "$INSTALL_DIR/sn1per.desktop" /usr/share/kali-menu/applications/ 2>/dev/null || true
|
|
fi
|
|
|
|
# Plugin desktop files
|
|
if [[ -f "$PLUGINS_DIR/BruteX/brutex.desktop" ]]; then
|
|
cp -f "$PLUGINS_DIR/BruteX/brutex.desktop" /usr/share/applications/ 2>/dev/null || true
|
|
cp -f "$PLUGINS_DIR/BruteX/brutex.desktop" /usr/share/kali-menu/applications/ 2>/dev/null || true
|
|
fi
|
|
|
|
if [[ -f "$PLUGINS_DIR/BlackWidow/blackwidow.desktop" ]]; then
|
|
cp -f "$PLUGINS_DIR/BlackWidow/blackwidow.desktop" /usr/share/applications/ 2>/dev/null || true
|
|
cp -f "$PLUGINS_DIR/BlackWidow/blackwidow.desktop" /usr/share/kali-menu/applications/ 2>/dev/null || true
|
|
fi
|
|
|
|
if [[ -f "$PLUGINS_DIR/Findsploit/findsploit.desktop" ]]; then
|
|
cp -f "$PLUGINS_DIR/Findsploit/findsploit.desktop" /usr/share/applications/ 2>/dev/null || true
|
|
cp -f "$PLUGINS_DIR/Findsploit/findsploit.desktop" /usr/share/kali-menu/applications/ 2>/dev/null || true
|
|
fi
|
|
|
|
# Desktop workspace shortcuts
|
|
ln -fs /usr/share/sniper/loot/workspaces/ /home/kali/Desktop/workspaces 2>/dev/null || true
|
|
ln -fs /usr/share/sniper/loot/workspaces/ /root/Desktop/workspaces 2>/dev/null || true
|
|
}
|
|
|
|
# Setup configuration
|
|
setup_configuration() {
|
|
echo -e "$OKBLUE[*]$RESET Setting up configuration..."
|
|
|
|
if [[ "$OS" != "macos" ]]; then
|
|
# Backup and copy config
|
|
mv /root/.sniper.conf /root/.sniper.conf.bak 2>/dev/null || true
|
|
cp -f "$INSTALL_DIR/sniper.conf" /root/.sniper.conf 2>/dev/null || true
|
|
|
|
# X11 setup for GUI tools (Linux only)
|
|
if [[ -f /root/.Xauthority ]]; then
|
|
cp -a /root/.Xauthority /root/.Xauthority.bak 2>/dev/null || true
|
|
fi
|
|
|
|
if [[ "$USER" != "root" ]] && [[ -f /home/$USER/.Xauthority ]]; then
|
|
cp -a /home/$USER/.Xauthority /root/.Xauthority 2>/dev/null || true
|
|
chown root:root /root/.Xauthority 2>/dev/null || true
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Cleanup
|
|
cleanup() {
|
|
echo -e "$OKBLUE[*]$RESET Cleaning up temporary files..."
|
|
rm -rf /tmp/arachni* /tmp/gobuster* /tmp/msfinstall /tmp/openssl.cnf /tmp/dirsearch* 2>/dev/null || true
|
|
}
|
|
|
|
# Main installation flow
|
|
main() {
|
|
echo -e "$OKRED[>]$RESET This script will install Sn1per under $INSTALL_DIR."
|
|
|
|
if [[ "$1" != "force" ]] && [[ "$1" != "-y" ]]; then
|
|
echo -e "$OKRED[>]$RESET Do you want to continue? (y/n) $RESET"
|
|
read -r answer
|
|
if [[ "$answer" != "y" ]] && [[ "$answer" != "Y" ]]; then
|
|
echo -e "$OKRED[>]$RESET Installation cancelled."
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
# Detect OS
|
|
detect_os
|
|
|
|
# Check root privileges
|
|
check_root
|
|
|
|
# Create directories
|
|
create_directories
|
|
|
|
# Install Sn1per files
|
|
install_sniper_files
|
|
|
|
# Update package repos
|
|
pkg_update
|
|
|
|
# Install build tools
|
|
install_build_tools
|
|
|
|
# Install base dependencies
|
|
install_base_dependencies
|
|
|
|
# Setup language environments
|
|
setup_python
|
|
setup_ruby
|
|
setup_go
|
|
|
|
# Install tools by category
|
|
install_metasploit
|
|
install_go_tools
|
|
install_python_tools
|
|
install_additional_tools
|
|
|
|
# Create symlinks
|
|
create_symlinks
|
|
|
|
# Setup desktop shortcuts (Linux only)
|
|
setup_desktop_shortcuts
|
|
|
|
# Setup configuration
|
|
setup_configuration
|
|
|
|
# Cleanup
|
|
cleanup
|
|
|
|
echo ""
|
|
echo -e "$OKGREEN[✓]$RESET Installation complete!"
|
|
echo -e "$OKGREEN[✓]$RESET To run Sn1per, type: ${OKBLUE}sniper${RESET}"
|
|
echo ""
|
|
echo -e "$OKORANGE[*]$RESET OS Detected: $OS"
|
|
echo -e "$OKORANGE[*]$RESET Install Directory: $INSTALL_DIR"
|
|
echo -e "$OKORANGE[*]$RESET Loot Directory: $LOOT_DIR"
|
|
echo ""
|
|
|
|
# System-specific notes
|
|
case "$OS" in
|
|
macos)
|
|
echo -e "$OKORANGE[!]$RESET Note: Some tools may require additional configuration on macOS"
|
|
echo -e "$OKORANGE[!]$RESET Run with sudo if you encounter permission issues"
|
|
;;
|
|
rhel)
|
|
echo -e "$OKORANGE[!]$RESET Note: Some optional tools may not be available in RHEL repos"
|
|
echo -e "$OKORANGE[!]$RESET Consider enabling additional repositories if needed"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Run main installation
|
|
main "$@"
|