403Webshell
Server IP : 146.190.157.162  /  Your IP : 216.73.217.6
Web Server : Apache
System : Linux ubuntu-s-2vcpu-4gb-amd-sfo3-01-KIT-DIGITAL 6.5.0-44-generic #44-Ubuntu SMP PREEMPT_DYNAMIC Fri Jun 7 15:10:09 UTC 2024 x86_64
User : businessweek ( 639)
PHP Version : 8.2.10-2ubuntu2.2
Disable Function : exec,passthru,shell_exec,system,proc_open,popen,pcntl_exec,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_signal,pcntl_signal_dispatch,pcntl_getpriority,pcntl_setpriority,dl,putenv,parse_ini_file,show_source
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : OFF
Directory :  /var/www/html/wordpress-manager-v2/scripts/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/html/wordpress-manager-v2/scripts/permissionsDisable.sh
#!/bin/bash

LOG_FILE="/var/www/html/wordpress-manager-v2/logs/permissions_debug.log"
mkdir -p "$(dirname "$LOG_FILE")"
exec > >(tee -a ${LOG_FILE}) 2>&1

echo "--- Ejecución: $(date) ---"
echo "Script: $0 | Proyecto: $1"

PROJECT="$1"
SITE_BASE="/var/www/html"
SITE="$SITE_BASE/$PROJECT"
USER_OWNER="$PROJECT"
BAD_PLUGINS_REGEX="asazysac|javax-|u-short|urshort"

if [ -z "$PROJECT" ]; then
    echo "Error: Debes especificar el nombre del proyecto/usuario. Uso: $0 nombre_proyecto"
    exit 1
fi

if [ ! -d "$SITE" ]; then
    echo "Error: El directorio $SITE no existe."
    exit 1
fi

# ── 1. Quitar toda inmutabilidad previa ───────────────────────────────────────
chattr -R -i "$SITE" 2>/dev/null

# ── 2. Limpieza de plugins maliciosos conocidos ───────────────────────────────
find "$SITE/wp-content/plugins" -maxdepth 1 \
    -regextype posix-extended \
    -regex ".*($BAD_PLUGINS_REGEX).*" \
    -exec rm -rf {} + 2>/dev/null

# ── 3. Dueño y permisos base ──────────────────────────────────────────────────
chown -R "$USER_OWNER":"$USER_OWNER" "$SITE"
find "$SITE" -type d -exec chmod 755 {} \;
find "$SITE" -type f -exec chmod 644 {} \;

# ── 4. Carpetas escribibles para acciones del admin ───────────────────────────
for WRITABLE_DIR in \
    "wp-content/plugins" \
    "wp-content/themes" \
    "wp-content/upgrade" \
    "wp-content/uploads" \
    "wp-content/cache" \
    "wp-content/et-cache"; do
    mkdir -p "$SITE/$WRITABLE_DIR"
    chown -R "$USER_OWNER":"$USER_OWNER" "$SITE/$WRITABLE_DIR"
    chmod -R 755 "$SITE/$WRITABLE_DIR"
done

# uploads: grupo www-data para que Apache sirva los archivos subidos
chgrp -R www-data "$SITE/wp-content/uploads"
chmod -R 775 "$SITE/wp-content/uploads"

# ── 5. Protección de uploads contra ejecución de PHP ─────────────────────────
echo -e "<Files *.php>\n    deny from all\n</Files>" > "$SITE/wp-content/uploads/.htaccess"
chown "$USER_OWNER":www-data "$SITE/wp-content/uploads/.htaccess"
chmod 644 "$SITE/wp-content/uploads/.htaccess"
chattr +i "$SITE/wp-content/uploads/.htaccess"

# Protección de wp-content raíz
echo -e "<Files *.php>\n    deny from all\n</Files>" > "$SITE/wp-content/.htaccess"
chown "$USER_OWNER":"$USER_OWNER" "$SITE/wp-content/.htaccess"
chmod 644 "$SITE/wp-content/.htaccess"
chattr +i "$SITE/wp-content/.htaccess"

# ── 6. Sellar archivos críticos de la raíz ────────────────────────────────────
# Estos archivos nunca deberían cambiar en producción y son el principal
# vector de inyección del malware que hemos visto
echo '<?php define("WP_USE_THEMES", true); require __DIR__ . "/wp-blog-header.php";' > "$SITE/index.php"
chown "$USER_OWNER":"$USER_OWNER" "$SITE/index.php"
chmod 644 "$SITE/index.php"
chattr +i "$SITE/index.php"

# .htaccess raíz — solo si está limpio (sin ushort)
if [ -f "$SITE/.htaccess" ] && ! grep -q "ushort" "$SITE/.htaccess"; then
    chattr +i "$SITE/.htaccess"
fi

# wp-config.php
if [ -f "$SITE/wp-config.php" ]; then
    chattr +i "$SITE/wp-config.php"
fi

# Archivos PHP de la raíz (wp-login, wp-cron, etc.)
find "$SITE" -maxdepth 1 -name "*.php" ! -name "index.php" -exec chattr +i {} \;

# ── 7. wp-admin y wp-includes: permisos, NO chattr ───────────────────────────
# chattr +i en wp-admin causaba 403 en update.php y plugin-install.php
# porque WordPress necesita contexto de escritura durante instalaciones.
# La protección correcta es: dueño = usuario del sitio (no www-data),
# permisos 644/755 estándar. Esto bloquea modificaciones desde otros
# usuarios del sistema sin romper la funcionalidad del admin.
chown -R "$USER_OWNER":"$USER_OWNER" "$SITE/wp-admin"
find "$SITE/wp-admin" -type f -exec chmod 644 {} \;
find "$SITE/wp-admin" -type d -exec chmod 755 {} \;

chown -R "$USER_OWNER":"$USER_OWNER" "$SITE/wp-includes"
find "$SITE/wp-includes" -type f -exec chmod 644 {} \;
find "$SITE/wp-includes" -type d -exec chmod 755 {} \;

echo ""
echo "Proceso de cierre de alta seguridad completado para $PROJECT ($SITE)"
echo ""
echo "Resumen de protecciones aplicadas:"
echo "  ✓ plugins/, themes/, upgrade/, uploads/, cache/  → escribibles por $USER_OWNER"
echo "  ✓ uploads/                                        → grupo www-data para Apache"
echo "  ✓ uploads/.htaccess                               → inmutable, bloquea PHP"
echo "  ✓ wp-content/.htaccess                            → inmutable, bloquea PHP"
echo "  ✓ index.php, .htaccess raíz, wp-config.php        → inmutables"
echo "  ✓ archivos PHP raíz                               → inmutables"
echo "  ✓ wp-admin/, wp-includes/                         → dueño $USER_OWNER, 644/755"
echo "    (sin chattr: el admin WP puede instalar/actualizar sin 403)"

Youez - 2016 - github.com/yon3zu
LinuXploit