LittleDemon WebShell


Linux webm007.cluster106.gra.hosting.ovh.net 5.15.167-ovh-vps-grsec-zfs-classid #1 SMP Tue Sep 17 08:14:20 UTC 2024 x86_64
Path : /home/eglisebaa/
File Upload :
Command :
Current File : /home/eglisebaa/diagnostic-serveur.sh

#!/bin/bash
#
# Script de diagnostic WordPress complet
# À exécuter sur le serveur via SSH
#

set -e

# Couleurs pour l'affichage
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# Variables
REPORT_DIR="wp-diagnostic-$(date +%Y%m%d-%H%M%S)"
REPORT_FILE="$REPORT_DIR/diagnostic-report.txt"

echo "=========================================="
echo "🔍 DIAGNOSTIC WORDPRESS COMPLET"
echo "=========================================="
echo ""

# Créer le répertoire de rapport
mkdir -p "$REPORT_DIR"

# Fonction de logging
log() {
    echo -e "$1" | tee -a "$REPORT_FILE"
}

log_info() {
    log "${BLUE}ℹ️  INFO:${NC} $1"
}

log_warning() {
    log "${YELLOW}⚠️  AVERTISSEMENT:${NC} $1"
}

log_critical() {
    log "${RED}🔴 CRITIQUE:${NC} $1"
}

log_success() {
    log "${GREEN}✅ SUCCÈS:${NC} $1"
}

# Trouver le répertoire WordPress
if [ -f "wp-config.php" ]; then
    WP_ROOT="$(pwd)"
elif [ -f "../wp-config.php" ]; then
    WP_ROOT="$(cd .. && pwd)"
elif [ -f "public_html/wp-config.php" ]; then
    WP_ROOT="$(pwd)/public_html"
elif [ -f "www/wp-config.php" ]; then
    WP_ROOT="$(pwd)/www"
else
    log_critical "wp-config.php non trouvé. Veuillez exécuter ce script depuis le répertoire WordPress."
    exit 1
fi

log_info "Répertoire WordPress détecté: $WP_ROOT"
cd "$WP_ROOT"

echo "" >> "$REPORT_FILE"
log "=========================================="
log "DIAGNOSTIC WORDPRESS - $(date)"
log "Répertoire: $WP_ROOT"
log "=========================================="
log ""

# 1. Vérification des fichiers core WordPress
log_info "1. Vérification des fichiers WordPress core..."
log ""

# Vérifier wp-config.php
if [ -f "wp-config.php" ]; then
    log_success "wp-config.php trouvé"
    
    # Vérifier les permissions
    PERMS=$(stat -c "%a" wp-config.php)
    if [ "$PERMS" != "600" ] && [ "$PERMS" != "644" ]; then
        log_warning "Permissions wp-config.php: $PERMS (recommandé: 600)"
    fi
    
    # Chercher des modifications suspectes
    if grep -q "eval\|base64_decode\|shell_exec" wp-config.php 2>/dev/null; then
        log_critical "Code suspect détecté dans wp-config.php!"
    fi
else
    log_critical "wp-config.php non trouvé!"
fi

# Vérifier .htaccess
if [ -f ".htaccess" ]; then
    log_success ".htaccess trouvé"
    
    # Sauvegarder .htaccess
    cp .htaccess "$REPORT_DIR/htaccess-backup.txt"
    
    # Vérifier les redirections suspectes
    if grep -qi "redirect.*http" .htaccess 2>/dev/null; then
        log_warning "Redirections détectées dans .htaccess"
        grep -i "redirect" .htaccess >> "$REPORT_DIR/htaccess-redirects.txt" 2>/dev/null || true
    fi
    
    # Vérifier le code PHP dans .htaccess (suspect)
    if grep -q "<?php\|<script" .htaccess 2>/dev/null; then
        log_critical "Code suspect dans .htaccess!"
    fi
else
    log_warning ".htaccess non trouvé (peut être normal)"
fi

# Vérifier index.php
if [ -f "index.php" ]; then
    log_success "index.php trouvé"
    
    # Vérifier les modifications
    if grep -q "eval\|base64_decode" index.php 2>/dev/null; then
        log_critical "Code suspect dans index.php!"
    fi
fi

log ""

# 2. Scanner les fichiers suspects
log_info "2. Scan des fichiers suspects..."
log ""

