#!/bin/bash # + -- --=[Sn1per Community Edition by @xer0dayz # + -- --=[https://sn1persecurity.com # if [[ $EUID -ne 0 ]]; then echo "This script must be run as root" exit 1 fi VER="9.2" INSTALL_DIR="/usr/share/sniper" LOOT_DIR="$INSTALL_DIR/loot/$TARGET" SNIPER_PRO=$INSTALL_DIR/pro.sh # INIT POSTGRESQL service postgresql start 2> /dev/null # LOAD DEFAULT SNIPER CONFIGURATION FILE dos2unix $INSTALL_DIR/sniper.conf 2> /dev/null > /dev/null source $INSTALL_DIR/sniper.conf echo -e "$OKBLUE[*]$RESET Loaded configuration file from $INSTALL_DIR/sniper.conf $OKBLUE[$RESET${OKGREEN}OK${RESET}$OKBLUE]$RESET" if [[ -f /root/.sniper.conf ]]; then # LOAD USER SN1PER CONFIGURATION FILE dos2unix /root/.sniper.conf 2> /dev/null > /dev/null source /root/.sniper.conf echo -e "$OKBLUE[*]$RESET Loaded configuration file from /root/.sniper.conf $OKBLUE[$RESET${OKGREEN}OK${RESET}$OKBLUE]$RESET" if [[ -f /root/.sniper_api_keys.conf ]]; then # LOAD USER API KEYS (PERSISTENT CONFIG) dos2unix /root/.sniper_api_keys.conf 2> /dev/null > /dev/null source /root/.sniper_api_keys.conf echo -e "$OKBLUE[*]$RESET Loaded API keys from /root/.sniper_api_keys.conf $OKBLUE[$RESET${OKGREEN}OK${RESET}$OKBLUE]$RESET" fi else # IF NO USER CONFIG PRESENT, CREATE IT FROM THE DEFAULT TEMPLATE cp $INSTALL_DIR/sniper.conf /root/.sniper.conf 2> /dev/null dos2unix /root/.sniper.conf 2> /dev/null > /dev/null source /root/.sniper.conf echo -e "$OKBLUE[*]$RESET Loaded configuration file from /root/.sniper.conf $OKBLUE[$RESET${OKGREEN}OK${RESET}$OKBLUE]$RESET" fi DISTRO=$(cat /etc/*-release | grep DISTRIB_ID= | cut -d'=' -f2) function help { logo local star printf -v star "$OKBLUE[*]$RESET" cat <<EOHELP $star NORMAL MODE sniper -t <TARGET> $star SPECIFY CUSTOM CONFIG FILE sniper -c /full/path/to/sniper.conf -t <TARGET> -m <MODE> -w <WORKSPACE> $star NORMAL MODE + OSINT + RECON sniper -t <TARGET> -o -re $star STEALTH MODE + OSINT + RECON sniper -t <TARGET> -m stealth -o -re $star DISCOVER MODE sniper -t <CIDR> -m discover -w <WORSPACE_ALIAS> $star SCAN ONLY SPECIFIC PORT sniper -t <TARGET> -m port -p <portnum> $star FULLPORTONLY SCAN MODE sniper -t <TARGET> -fp $star WEB MODE - PORT 80 + 443 ONLY! sniper -t <TARGET> -m web $star HTTP WEB PORT MODE sniper -t <TARGET> -m webporthttp -p <port> $star HTTPS WEB PORT MODE sniper -t <TARGET> -m webporthttps -p <port> $star HTTP WEBSCAN MODE sniper -t <TARGET> -m webscan $star ENABLE BRUTEFORCE sniper -t <TARGET> -b $star AIRSTRIKE MODE sniper -f targets.txt -m airstrike $star NUKE MODE WITH TARGET LIST, BRUTEFORCE ENABLED, FULLPORTSCAN ENABLED, OSINT ENABLED, RECON ENABLED, WORKSPACE & LOOT ENABLED sniper -f targets.txt -m nuke -w <WORKSPACE_ALIAS> $star MASS PORT SCAN MODE sniper -f targets.txt -m massportscan -w <WORKSPACE_ALIAS> $star MASS WEB SCAN MODE sniper -f targets.txt -m massweb -w <WORKSPACE_ALIAS> $star MASS WEBSCAN SCAN MODE sniper -f targets.txt -m masswebscan -w <WORKSPACE_ALIAS> $star MASS VULN SCAN MODE sniper -f targets.txt -m massvulnscan -w <WORKSPACE_ALIAS> $star PORT SCAN MODE sniper -t <TARGET> -m port -p <PORT_NUM> $star LIST WORKSPACES sniper --list $star DELETE WORKSPACE sniper -w <WORKSPACE_ALIAS> -d $star DELETE HOST FROM WORKSPACE sniper -w <WORKSPACE_ALIAS> -t <TARGET> -dh $star DELETE TASKS FROM WORKSPACE sniper -w <WORKSPACE_ALIAS> -t <TARGET> -dt $star GET SNIPER SCAN STATUS sniper --status $star LOOT REIMPORT FUNCTION sniper -w <WORKSPACE_ALIAS> --reimport $star LOOT REIMPORTALL FUNCTION sniper -w <WORKSPACE_ALIAS> --reimportall $star LOOT REIMPORT FUNCTION sniper -w <WORKSPACE_ALIAS> --reload $star LOOT EXPORT FUNCTION sniper -w <WORKSPACE_ALIAS> --export $star SCHEDULED SCANS sniper -w <WORKSPACE_ALIAS> -s daily|weekly|monthly $star USE A CUSTOM CONFIG sniper -c /path/to/sniper.conf -t <TARGET> -w <WORKSPACE_ALIAS> $star UPDATE SNIPER sniper -u|--update EOHELP exit } function logo { 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 "" echo -e "$OKORANGE + -- --=[ https://sn1persecurity.com$RESET" echo -e "$OKORANGE + -- --=[ Sn1per v$VER by @xer0dayz$RESET" echo "" } function sniper_status { watch -n 1 -c 'ps -ef | egrep "sniper|slurp|hydra|ruby|python|dirsearch|amass|nmap|metasploit|curl|wget|nikto" && echo "NETWORK CONNECTIONS..." && netstat -an | egrep "TIME_WAIT|EST"' } # CHECK FOR UPDATES function check_update { if [[ "$ENABLE_AUTO_UPDATES" == "1" ]] && [[ "$ONLINE" == "1" ]]; then LATEST_VER=$(curl --connect-timeout 5 -s https://api.github.com/repos/1N3/Sn1per/tags | grep -Po '"name":.*?[^\\]",'| head -1 | cut -c11-13) if [[ "$LATEST_VER" != "$VER" ]]; then echo -e "$OKBLUE[$RESET${OKRED}i${RESET}$OKBLUE] sniper v$LATEST_VER is available to download... To update, type$OKRED \"sniper -u\" $RESET" fi fi touch /tmp/update-check.txt 2> /dev/null } # APPLY UPDATES function update { logo echo -e "$OKBLUE[*]$RESET Checking for updates...$OKBLUE[$RESET${OKGREEN}OK${RESET}$OKBLUE]$RESET" if [[ "$ONLINE" == "0" ]]; then echo "You will need to download the latest release manually at https://github.com/1N3/Sn1per/" else LATEST_VER=$(curl --connect-timeout 5 -s https://api.github.com/repos/1N3/Sn1per/tags | grep -Po '"name":.*?[^\\]",'| head -1 | cut -c11-13) if [[ "$LATEST_VER" != "$VER" ]]; then echo -e "$OKBLUE[$RESET${OKRED}i${RESET}$OKBLUE] Sn1per $LATEST_VER is available to download...Do you want to update? (y or n)$RESET" read ans if [[ "$ans" = "y" ]]; then rm -Rf /tmp/Sn1per/ 2>/dev/null git clone https://github.com/1N3/Sn1per /tmp/Sn1per/ cd /tmp/Sn1per/ chmod +rx install.sh bash install.sh rm -Rf /tmp/Sn1per/ 2>/dev/null exit fi fi fi } if [[ "$UPDATE" = "1" ]]; then update exit fi # CHECK IF ONLINE function check_online { ONLINE=$(curl --connect-timeout 3 --insecure -s "https://sn1persecurity.com/community/updates.txt?$VER&mid=$(cat /etc/machine-id)" 2> /dev/null) if [[ -z "$ONLINE" ]]; then ONLINE=$(curl --connect-timeout 3 -s https://api.github.com/repos/1N3/Sn1per/tags | grep -Po '"name":.*?[^\\]",'| head -1 | cut -c11-13) if [[ -z "$ONLINE" ]]; then ONLINE="0" echo -e "$OKBLUE[*]$RESET Checking for active internet connection $OKBLUE[$RESET${OKRED}FAIL${RESET}$OKBLUE]" echo -e "$OKBLUE[$RESET${OKRED}i${RESET}$OKBLUE]$RESET sniper is running in offline mode.$RESET" else ONLINE="1" echo -e "$OKBLUE[*]$RESET Checking for active internet connection $OKBLUE[$RESET${OKGREEN}OK${RESET}$OKBLUE]$RESET" fi else ONLINE="1" echo -e "$OKBLUE[*]$RESET Checking for active internet connection $OKBLUE[$RESET${OKGREEN}OK${RESET}$OKBLUE]$RESET" fi } # COMMAND LINE SWITCHES POSITIONAL=() while [[ $# -gt 0 ]] do key="$1" case $key in -h|--help) help shift # past argument ;; -c|--config) CONFIG="$2" echo -e "$OKBLUE[*]$RESET Creating backup of existing config to /root/.sniper.conf.bak...$OKBLUE[$RESET${OKGREEN}OK${RESET}$OKBLUE]$RESET" cp -f /root/.sniper.conf /root/.sniper.conf.bak echo -e "$OKBLUE[*]$RESET Copying $CONFIG to /root/.sniper.conf...$OKBLUE[$RESET${OKGREEN}OK${RESET}$OKBLUE]$RESET" cp -f $CONFIG /root/.sniper.conf 2> /dev/null dos2unix /root/.sniper.conf 2> /dev/null > /dev/null source /root/.sniper.conf sleep 1 shift shift ;; -t) TARGET="$2" shift # past argument shift # past argument ;; -b) AUTO_BRUTE="1" shift # past argument ;; -fp|--fullportscan) FULLNMAPSCAN="1" shift # past argument ;; -o|--osint) OSINT="1" shift # past argument ;; -re|--recon) RECON="1" shift # past argument ;; -m) MODE="$2" shift # past argument shift # past argument ;; -p) PORT="$2" shift # past argument shift # past argument ;; -f|--file) FILE="$(realpath $2)" shift # past argument shift # past argument ;; -ri|--reimport) REIMPORT="1" shift # past argument ;; -ria|--reimportall) REIMPORT_ALL="1" shift # past argument ;; -rl|--reload) RELOAD="1" shift # past argument ;; -n|--noreport) REPORT="0" shift # past argument ;; -nl|--noloot) LOOT="0" NOLOOT="1" shift # past argument ;; -w) WORKSPACE="$(echo $2 | tr / -)" WORKSPACE_DIR="$INSTALL_DIR/loot/workspace/$WORKSPACE" shift # past argument shift # past argument ;; -s|--schedule) if [[ -z "$WORKSPACE" ]]; then echo "You need to set a workspace via the -w switch to schedule a scan task." exit fi SCHEDULE_ARG="$2" if [[ "$SCHEDULE_ARG" = "daily" ]] || [[ "$SCHEDULE_ARG" = "weekly" ]] || [[ "$SCHEDULE_ARG" = "monthly" ]]; then SCHEDULE_TASK="$WORKSPACE_DIR/scans/scheduled/$SCHEDULE_ARG.sh" vim $SCHEDULE_TASK cat $WORKSPACE_DIR/scans/scheduled/*.sh 2> /dev/null exit else echo "You need to specify either daily, weekly or monthly for the scheduled scan argument." exit fi shift # past argument shift # past argument ;; -d|--delete) logo echo "Are you sure you want to remove the following workspace? (Hit Ctrl+C to exit): /usr/share/sniper/loot/workspace/$WORKSPACE/" read ANS rm -Rf /usr/share/sniper/loot/workspace/$WORKSPACE/ echo "Workspace /usr/share/sniper/loot/workspace/$WORKSPACE/ was removed." sniper -w default --reimport exit shift # past argument ;; -dh|--delete-host) echo "Removing $TARGET from $WORKSPACE" sed -i "/$TARGET/d" $WORKSPACE_DIR/domains/* $WORKSPACE_DIR/reports/host-table-report.csv egrep -R "$TARGET" $WORKSPACE_DIR/domains/* $WORKSPACE_DIR/reports/host-table-report.csv rm -f $WORKSPACE_DIR/screenshots/$TARGET*.jpg 2> /dev/null rm -f $WORKSPACE_DIR/nmap/dns-$TARGET.txt 2> /dev/null rm -f $WORKSPACE_DIR/nmap/ports-$TARGET.txt 2> /dev/null rm -f $WORKSPACE_DIR/web/title-*-$TARGET.txt 2> /dev/null rm -f $WORKSPACE_DIR/web/headers-*-$TARGET.txt 2> /dev/null rm -f $WORKSPACE_DIR/vulnerabilities/sc0pe-$TARGET-*.txt 2> /dev/null rm -f $WORKSPACE_DIR/vulnerabilities/vulnerability-report-$TARGET.txt 2> /dev/null rm -f $WORKSPACE_DIR/vulnerabilities/vulnerability-risk-$TARGET.txt 2> /dev/null #sniper --reimportall -w $WORKSPACE exit shift # past argument ;; -dt|--delete-task) echo "Removing all running $TARGET tasks from $WORKSPACE" rm -vf $WORKSPACE_DIR/scans/running_$TARGET_*.txt ls -lh $LOOT_DIR/scans/running_*.txt 2> /dev/null | wc -l 2> /dev/null > $WORKSPACE_DIR/scans/tasks-running.txt 2> /dev/null ps -ef | egrep "$TARGET|sniper" ps -ef | egrep "sniper" | awk '{print $2}' | xargs -i sudo kill -9 {} exit shift # past argument ;; --list) logo ls -l $INSTALL_DIR/loot/workspace/ echo "" echo "cd /usr/share/sniper/loot/workspace/" WORKSPACE_REPORT=$LOOT_DIR/sniper-report.html if [[ -f $WORKSPACE_REPORT ]]; then echo -e "$OKORANGE + -- --=[ Loading Sn1per Professional...$RESET" $BROWSER $INSTALL_DIR/loot/workspace/sniper-report.html 2> /dev/null > /dev/null & else echo -e "$OKORANGE + -- --=[ Loading workspaces...$RESET" $BROWSER $INSTALL_DIR/loot/workspace/ 2> /dev/null > /dev/null & fi exit shift ;; --export) if [[ -z "$WORKSPACE" ]]; then echo "You need to set a workspace via the -w switch to export a workspace." exit fi echo "Archiving $WORKSPACE to $INSTALL_DIR/loot/$WORKSPACE.tar" cd $INSTALL_DIR/loot/workspace/ && tar -cvf ../$WORKSPACE.tar $WORKSPACE cp -Rf $WORKSPACE ${WORKSPACE}_`date +"%Y-%m-%d"` echo "Done!" exit shift ;; -s|--status) sniper_status exit shift ;; -u|--update) UPDATE="1" update exit shift # past argument ;; *) # unknown option POSITIONAL+=("$1") # save it in an array for later echo "Unknown scan option $POSITIONAL...refer to the help menu for usage details." exit shift # past argument ;; esac done set -- "${POSITIONAL[@]}" # restore positional parameters if [[ ! -z "$TARGET" ]] && [[ -z "$WORKSPACE" ]]; then WORKSPACE=$(echo "$TARGET") fi if [[ -z "$TARGET" ]] && [[ -z "$WORKSPACE" ]]; then logo echo "You need to specify a target or workspace to use. Type sniper --help for command usage." exit fi cd $INSTALL_DIR function init { if [[ ! -z $WORKSPACE_DIR ]]; then LOOT_DIR=$WORKSPACE_DIR fi echo -e "$OKBLUE[*]$RESET Saving loot to $LOOT_DIR $OKBLUE[$RESET${OKGREEN}OK${RESET}$OKBLUE]$RESET" mkdir -p $LOOT_DIR 2> /dev/nul mkdir $LOOT_DIR/domains 2> /dev/null mkdir $LOOT_DIR/ips 2> /dev/null mkdir $LOOT_DIR/screenshots 2> /dev/null mkdir $LOOT_DIR/nmap 2> /dev/null mkdir $LOOT_DIR/reports 2> /dev/null mkdir $LOOT_DIR/output 2> /dev/null mkdir $LOOT_DIR/osint 2> /dev/null mkdir $LOOT_DIR/credentials 2> /dev/null mkdir $LOOT_DIR/web 2> /dev/null mkdir $LOOT_DIR/vulnerabilities 2> /dev/null mkdir $LOOT_DIR/notes 2> /dev/null mkdir -p $LOOT_DIR/scans/scheduled/ 2> /dev/null touch $LOOT_DIR/scans/scheduled/daily.sh 2> /dev/null touch $LOOT_DIR/scans/scheduled/weekly.sh 2> /dev/null touch $LOOT_DIR/scans/scheduled/monthly.sh 2> /dev/null touch $LOOT_DIR/scans/notifications.txt 2> /dev/null touch $LOOT_DIR/scans/notifications_new.txt 2> /dev/null chmod 777 -Rf $INSTALL_DIR 2> /dev/null chown root $INSTALL_DIR/sniper 2> /dev/null chmod 4777 $INSTALL_DIR/sniper 2> /dev/null TARGET="$(echo $TARGET | sed 's/https:\/\///g' | sed 's/http:\/\///g')" rm -f /tmp/out_of_scope 2> /dev/null for key in "${OUT_OF_SCOPE[@]}"; do echo $TARGET | egrep ${key} >> /tmp/out_of_scope 2> /dev/null; done; OUT_OF_SCOPE_NUM=$(wc -l /tmp/out_of_scope 2> /dev/null | awk '{print $1}' 2> /dev/null) if [[ $OUT_OF_SCOPE_NUM > 0 ]]; then echo -e "$OKBLUE[$RESET${OKRED}i${RESET}$OKBLUE] $TARGET is out of scope. Skipping! $RESET" exit else echo -e "$OKBLUE[*]$RESET Scanning $TARGET $OKBLUE[$RESET${OKGREEN}OK${RESET}$OKBLUE]$RESET" echo "$TARGET" >> $LOOT_DIR/domains/targets.txt 2> /dev/null fi service postgresql start 2> /dev/null > /dev/null msfdb start 2> /dev/null > /dev/null chown root /run/user/1000/gdm/Xauthority 2> /dev/null LAST_USER=$(last | head -n 1 | awk '{print $1}') sudo cp -a /home/$LAST_USER/.Xauthority /root/.Xauthority 2> /dev/null sudo cp -a /root/.Xauthority /root/.Xauthority.bak 2> /dev/null sudo cp -a /home/$USER/.Xauthority /root/.Xauthority 2> /dev/null sudo cp -a /home/kali/.Xauthority /root/.Xauthority 2> /dev/null sudo chown root: /root/.Xauthority 2> /dev/null XAUTHORITY=/root/.Xauthority UPDATED_TARGETS=$LOOT_DIR/scans/updated.txt if [[ "$AUTO_BRUTE" == "1" ]]; then echo "$TARGET AUTO_BRUTE `date +"%Y-%m-%d %H:%M"`" 2> /dev/null >> $LOOT_DIR/scans/tasks.txt touch $LOOT_DIR/scans/$TARGET-AUTO_BRUTE.txt 2> /dev/null fi if [[ "$FULLNMAPSCAN" == "1" ]]; then echo "$TARGET fullnmapscan `date +"%Y-%m-%d %H:%M"`" 2> /dev/null >> $LOOT_DIR/scans/tasks.txt touch $LOOT_DIR/scans/$TARGET-fullnmapscan.txt 2> /dev/null fi if [[ "$OSINT" == "1" ]]; then echo "$TARGET osint `date +"%Y-%m-%d %H:%M"`" 2> /dev/null >> $LOOT_DIR/scans/tasks.txt touch $LOOT_DIR/scans/$TARGET-osint.txt 2> /dev/null fi if [[ "$RECON" == "1" ]]; then echo "$TARGET recon `date +"%Y-%m-%d %H:%M"`" 2> /dev/null >> $LOOT_DIR/scans/tasks.txt touch $LOOT_DIR/scans/$TARGET-recon.txt 2> /dev/null fi } function loot { if [[ ! $LOOT == "0" ]]; then 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 "" if [[ ! -z $WORKSPACE_DIR ]]; then LOOT_DIR=$WORKSPACE_DIR fi rm -f $INSTALL_DIR/stash.sqlite 2> /dev/null rm -f $INSTALL_DIR/hydra.restore 2> /dev/null rm -f /tmp/update-check.txt 2> /dev/null ls -lh $LOOT_DIR/scans/running_*.txt 2> /dev/null | wc -l 2> /dev/null > $LOOT_DIR/scans/tasks-running.txt 2> /dev/null echo -e "$OKBLUE[*]$RESET Opening loot directory $LOOT_DIR $OKBLUE[$RESET${OKGREEN}OK${RESET}$OKBLUE]$RESET" cd $LOOT_DIR if [[ "$METASPLOIT_IMPORT" == "1" ]]; then echo -e "$OKORANGE + -- --=[ Starting Metasploit service...$RESET" /etc/init.d/metasploit start 2> /dev/null > /dev/null msfdb start echo -e "$OKORANGE + -- --=[ Importing NMap XML files into Metasploit...$RESET" msfconsole -x "workspace -a $WORKSPACE; workspace $WORKSPACE; db_import $LOOT_DIR/nmap/nmap*.xml; hosts; services; exit;" | tee $LOOT_DIR/notes/msf-$WORKSPACE.txt fi echo -e "$OKORANGE + -- --=[ Generating reports...$RESET" cd $LOOT_DIR/output 2> /dev/null echo -en "$OKGREEN[$OKBLUE" for a in `ls sniper-*.txt 2>/dev/null`; do echo "$a" 2> /dev/null | aha 2> /dev/null > $LOOT_DIR/reports/$a.html 2> /dev/null cat "$a" 2> /dev/null | aha 2> /dev/null >> $LOOT_DIR/reports/$a.html 2> /dev/null echo -n '|' done echo -en "$OKGREEN]$RESET" echo "" cd .. chmod 777 -Rf $LOOT_DIR echo -e "$OKORANGE + -- --=[ Sorting all files...$RESET" cat $LOOT_DIR/scans/notifications_new.txt 2> /dev/null >> $LOOT_DIR/scans/notifications.txt 2> /dev/null sort -u $LOOT_DIR/domains/*-full.txt 2> /dev/null > $LOOT_DIR/domains/domains-all-presorted.txt 2> /dev/null sed -E "s/^\.//g" $LOOT_DIR/domains/domains-all-presorted.txt 2> /dev/null | sed -E "s/^\*\.//g" | tr '[:upper:]' '[:lower:]' | sort -u > $LOOT_DIR/domains/domains-all-presorted2.txt 2> /dev/null sort -u $LOOT_DIR/domains/targets.txt 2> /dev/null > $LOOT_DIR/domains/targets-all-presorted.txt 2> /dev/null sed -E "s/^\.//g" $LOOT_DIR/domains/targets-all-presorted.txt 2> /dev/null | sed -E "s/^\*\.//g" | tr '[:upper:]' '[:lower:]' | sort -u > $LOOT_DIR/domains/targets-all-sorted.txt 2> /dev/null sort -u $LOOT_DIR/ips/ips-all-unsorted.txt 2> /dev/null > $LOOT_DIR/ips/ips-all-sorted.txt 2> /dev/null sed -i -E 's/address//g' $LOOT_DIR/ips/ips-all-sorted.txt 2> /dev/null sort -u $LOOT_DIR/domains/domains-all-presorted2.txt $LOOT_DIR/domains/targets-all-sorted.txt 2> /dev/null > $LOOT_DIR/domains/domains-all-sorted.txt 2> /dev/null diff $LOOT_DIR/domains/targets-all-sorted.txt $LOOT_DIR/domains/domains-all-sorted.txt 2> /dev/null | grep \> | awk '{print $2}' > $LOOT_DIR/domains/targets-all-unscanned.txt rm -f $LOOT_DIR/domains/targets-all-presorted.txt $LOOT_DIR/domains/targets-all-presorted2.txt 2> /dev/null rm -f $LOOT_DIR/domains/domains-all-presorted.txt $LOOT_DIR/domains/domains-all-presorted2.txt 2> /dev/null sort -u $LOOT_DIR/nmap/openports-unsorted.txt 2> /dev/null > $LOOT_DIR/nmap/openports-sorted.txt 2> /dev/null sort -u $LOOT_DIR/nmap/livehosts-unsorted.txt 2> /dev/null > $LOOT_DIR/nmap/livehosts-sorted.txt 2> /dev/null find $LOOT_DIR/web/ -type f -size -1c -exec rm -f {} \; cd $LOOT_DIR/web/ && rm -f webhosts-all-sorted-* 2> /dev/null cd $LOOT_DIR/domains/ && rm -f domains-all-sorted-* 2> /dev/null cd $LOOT_DIR/nmap/ && rm -f openports-all-sorted-* 2> /dev/null cd $LOOT_DIR/nmap/ && rm -f livehosts-all-sorted-* 2> /dev/null cd $LOOT_DIR/web/ 2> /dev/null egrep -Hi 'HTTP/1.' headers-* 2> /dev/null | cut -d':' -f1 | sed "s/headers\-http\(\|s\)\-//g" | sed "s/\.txt//g" | cut -d \- -f1 | sort -u 2> /dev/null > $LOOT_DIR/web/webhosts-sorted.txt 2> /dev/null split -d -l $MAX_HOSTS -e $LOOT_DIR/web/webhosts-sorted.txt webhosts-all-sorted- 2> /dev/null cd $LOOT_DIR/domains/ 2> /dev/null split -d -l $MAX_HOSTS -e $LOOT_DIR/domains/domains-all-sorted.txt domains-all-sorted- 2> /dev/null cd $LOOT_DIR/nmap/ 2> /dev/null split -d -l $MAX_HOSTS -e $LOOT_DIR/nmap/openports-sorted.txt openports-all-sorted- 2> /dev/null split -d -l $MAX_HOSTS -e $LOOT_DIR/nmap/livehosts-sorted.txt livehosts-all-sorted- 2> /dev/null echo -e "$OKORANGE + -- --=[ Removing blank screenshots and files...$RESET" chmod 777 -Rf $LOOT_DIR 2> /dev/null cd $LOOT_DIR/screenshots/ find $LOOT_DIR/screenshots/ -type f -size -9000c -exec rm -f {} \; find $LOOT_DIR/nmap/ -type f -size -1c -exec rm -f {} \; find $LOOT_DIR/ips/ -type f -size -1c -exec rm -f {} \; find $LOOT_DIR/osint/ -type f -size -1c -exec rm -f {} \; find $LOOT_DIR/vulnerabilities/ -type f -size -1c -exec rm -f {} \; cd $LOOT_DIR if [[ -f $SNIPER_PRO ]]; then wc -l $LOOT_DIR/scans/notifications.txt 2> /dev/null | awk '{print $1}' > $LOOT_DIR/scans/notifications_total.txt 2> /dev/null wc -l $LOOT_DIR/scans/notifications_new.txt 2> /dev/null | awk '{print $1}' > $LOOT_DIR/scans/notifications_new_total.txt 2> /dev/null cat $LOOT_DIR/scans/tasks-running.txt 2> /dev/null > $LOOT_DIR/scans/tasks-running_total.txt 2> /dev/null wc -l $LOOT_DIR/scans/tasks.txt 2> /dev/null | awk '{print $1}' 2> /dev/null > $LOOT_DIR/scans/tasks_total.txt 2> /dev/null wc -l $LOOT_DIR/scans/scheduled/*.sh 2> /dev/null | awk '{print $1}' 2> /dev/null > $LOOT_DIR/scans/scheduled_tasks_total.txt 2> /dev/null grep "Host\ status" $LOOT_DIR/scans/notifications.txt 2> /dev/null | wc -l | awk '{print $1}' 2> /dev/null > $LOOT_DIR/scans/host_status_changes_total.txt 2> /dev/null grep "Port\ change" $LOOT_DIR/scans/notifications.txt 2> /dev/null | wc -l | awk '{print $1}' 2> /dev/null > $LOOT_DIR/scans/port_changes_total.txt 2> /dev/null wc -l $LOOT_DIR/domains/domains_new-*.txt 2> /dev/null | awk '{print $1}' 2> /dev/null > $LOOT_DIR/scans/domain_changes_total.txt 2> /dev/null cat $LOOT_DIR/web/dirsearch-new-*.txt $LOOT_DIR/web/spider-new-*.txt 2> /dev/null | wc -l | awk '{print $1}' 2> /dev/null > $LOOT_DIR/scans/url_changes_total.txt 2> /dev/null if [[ -f "$LOOT_DIR/notes/notepad.html" ]]; then echo -n "" 2>/dev/null else cp "$INSTALL_DIR/pro/notepad.html" "$LOOT_DIR/notes/notepad.html" 2>/dev/null PRE_NAME=$(echo $WORKSPACE | sed "s/\./-/g") sed -i "s/notepad/notepad-$PRE_NAME/g" "$LOOT_DIR/notes/notepad.html" 2> /dev/null fi if [[ "$SN1PER_AUTOLOAD" = "1" ]] && [[ ! -f "$INSTALL_DIR/pro/settings.php" ]]; then echo -e "$OKORANGE + -- --=[ Loading Sn1per Professional...$RESET" source $INSTALL_DIR/pro.sh sudo $LAST_USER -c $BROWSER $LOOT_DIR/sniper-report.html 2> /dev/null > /dev/null & else echo -e "$OKORANGE + -- --=[ Generating Sn1per Professional reports...$RESET" source $INSTALL_DIR/pro.sh fi else echo -e "$OKBLUE[$RESET${OKRED}i${RESET}$OKBLUE]$RESET ⚡ Upgrade to Sn1per Professional and unlock a world of powerful benefits! 🚀 $RESET" echo -e "$OKBLUE[$RESET${OKRED}i${RESET}$OKBLUE]$RESET $RESET" echo -e "$OKBLUE[$RESET${OKRED}i${RESET}$OKBLUE]$RESET 💡 Don't miss out on important updates by using the Community version. $RESET" echo -e "$OKBLUE[$RESET${OKRED}i${RESET}$OKBLUE]$RESET $RESET" echo -e "$OKBLUE[$RESET${OKRED}i${RESET}$OKBLUE]$RESET 🔝 The latest Professional version ( ${OKRED}10.8 ${RESET}) offers unparalleled features, including: $RESET" echo -e "$OKBLUE[$RESET${OKRED}i${RESET}$OKBLUE]$RESET $RESET" echo -e "$OKBLUE[$RESET${OKRED}i${RESET}$OKBLUE]$RESET 💻 Sleek Web UI $RESET" echo -e "$OKBLUE[$RESET${OKRED}i${RESET}$OKBLUE]$RESET 🛠️ Extensive add-ons $RESET" echo -e "$OKBLUE[$RESET${OKRED}i${RESET}$OKBLUE]$RESET 🔄 Seamless integrations $RESET" echo -e "$OKBLUE[$RESET${OKRED}i${RESET}$OKBLUE]$RESET $RESET" echo -e "$OKBLUE[$RESET${OKRED}i${RESET}$OKBLUE]$RESET 🤝 Experience priority support, continuous updates, and enhanced capabilities tailored for professionals like you. $RESET" echo -e "$OKBLUE[$RESET${OKRED}i${RESET}$OKBLUE]$RESET $RESET" echo -e "$OKBLUE[$RESET${OKRED}i${RESET}$OKBLUE]$RESET 💰 Maximize your investment and achieve exceptional results with Sn1per Professional. $RESET" echo -e "$OKBLUE[$RESET${OKRED}i${RESET}$OKBLUE]$RESET $RESET" echo -e "$OKBLUE[$RESET${OKRED}i${RESET}$OKBLUE]$RESET 🔍 Learn more about the differences between the versions at: ${OKBLUE}https://sn1persecurity.com/wordpress/sn1per-community-vs-professional-whats-the-difference/ $RESET" echo -e "$OKBLUE[$RESET${OKRED}i${RESET}$OKBLUE]$RESET $RESET" echo -e "$OKBLUE[$RESET${OKRED}i${RESET}$OKBLUE]$RESET 🛒 Purchase your Sn1per Professional license now at: ${OKBLUE}https://sn1persecurity.com/ $RESET" sudo $LAST_USER -c $BROWSER https://sn1persecurity.com 2> /dev/null > /dev/null & fi rm -f $UPDATED_TARGETS 2> /dev/null touch $UPDATED_TARGETS 2> /dev/null echo -e "$OKORANGE + -- --=[ Done!$RESET" fi } if [[ "$REIMPORT" = "1" ]]; then if [[ ! -z "$WORKSPACE_DIR" ]]; then LOOT="1" loot exit fi fi if [[ "$REIMPORT_ALL" = "1" ]]; then if [[ ! -z "$WORKSPACE_DIR" ]]; then touch $WORKSPACE_DIR/domains/targets.txt $WORKSPACE_DIR/domains/targets-all-sorted.txt $WORKSPACE_DIR/domains/domains-all-sorted.txt cat $WORKSPACE_DIR/domains/targets.txt $WORKSPACE_DIR/domains/targets-all-sorted.txt $WORKSPACE_DIR/domains/domains-all-sorted.txt | sort -u > $WORKSPACE_DIR/scans/updated.txt rm -f $WORKSPACE_DIR/nmap/openports-unsorted.txt 2> /dev/null rm -f $WORKSPACE_DIR/nmap/openports-sorted.txt 2> /dev/null rm -f $WORKSPACE_DIR/reports/host-table-report.csv 2> /dev/null LOOT="1" loot exit fi fi if [[ "$RELOAD" = "1" ]]; then if [[ ! -z "$WORKSPACE_DIR" ]]; then $BROWSER $WORKSPACE_DIR/sniper-report.html 2> /dev/null > /dev/null & exit fi fi if [[ ${TARGET:0:1} =~ $REGEX ]]; then SCAN_TYPE="IP" else SCAN_TYPE="DOMAIN" fi # INITILIZE init if [[ ! -f /tmp/update-check.txt ]]; then # CHECK CONNECTION STATUS check_online fi if [[ ! -f /tmp/update-check.txt ]]; then # CHECK FOR UPDATES check_update fi # CHECK FOR BLACKARCH LINUX if grep -q BlackArch /etc/issue; then DISTRO='blackarch' echo "Detected BlackArch GNU/Linux" INSTALL_DIR=$(pwd) echo "Setting current path to $INSTALL_DIR" fi source modes/discover.sh source modes/flyover.sh source modes/vulnscan.sh source modes/fullportonly.sh source modes/web.sh source modes/webporthttp.sh source modes/webporthttps.sh source modes/webscan.sh source modes/massweb.sh source modes/masswebscan.sh source modes/massvulnscan.sh source modes/massportscan.sh source modes/stealth.sh source modes/airstrike.sh source modes/nuke.sh source modes/normal.sh rm -f /tmp/update-check.txt 2> /dev/null exit 0