Bonjour
En complément un script (brut de décoffrage) qui permet de faire un certain nettoyage à lancer en bash sur le serveurs concernés.
Le script cherche les spip.php verolés, stock les repértoires concernés, supprime une liste de répertoires et des fichiers
Ensuite il repasse sur la liste des répertoires vérolés pour voir si tout est nettoyé et autrement indique les fichiers à vérifier.
Par défaut il est en dry-run c’est à dire que sera listé les actions à lancer. Ensuite on copie/colle ou bien on modifie la variable dry_run pour 0
C’est maintenant sur spip-contrib-outils/spip_cleaner: Clean spip instance after some hack - spip_cleaner - SPIP on GIT
Je mets à jour à date le script mais mieux vaut se reporter au dépôt git
#!/bin/bash
##
# Version 0.5
# argument pour le path de départ
# chercher tous les spip (exlusion de chemin faux positif comme plugins-dist/ et ecrire/auth/
# considérer les sites vérolés sur un grep dans les path spip identifiés
# Version 0.4
# Version 0.3
# Ajout ecran de securité
# Version 0.2
# ajout dry-run
# check cyclique avec liste des spip identifié automatiquement
# support coloration message
# Version 0.1
# Premier jet
##
dry_run=1
spip_list="$HOME/spip_veroles.lst"
www_dir="/var/www/"
if [[ -d "$1" ]]; then
www_dir="$1"
fi
if [[ $dry_run == 1 ]]; then
rm_cmd="echo rm -r"
else
rm_cmd="rm -fr"
fi
if [[ ! -f "$spip_list" ]];then
touch "$spip_list"
fi
function vprint() {
msg=$1
color=$2
# Reset
NC='\033[0m' # Text Reset
# Regular Colors
# shellcheck disable=SC2034
BLACK='\033[0;30m' # Black
# shellcheck disable=SC2034
RED='\033[0;31m' # Red
# shellcheck disable=SC2034
GREEN='\033[0;32m' # Green
# shellcheck disable=SC2034
YELLOW='\033[0;33m' # Yellow
# shellcheck disable=SC2034
BLUE='\033[0;34m' # Blue
# shellcheck disable=SC2034
PURPLE='\033[0;35m' # Purple
# shellcheck disable=SC2034
CYAN='\033[0;36m' # Cyan
# shellcheck disable=SC2034
WHITE='\033[0;37m' # White
printf "${!color}%s${NC}\n" "$msg"
}
function clean_spip() {
spip_dir=$1
vprint "$spip_dir" "RED"
$rm_cmd "$spip_dir/*.cache"
$rm_cmd "$spip_dir/tmp/*"
$rm_cmd "$spip_dir/local/*"
mkdir -p "$spip_dir/tmp"
wget https://git.spip.net/spip-contrib-outils/securite/raw/branch/master/ecran_securite.php -qO "$spip_dir/config/ecran_securite.php"
wget https://git.spip.net/spip/spip/raw/branch/master/spip.php -qO "$spip_dir/spip.php"
grep -lr "@eval(@base64_decode" "$spip_dir"
files_to_remove="
response.php
update.php
ecrire/local.php
ecrire/auto.php
local/config.php
local/define.php
lib/api.php
lib/api_response.php
lib/langs.php
plugins/auto/saisies/saisies.php
plugins/auto/saisies/saisies_loader.php
"
for file in ${files_to_remove}; do
if [ -f "$spip_dir/$file" ]; then
$rm_cmd "$spip_dir/$file"
fi
done;
}
function search_spip() {
spip_all_path=()
www_dir="$1"
spip_files=$(find "$www_dir" -type d \( -path "*plugins-dist*" -o -path "*ecrire/auth*" \) -prune -o -iname spip.php -print)
for spip in $spip_files;do
spip_full_path=$(realpath "$spip")
spip_dir=$(dirname "$spip_full_path")
spip_all_path+=("$spip_dir")
done
echo "${spip_all_path[@]}"
}
spip_founds=$(search_spip "$www_dir")
vprint "Search hacked SPIP" "BLUE"
for spip in $spip_founds; do
spip_hacked=$(grep -q 'spip_pass' "$spip/spip.php")
if [ "$spip_hacked" ];then
echo "$spip" >> "$spip_list"
clean_spip "$spip"
fi
done;
vprint "Check integrity on previous SPIP hacked" "BLUE"
for spip_dir in $(uniq "$spip_list"); do
clean_spip "$spip_dir"
done;
vprint "Manage all spip" "BLUE"
for spip in $spip_founds; do
clean_spip "$spip"
done;