SUSPICIOUS_FILES="$REPORT_DIR/suspicious-files.txt"
touch "$SUSPICIOUS_FILES"

# Chercher des fichiers PHP suspects
find wp-content -type f -name "*.php" -exec grep -l "eval\|base64_decode\|shell_exec\|exec\|system\|passthru" {} \; 2>/dev/null | head -20 >> "$SUSPICIOUS_FILES" || true

# Chercher des fichiers avec des noms suspects
find . -type f \( -name "*shell*" -o -name "*hack*" -o -name "*backdoor*" -o -name "*c99*" -o -name "*r57*" \) 2>/dev/null >> "$SUSPICIOUS_FILES" || true

# Chercher des fichiers récemment modifiés (derniers 7 jours)
RECENT_FILES="$REPORT_DIR/recent-files.txt"
find wp-content -type f -mtime -7 -ls 2>/dev/null | head -50 > "$RECENT_FILES" || true

if [ -s "$SUSPICIOUS_FILES" ]; then
    FILE_COUNT=$(wc -l < "$SUSPICIOUS_FILES")
    log_warning "$FILE_COUNT fichier(s) suspect(s) détecté(s) - voir $SUSPICIOUS_FILES"
else
    log_success "Aucun fichier suspect évident détecté"
fi

log ""

# 3. Analyse de la base de données
log_info "3. Analyse de la base de données..."
log ""

# Extraire les informations de connexion depuis wp-config.php
if [ -f "wp-config.php" ]; then
    DB_NAME=$(grep "DB_NAME" wp-config.php | grep -oP "define\s*\(\s*'DB_NAME'\s*,\s*'\K[^']+")
    DB_USER=$(grep "DB_USER" wp-config.php | grep -oP "define\s*\(\s*'DB_USER'\s*,\s*'\K[^']+")
    DB_PASS=$(grep "DB_PASSWORD" wp-config.php | grep -oP "define\s*\(\s*'DB_PASSWORD'\s*,\s*'\K[^']+")
    DB_HOST=$(grep "DB_HOST" wp-config.php | grep -oP "define\s*\(\s*'DB_HOST'\s*,\s*'\K[^']+")
    
    if [ -n "$DB_NAME" ] && [ -n "$DB_USER" ]; then
        log_success "Informations de connexion DB extraites"
        
        # Créer un script SQL de diagnostic
        SQL_REPORT="$REPORT_DIR/database-report.sql"
        
        cat > "$SQL_REPORT" << EOF
-- Rapport de diagnostic WordPress
-- Date: $(date)

-- 1. Options WordPress critiques
SELECT option_name, option_value 
FROM ${DB_NAME}.wp_options 
WHERE option_name IN ('siteurl', 'home', 'permalink_structure', 'active_plugins')
ORDER BY option_name;

-- 2. Utilisateurs administrateurs
SELECT user_login, user_email, user_registered, display_name
FROM ${DB_NAME}.wp_users u
INNER JOIN ${DB_NAME}.wp_usermeta um ON u.ID = um.user_id
WHERE um.meta_key = 'wp_capabilities' 
AND um.meta_value LIKE '%administrator%'
ORDER BY user_registered DESC;

-- 3. Plugins actifs
SELECT option_value 
FROM ${DB_NAME}.wp_options 
WHERE option_name = 'active_plugins';

-- 4. Options CPT UI (si présent)
SELECT option_name, option_value 
FROM ${DB_NAME}.wp_options 
WHERE option_name LIKE '%cptui%' 
LIMIT 20;

-- 5. Posts récemment modifiés
SELECT ID, post_title, post_date, post_modified, post_status
FROM ${DB_NAME}.wp_posts
WHERE post_modified > DATE_SUB(NOW(), INTERVAL 30 DAY)
ORDER BY post_modified DESC
LIMIT 20;

-- 6. Redirections suspectes dans les options
SELECT option_name, option_value 
FROM ${DB_NAME}.wp_options 
WHERE option_value LIKE '%http://%' 
OR option_value LIKE '%https://%'
LIMIT 50;
EOF
        
        log_info "Script SQL de diagnostic créé: $SQL_REPORT"
        log_info "Pour exécuter: mysql -u $DB_USER -p$DB_PASS $DB_NAME < $SQL_REPORT"
        
    else
        log_warning "Impossible d'extraire les informations de connexion DB"
    fi
