Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Attaque Blog.ckforum - index.php acceuil + index.php admin
#3
[alertyellow][MEMO] [/alertyellow]

En codant ma nouvelle interface de monitoring de mon UPS (https://nut.ckforum.com)  en BASH avec json et récupération des retour de nut en remplacement UI en CGI
j'ai voulu sécuriser et ... 

Grace à chatGPT j'ai créer un script en BASH d'audit de site 
ce qui m'a permis de nettoyer le site et de m'apercevoir que les hackers 
ont modifié pas mal de fichier en ayant la capacité d'écrire sur le site via des techniques permettant, a cause de la mauvaise protection de la root du site entre autre, 
de coder et d'injecter des codes puis cachés dans certains fichiers (je pense que c'est peut grace à bot qui injecte différents bout de code pour laisser à quelque uns la chance de fonctionner ! )


Le script ci-dessous est bien pratique mais n'est pas magique il permet de comprendre les commandes qui sont nécessaires et se veut un peu didactique.

[titreyoyo]

Guide d’usage —[/titreyoyo]

[titreyoyo]site_audit_portable.sh[/titreyoyo]
Résumé rapide

est un script portable, read-only qui :
  • scanne un webroot pour des motifs suspects (eval, base64, exec, inclusions distantes, etc.),
  • génère un rapport lisible + une annexe contenant les lignes complètes trouvées,
  • exporte un CSV et un JSON récapitulatif,
  • fournit des commandes prêtes pour mettre en quarantaine, durcir les permissions et bloquer l’exécution PHP dans
    Code :
    uploads/
    .
