Skip to content

Latest commit

 

History

History
215 lines (163 loc) · 8.64 KB

File metadata and controls

215 lines (163 loc) · 8.64 KB

WpShellUploader — Documentación de Características

Descripción General

WpShellUploader es una aplicación de escritorio WPF (Windows Presentation Foundation) desarrollada en C# (.NET 6) diseñada para la subida automatizada de web shells a sitios WordPress. La herramienta primero valida las credenciales, luego intenta cargar un shell PHP utilizando 9 métodos diferentes de upload, y finalmente verifica que el shell esté accesible.


Arquitectura del Proyecto

El proyecto sigue el patrón de diseño MVVM (Model-View-ViewModel):

WpShellUploader/
├── Models/           → Modelos de datos (WpTarget)
├── Views/            → Interfaz gráfica XAML (MainWindow)
├── ViewModels/       → Lógica de la UI (MainViewModel, DynamicSemaphore)
├── Services/         → Servicios de negocio (ShellUploadService, AdaptiveThreadManager, FileService)
├── Converters/       → Conversores de valores para bindings XAML
├── Themes/           → Tema visual oscuro (DarkTheme.xaml)
├── Files/            → Archivos de payload (index.php, plugin.zip, theme.zip)
├── App.xaml          → Configuración global de la aplicación
└── WpShellUploader.csproj → Archivo de proyecto .NET 6

Características Principales

1. Nueve Métodos de Upload de Web Shell

La herramienta intenta subir el shell utilizando 9 métodos diferentes en orden de fiabilidad:

# Método Descripción
M1 Plugin Upload Sube un plugin ZIP malicioso vía /wp-admin/update.php?action=upload-plugin
M2 Theme Upload Sube un tema ZIP malicioso vía /wp-admin/update.php?action=upload-theme
M3 Theme Editor Inyecta código en el editor de temas (/wp-admin/theme-editor.php)
M4 Plugin Editor Inyecta código en el editor de plugins (/wp-admin/plugin-editor.php)
M5 Media REST Sube archivo vía la API REST de WordPress (/wp-json/wp/v2/media)
M6 File Manager Utiliza plugins de file manager si están instalados
M7 Ajax Upload Sube vía endpoint AJAX de WordPress (admin-ajax.php)
M8 XML-RPC Sube archivo vía el método XML-RPC wp.uploadFile
M9 Direct Write Intenta escribir directamente en el servidor

Cada método incluye verificación posterior para confirmar que el shell es accesible.

2. Sistema de Threading Adaptativo (AIMD)

El AdaptiveThreadManager utiliza una estrategia similar al control de congestión TCP:

  • AIMD (Additive Increase, Multiplicative Decrease):

    • Incremento aditivo: Aumenta hilos gradualmente cuando la red responde bien
    • Decremento multiplicativo: Reduce drásticamente cuando detecta problemas
  • Auto-detección inicial:

    • Analiza los cores de CPU del sistema
    • Para tareas I/O (HTTP), la concurrencia óptima es mucho mayor que los cores de CPU
    • Fórmula base: cores × 10 para mínimo, cores × 30 para máximo
  • Ajuste dinámico en tiempo real:

    • Monitoriza éxitos/fallos de red
    • Diferencia entre errores de login (no es error de red) y timeouts reales
    • Ajusta cada intervalo basándose en métricas de rendimiento
  • Modo manual: Se puede especificar un número fijo de hilos (0 = auto-detect)

3. DynamicSemaphore — Semáforo Redimensionable

Implementación personalizada de un semáforo que puede redimensionarse en tiempo de ejecución:

  • Incremento: Libera permisos adicionales inmediatamente
  • Decremento: Los permisos se consumen naturalmente cuando los workers terminan
  • Thread-safe: Protegido con lock para operaciones de resize

4. Validación de Credenciales vía XML-RPC

Antes de intentar el upload, valida las credenciales usando:

  • wp.getUsersBlogs — Verificación de login
  • wp.getProfile — Obtención de rol y capacidades
  • Detección de rol (Administrator, Editor, Author, etc.)

5. Verificación de Shell Post-Upload

Después de cada método de upload:

  1. Construye la URL esperada del shell
  2. Hace una petición GET al shell
  3. Busca un marcador específico en la respuesta
  4. Confirma que el shell está operativo

6. Soporte Multi-Formato de Entrada

Acepta credenciales en los mismos formatos que WpSiteChecker:

Formato Ejemplo
Hash (# + @) https://ejemplo.com#usuario@contraseña
Pipe (|) https://ejemplo.com|usuario|contraseña
Em-dash () https://ejemplo.com–usuario–contraseña
ULP/Colon (:) ejemplo.com/wp-login.php:usuario:contraseña

7. Archivos de Payload Incluidos

El proyecto incluye archivos de payload en la carpeta Files/:

Archivo Descripción
index.php Shell PHP ofuscado (payload principal)
plugin.zip Plugin WordPress empaquetado con el shell
theme.zip Tema WordPress empaquetado con el shell
plugin/ Directorio del plugin descomprimido
theme/ Directorio del tema descomprimido

8. Estadísticas Detalladas en Tiempo Real

La interfaz muestra:

  • Total de targets en el archivo
  • Procesados / Login OK / Shell OK
  • Login fallido / Upload fallido / Timeouts
  • Administradores / Editores / Autores
  • Hilos activos / Hilos óptimos
  • Tasa de éxito (% shells sobre procesados)
  • Tasa de login (% logins sobre procesados)
  • Velocidad (sitios/segundo)
  • Progreso (barra porcentual)
  • Tiempo transcurrido (formato HH:MM:SS)
  • Modo de hilos (Auto/Manual)

9. Exportación Organizada de Resultados

Los resultados se guardan en Results/Results_YYYY-MM-DD_HH-mm-ss/:

Archivo Contenido
login_ok.txt Logins exitosos
shells.txt URLs de shells subidos
shells_full.txt Shells con método y credenciales completas
login_failed.txt Logins fallidos con error
upload_failed.txt Login OK pero upload fallido
administrators.txt Cuentas de administrador
editors.txt Cuentas de editor
authors.txt Cuentas de autor
method_*.txt Resultados por método de upload
Successfully_logged_WordPress.txt Login exitoso formato hash

10. Funcionalidades de la Interfaz

  • Importar archivo — Seleccionar archivo de credenciales
  • Iniciar/Detener procesamiento
  • Copiar shells al portapapeles (todas las URLs de shells)
  • Abrir carpeta de resultados en el explorador
  • Filtrar por rol (All, Administrator, Editor, Author)
  • Auto Threads toggle — Activar/desactivar threading adaptativo
  • Configurar timeout (5-120 segundos)
  • Configurar hilos (0=auto hasta 500)
  • Log de actividad con timestamps (máximo 500 entradas, orden inverso)

11. Gestión Inteligente de Errores de Red

El sistema diferencia correctamente entre tipos de error:

Tipo de Error ¿Es error de red? Efecto en threading
Login incorrecto No — el servidor respondió No penaliza hilos
Timeout — el servidor no respondió Reduce hilos
Conexión rechazada — no se pudo conectar Reduce hilos
Host no encontrado — DNS falló Reduce hilos

12. Procesamiento Streaming

  • Lectura asíncrona del archivo línea por línea
  • No carga el archivo completo en memoria
  • Producer-consumer pattern con DynamicSemaphore

13. Seguridad y Robustez

  • SSL/TLS permisivo: Acepta certificados autofirmados
  • User-Agent rotativo: Emula navegadores reales
  • Nonce extraction: Extrae tokens de seguridad de WordPress para cada operación
  • Descompresión automática: GZip y Deflate
  • Manejo de redirecciones y cookies
  • Cancelación segura: Soporte completo de CancellationToken

Requisitos Técnicos

  • Framework: .NET 6 (Windows)
  • Tipo de aplicación: WPF (Windows Presentation Foundation)
  • Dependencias: System.Text.Json v8.0.5
  • Sistema operativo: Windows 10/11
  • Requisito: Carpeta Files/ con index.php (shell PHP)

Flujo de Trabajo

1. La aplicación carga el shell desde Files/index.php
2. Importar archivo de credenciales (.txt)
3. Configurar hilos (0=auto, 1-500) y timeout (5-120s)
4. Iniciar procesamiento:
   a. Inicializar AdaptiveThreadManager
   b. Para cada target (streaming):
      i.   Parsear credenciales (multi-formato)
      ii.  Validar login vía XML-RPC
      iii. Si login OK: detectar rol
      iv.  Intentar 9 métodos de upload en secuencia
      v.   Verificar shell accesible
      vi.  Guardar resultado organizado
   c. Ajustar hilos dinámicamente (AIMD)
5. Mostrar estadísticas en tiempo real
6. Al finalizar: resumen final con velocidad y tasas