else
    log_warning "wp-config.php non trouvé pour l'analyse DB"
fi

log ""

# 4. Analyse des plugins
log_info "4. Analyse des plugins..."
log ""

PLUGINS_DIR="wp-content/plugins"
if [ -d "$PLUGINS_DIR" ]; then
    PLUGIN_COUNT=$(find "$PLUGINS_DIR" -maxdepth 1 -type d | wc -l)
    log_info "Nombre de plugins: $((PLUGIN_COUNT - 1))"
    
    PLUGINS_REPORT="$REPORT_DIR/plugins-list.txt"
    ls -lah "$PLUGINS_DIR" > "$PLUGINS_REPORT"
    
    # Chercher des plugins suspects
    SUSPICIOUS_PLUGINS=$(find "$PLUGINS_DIR" -type f -name "*.php" -exec grep -l "eval\|base64_decode\|shell_exec" {} \; 2>/dev/null | head -10)
    
    if [ -n "$SUSPICIOUS_PLUGINS" ]; then
        log_warning "Plugins avec code suspect détectés"
        echo "$SUSPICIOUS_PLUGINS" >> "$REPORT_DIR/suspicious-plugins.txt"
    fi
    
    # Vérifier Custom Post Type UI
    if [ -d "$PLUGINS_DIR/custom-post-type-ui" ]; then
        log_success "Custom Post Type UI trouvé"
    else
        log_warning "Custom Post Type UI non trouvé"
    fi
else
    log_critical "Répertoire plugins non trouvé!"
fi

log ""

# 5. Analyse des thèmes
log_info "5. Analyse des thèmes..."
log ""

THEMES_DIR="wp-content/themes"
if [ -d "$THEMES_DIR" ]; then
    THEME_COUNT=$(find "$THEMES_DIR" -maxdepth 1 -type d | wc -l)
    log_info "Nombre de thèmes: $((THEME_COUNT - 1))"
    
    # Chercher du code suspect dans les thèmes
    THEME_SUSPICIOUS=$(find "$THEMES_DIR" -type f -name "*.php" -exec grep -l "eval\|base64_decode" {} \; 2>/dev/null | head -10)
    
    if [ -n "$THEME_SUSPICIOUS" ]; then
        log_warning "Thèmes avec code suspect détectés"
        echo "$THEME_SUSPICIOUS" >> "$REPORT_DIR/suspicious-themes.txt"
    fi
fi

log ""

# 6. Vérification des permissions
log_info "6. Vérification des permissions..."
log ""

# Vérifier les permissions de wp-config.php
if [ -f "wp-config.php" ]; then
    PERMS=$(stat -c "%a" wp-config.php)
    if [ "$PERMS" = "600" ] || [ "$PERMS" = "644" ]; then
        log_success "Permissions wp-config.php: $PERMS"
    else
        log_warning "Permissions wp-config.php: $PERMS (recommandé: 600)"
    fi
fi

# Vérifier les permissions des répertoires
DIRS_PERMS="$REPORT_DIR/directories-permissions.txt"
find . -type d -exec stat -c "%a %n" {} \; 2>/dev/null | grep -E "777|775" | head -20 > "$DIRS_PERMS" || true

if [ -s "$DIRS_PERMS" ]; then
    log_warning "Répertoires avec permissions trop ouvertes détectés"
fi

log ""

# 7. Résumé
log "=========================================="
log "RÉSUMÉ DU DIAGNOSTIC"
log "=========================================="
log ""
log "Rapport complet sauvegardé dans: $REPORT_DIR"
log ""
log "Fichiers générés:"
log "  - $REPORT_FILE (rapport principal)"
log "  - $SUSPICIOUS_FILES (fichiers suspects)"
log "  - $SQL_REPORT (requêtes SQL de diagnostic)"
log "  - $RECENT_FILES (fichiers récemment modifiés)"
log ""
log "Prochaines étapes:"
log "  1. Examiner les fichiers suspects"
log "  2. Exécuter les requêtes SQL pour analyser la DB"
log "  3. Vérifier les plugins et thèmes suspects"
log "  4. Corriger les problèmes identifiés"
log ""

LittleDemon - FACEBOOK
[ KELUAR ]