Citation :Exécution recommandée : sur la machine backend (où sont stockés les fichiers).
Utilise
Code :
bash
(pas
Code :
zsh
[alertblue]1 — Installation (rapide)[/alertblue]

Copier le script sur la machine (par exemple /usr/local/bin ou /root).

# depuis ta machine locale (scp) ou en éditant sur le serveur
Code :
sudo tee /usr/local/bin/site_audit_portable.sh > /dev/null <<'EOF'
# (colle le contenu du script ici)
EOF

Code :
sudo chmod +x /usr/local/bin/site_audit_portable.sh

Vérifier la syntaxe (optionnel) :

Code :
bash -n /usr/local/bin/site_audit_portable.sh


Lancer (voir §2 pour les options).

[titreyoyo]2 — Options & variables d’environnement[/titreyoyo]
Options en ligne de commande

Citation :--report-dir DIR : dossier où seront écrits site_audit_*.txt, *_annex_suspects.txt, *_suspects.csv, *_suspects.json. (défaut : dossier du script)

--patterns-file FILE : fichier avec motifs custom (1 motif par ligne, # pour commentaire).

--preview-length N : longueur des extraits dans le rapport (défaut 200).

--strict : n’utiliser que les motifs très suspects (eval, base64, gzinflate, ...).


-h / --help : aide.

Variable d’environnement

PATTERNS='motif1|motif2|motif3' — si définie, remplace les motifs par défaut et est prioritaire sur --patterns-file.

[titreyoyo]3 — Exemples d’utilisation[/titreyoyo]
Exemple basique (interactif)
sudo /usr/local/bin/site_audit_portable.sh --report-dir /root/audits --preview-length 120


Le script te demandera :

comment le site est accessible (http/https/url/détection),

le webroot (ex: /var/www/monsite),

l’utilisateur web (ex: www-data),

type d’application (nextcloud/mybb/wordpress/autre),

répertoires à garder en écriture (ex: uploads cache).

Mode strict (juste les motifs très suspects)
Code :
sudo /usr/local/bin/site_audit_portable.sh --strict --report-dir /root/audits

Avec motifs custom via env
export PATTERNS='eval\(|base64_decode|file_get_contents\(.*http'
Code :
sudo /usr/local/bin/site_audit_portable.sh --report-dir /root/audits

Avec motifs depuis un fichier

/root/patterns.txt :

Code :
# strict suspects
eval\(
base64_decode
gzinflate

# réseau / inclusion distante
file_get_contents\(.*http
curl_exec

Puis :

Code :
sudo /usr/local/bin/site_audit_portable.sh --patterns-file /root/patterns.txt --report-dir /root/audits

[titreyoyo]4 — Lecture des résultats[/titreyoyo]

Le script génère 4 fichiers (par défaut dans --report-dir):

site_audit_YYYYMMDD-HHMMSS.txt — rapport principal (synthèse + commandes recommandées).
Ouvrir :

Code :
less /root/audits/site_audit_YYYYMMDD-HHMMSS.txt


site_audit_YYYYMMDD-HHMMSS_annex_suspects.txt — annexe contenant les lignes complètes trouvées (pliées à 120 cols).
Ouvrir :

Code :
less /root/audits/site_audit_YYYYMMDD-HHMMSS_annex_suspects.txt


site_audit_YYYYMMDD-HHMMSS_suspects.csv — fichier,nb_occurrences (pratique pour tableur/SIEM).
Ouvrir :

Code :
column -t -s, /root/audits/site_audit_*.csv | less -S


site_audit_YYYYMMDD-HHMMSS_suspects.json — JSON (utile pour ingestion SIEM).
Ouvrir :

Code :
cat /root/audits/site_audit_*.json | jq .

[titreyoyo]5 — Motifs (patterns) par défaut & stratégie[/titreyoyo]

Le script essaie plusieurs jeux de motifs dans l’ordre (sauf si tu fournis PATTERNS ou --patterns-file) :

STRICT — motifs très suspects : eval(, base64_decode, gzinflate, preg_replace /e, assert(

LOOSE — exécutables/inclusions : system(, exec(, shell_exec(, passthru(, ...

COMMON — inclusions distantes et appels réseau : file_get_contents(...http), curl_exec, ...

HEURISTIC — recherche de lignes très longues (≥ ~300 caractères) → signale des blobs obfusqués

Le script s’arrête pour l’aperçu principal sur le premier set qui renvoie des hits, mais enregistre tout dans l’annexe (tu auras les résultats de chaque set).

[titreyoyo]6 — Exemple concret (WordPress / MyBB / Nextcloud)[/titreyoyo]
[alertred]WordPress (exemples de commandes)[/alertred]

Durcir tout le site (safe default) :

Code :
sudo chown -R root:www-data /var/www/wordpress
sudo find /var/www/wordpress -type d -exec chmod 0750 {} \;
sudo find /var/www/wordpress -type f -exec chmod 0644 {} \;


Laisser uploads en écriture :

Code :
sudo chown -R www-data:www-data /var/www/wordpress/wp-content/uploads
sudo chmod -R 0770 /var/www/wordpress/wp-content/uploads


wp-config.php figé :

Code :
sudo chown root:www-data /var/www/wordpress/wp-config.php
sudo chmod 0640 /var/www/wordpress/wp-config.php

[alertred]MyBB[/alertred]

inc/config.php doit parfois être modifiable pendant install :

Pendant l’install :

Code :
sudo chown www-data:www-data /var/www/mybb/inc/config.php
sudo chmod 0660 /var/www/mybb/inc/config.php


Après install :

Code :
sudo chown root:www-data /var/www/mybb/inc/config.php
sudo chmod 0640 /var/www/mybb/inc/config.php

[alertred]Nextcloud[/alertred]

config/config.php souvent figé :

Code :
sudo chown root:www-data /var/www/nextcloud/config/config.php
sudo chmod 0640 /var/www/nextcloud/config/config.php
# datadir hors webroot (sensé être accessible en lecture/écriture pour www-data)
sudo chown -R www-data:www-data /var/www/nextcloud/data
sudo chmod -R 0750 /var/www/nextcloud/data

[titreyoyo]7 — Automatisation (cron / systemd)[/titreyoyo]
Cron (exécution quotidienne)

Éditer root crontab (sudo crontab -e) et ajouter :

Code :
0 3 * * * /usr/local/bin/site_audit_portable.sh --report-dir /root/daily_audits --preview-length 120 >> /var/log/site_audit.log 2>&1

Systemd service + timer (si tu préfères systemd)

Citation :/etc/systemd/system/site-audit.service


Code :
[Unit]
Description=Site Audit Portable - run once

[Service]
Type=oneshot
ExecStart=/usr/local/bin/site_audit_portable.sh --report-dir /root/daily_audits --preview-length 120
User=root


/etc/systemd/system/site-audit.timer

[Unit]
Description=Run site audit daily

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target


Puis :

Code :
sudo systemctl daemon-reload
sudo systemctl enable --now site-audit.timer

[titreyoyo]8 — Quarantaine et investigation rapide[/titreyoyo]

Créer dossier quarantainne :

Code :
sudo mkdir -p /root/quarantine_site && sudo chmod 700 /root/quarantine_site


Copier fichiers suspects (depuis l’annexe CSV ou grep) :

Code :
sudo cp -a /var/www/site/path/suspect.php /root/quarantine_site/
sudo sha256sum /root/quarantine_site/suspect.php | tee /root/quarantine_site/suspect.php.sha256


Analyser la ligne dans l’annexe :

Code :
less /root/audits/site_audit_YYYYMMDD-HHMMSS_annex_suspects.txt

[titreyoyo]9 — Dépannage & notes courantes[/titreyoyo]

Erreur zsh: no matches found: --include=*.php → utiliser des guillemets autour des --include : --include="*.php" ou lancer sous bash.

set -u erreurs / variable non définie : lancer le script avec bash (le script gère set -euo pipefail).

Si vous ne voyez rien :

Vérifie que tu as les droits de lecture (sudo) sur le webroot.

Vérifie si les motifs par défaut sont actifs (--strict ou PATTERNS).

Vérifie les extensions incluses (*.php, *.inc, *.phtml, *.js, *.sh) ; les fichiers sans extension ne sont pas scannés par défaut.

Le script est read-only — il ne supprime rien. Toutes les commandes proposées sont à copier-coller manuellement.

10 — Patterns recommandés (fichier patterns_strict.txt)

Copie ceci dans /root/patterns_strict.txt si tu veux un jeu de motifs strict :

# Trés suspects (eval/obfuscation)
Code :
eval\(
base64_decode
gzinflate
preg_replace.*\/e
assert\(
create_function\(


Et patterns_loose.txt :

Code :
# Exécution / commandes
system\(
exec\(
shell_exec\(
passthru\(
popen\(
proc_open\(
# Inclusion/réseau
file_get_contents\(.*http
curl_exec
fopen\(.*http
include\(.*http

11 — Checklist rapide à appliquer après audit

Sauvegarde / quarantaine des fichiers suspects

Restaurer depuis backup si possible (meilleure option)

Modifier chown/chmod pour code / configs / uploads

Bloquer exécution PHP dans uploads (nginx / .htaccess)

Changer tous les mots de passe liés (admin, DB, FTP/SFTP, API keys)

Scanner le serveur (clamav / rkhunter)

Monitorer / planifier audits réguliers



.zip   site_audit_portable.sh.zip (Taille : 6.24 Ko / Téléchargements : 1)

Ce script ne fait rien sur les fichiers il donne des conseils et annexes les fichiers qu'il estime suspicieux en éxécutant des paternes type 
ce qui permet de voir des script php qui ont pu etre modifier et avec le code injecté en base 64 
attention il lit tout ce qu'il imagine a risque mais cela peut représenter des faux positifs ! 

   
Répondre


Messages dans ce sujet
RE: Attaque Blog.ckforum - index.php acceuil + index.php admin - par ckforum - 25-09-2025, 00:20

Sujets apparemment similaires…
Sujet Auteur Réponses Affichages Dernier message
  Admin site 403 Forbiden yoyo 4 30 10-09-2025, 10:29
Dernier message: yoyo

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)