diff --git a/legacy/wpchecker/README.md b/legacy/wpchecker/README.md new file mode 100644 index 0000000..bb2b9da --- /dev/null +++ b/legacy/wpchecker/README.md @@ -0,0 +1,99 @@ +# wpchecker + +Tool zum Schnellen prüfen mehrerer WordPress-Installationen +--- + +## Features + +- Prüfen der Coreversion +- Prüfen der Core Checksums +- Prüfen der Plugin Checksums +- Prüfen der Adminnutzer + +--- + +## Installation + +1. Repository klonen oder Skript kopieren: + ```bash + git clone git.int.loki-net.at/esn-support-bash-snippets.git + cd esn-support-bash-snippets/legacy/wpchecker + chmod +x wpchecker.sh + ``` + +2. Abhängigkeiten (falls vorhanden) installieren: + - [`wp-cli`](https://group-one.atlassian.net/wiki/spaces/EASYNAME/pages/33673314407/WP-CLI-Mastery) + +--- + +## Nutzung + +Skript kann im Prinzip von überall aus dem Usercontainer abgesetzt werden, da es über die $HOME-Variable direkt das html-Verzeichnis prüft. + +### Standardaufruf +```bash +./wpchecker.sh +``` + +### Beispiele +```bash +./wpchecker.sh +``` + +--- + +## Optionen + +``` +Usage: ./ [OPTIONS] + +--help Zeigt diese Hilfe +--option Beispieloption +YYYY-MM-DD Beispiel für Datumsargument +``` + +--- + +## Beispielausgabe + +```bash +bash wpchecker +WPChecker wird gestartet... + +Führe zu prüfenden Usernamen an: yun +yun +Führe Stammverzeichnis der zu prüfenden WordPress-Installationen an: html +html +Beginne Prüfung der WordPress-Installationen +++++++++++++++++++++ + +Prüfe html/pbtest/classicp ++++++++++++++++++ +6.2.9 +X Coresum-Fehler! +OK Kein eindeutiger Hinweis auf wp2shell! +OK Plugins okay! + +Prüfe html/apps/wordpress-134151 ++++++++++++++++++ +7.1 +OK Kein eindeutiger Hinweis auf wp2shell! +OK Plugins okay! +``` + +--- + +## Setup-Hinweise + +Falls notwendig, Alias in `~/.bashrc` des Kunden setzen: +```bash +alias wpchecker='~/bin/wpchecker.sh' +``` + +--- + +## Notes + +- WP-CLI muss unter /data/web/eUser/bin abgelegt und ausführbar sein +- ToDos + - non-interaktive Version bauen diff --git a/legacy/wpchecker/wpchecker.sh b/legacy/wpchecker/wpchecker.sh index 78f93cd..1b36539 100644 --- a/legacy/wpchecker/wpchecker.sh +++ b/legacy/wpchecker/wpchecker.sh @@ -1,19 +1,66 @@ #! /usr/bin/env bash # Tool zum Schnellen prüfen mehrerer WordPress-Installationen # Maintainer: peignerpausz +set -ou pipefail -printf "Bitte Namen der zu prüfenden Instanzen einsetzen" -read wordpresses -printf '🚀 WP-Checks für folgende Instanzen %s 🛠️ \n' "$wordpresses" -found_errors=0 -for a in $wordpresses; do - count=$(wp core verify-checksums --path="$wordpresses" | grep -v "Success" | wc -l) - count=$(wp plugin verify-checksums --all --path="$wordpresses" | grep -v "Success" | wc -l) - if [ "$count" -gt 0 ]; then - printf "❌ WordPress unter %s muss geprüft werden!\n" "$wordpresses" - found_errors=1 +RED="\033[31m" +GREEN="\033[32m" +YELLOW="\033[33m" +RESET="\033[0m" +declare -a wpuser +declare wppath +declare uploads + +printf "WPChecker wird gestartet...\n\n" +printf "Führe zu prüfenden Usernamen an: " +read -a wpuser +echo "${wpuser[@]}" +printf "Führe Stammverzeichnis der zu prüfenden WordPress-Installationen an: " +read wppath +echo "$wppath" +printf "Beginne Prüfung der WordPress-Installationen\n++++++++++++++++++++\n" +for wordpress in $(find $wppath -type f -name "wp-config.php" -exec dirname {} \;); do + [[ -d "$wordpress" ]] || continue + # Setzt Prüfung nur für alle Verzeichnisse mit einer vorhandenen wp-config.php fort. + # Wenn viele Verzeichnisse geprüft werden ist für die Übersichtlichkeit die Unterdrückung von Fehlern mittels 2>/dev/null empfehlenswert. + printf "\nPrüfe $wordpress\n+++++++++++++++++\n" + corev=$(php ~/bin/wp-cli.phar core version --path="$wordpress") + printf "${YELLOW}%s${RESET}\n" "$corev" + coresum=$(php ~/bin/wp-cli.phar core verify-checksums --path="$wordpress" 2>/dev/null) + if [[ $? > 0 ]]; then + printf "${RED}X${RESET} Coresum-Fehler!\n" + else + printf="${GREEN}OK${RESET} Coresum okay!\n" fi + userlist=$(php ~/bin/wp-cli.phar user list --role=administrator --path="$wordpress") + for a in "${wpuser[@]}"; do + if printf "%s" "$userlist" | grep -Fq -- $a; then + printf "${RED}X${RESET} Hinweis auf wp2hsell gefunden! Username: %s\n Rate zur Prüfung von wp-content/uploads auf .htaccess und php-Files.\n" "$a" + else + printf "${GREEN}OK${RESET} Kein eindeutiger Hinweis auf wp2shell!\n" + fi + done + plugincheck=$(php ~/bin/wp-cli.phar plugin verify-checksums --all --path="$wordpress" 2>/dev/null) + if [[ $? > 0 ]]; then + printf "${RED}X${RESET} Plugins prüfen!\n Rate zur Prüfung von wp-content/uploads auf .htaccess- und .php-Files\n" + else + printf "${GREEN}OK${RESET} Plugins okay!\n" + fi + for uploads in $(find $wppath -type d -wholename "wp-content/uploads" -exec dirname {} \;); do + [[ -d "$uploads" ]] || continue + printf "Prüfe Upload-Folder auf verdächtige .htaccess-Files\n" + htaccesschecker=$(find "$uploads" -type f -name ".htaccess") + if printf "%s" "$htaccesschecker" | grep "*.php"; then + printf "${RED}X${RESET} .htaccess im Uploadfolder gefunden: %s\n" "$htaccesschecker" + else + printf"${GREEN}OK${RESET} keine .htaccess im Uploadfolder gefunden!\n" + fi + printf "Prüfe Upload-Folder auf verdächtige php-Files\n" + phpchecker=$(find "$uploads" -type f -name "*.php" | wc -l) + if [[ "$phpchecker" > 0 ]]; then + printf "${RED}X${RESET} PHP-Files im Uploadfolder gefunden: %s\n" "$phpchecker" + else + printf "${GREEN}OK${RESET} keine PHP-Files im Uploadfolder gefunden!\n" + fi + done done -if [ "$found_errors" -eq 0 ]; then - printf "✅ All systems green.\n" -fi diff --git a/wpchecker.sh b/wpchecker.sh new file mode 100644 index 0000000..f53a210 --- /dev/null +++ b/wpchecker.sh @@ -0,0 +1,28 @@ +#! /usr/bin/env bash +# Tool zum Schnellen prüfen mehrerer WordPress-Installationen +# Maintainer: peignerpausz + +declare -a WORDPRESS=() +WORDPRESS="$(ls | grep wordpress)" +printf "Beginne Prüfung der Adminnutzer\n\n" +for wordpress in wordpress*/; do + [[ -d "$wordpress" ]] || continue + echo "Prüfe $wordpress" + userlist=$(php ~/bin/wp-cli.phar user list --role=administrator --path="$wordpress" 2>/dev/null) + if [[ -n "$userlist" ]]; then + printf "%s\n\n" "$userlist" + else + printf "Fehler bei %s\n\n" "$wordpress" + fi +done +for uneasy in $(find html/. -type f -name "wp-config.php" -exec dirname {} \;); do + [[ -f "$uneasy" ]] || continue + echo "Prüfe $uneasy" + userlist2=$(php ~/bin/wp-cli.phar user list --role=administrator --path="$uneasy") + echo $userlist2 + if [[ -n "$userlist2" ]]; then + printf "%s\n\n" "$userlist2" + else + printf "Fehler bei %s\n\n" "$uneasy" + fi +done