356 lines
16 KiB
Markdown
356 lines
16 KiB
Markdown
# Reporte de Explotación Pase 3 (Agresivo) - Mafra Tijuana
|
|
**Objetivo:** https://mafratijuana.com
|
|
**IP Web:** 162.210.97.174
|
|
**IP Mail:** 198.23.53.115
|
|
**IP SQL Server:** 201.130.120.52
|
|
**Fecha:** 2026-03-25
|
|
**Fase:** Explotación agresiva — pase 3 (pentest autorizado)
|
|
**DB:** MySQL 5.7.27, base: ebyted_mafra, usuario: ebyted_mafra@%
|
|
**Host MySQL:** ph3mysql13.bastun.net
|
|
**Webroot:** /home/www/mafratijuana.com/
|
|
**ADOdb:** adodb-mysql.inc.php (librería legacy)
|
|
**Hosting:** ntchosting.com (Pure-FTPd, Plesk/Parallels)
|
|
|
|
---
|
|
|
|
## RESUMEN EJECUTIVO
|
|
|
|
El pase 3 agresivo profundizó en TODOS los vectores disponibles. Se logró:
|
|
- **Extracción de credenciales de 19 usuarios via panel admin** (contraseñas visibles en HTML)
|
|
- **3 tablas de pedidos nuevas** confirmadas (Pedido, PedidoDetalle, PedidoStatus)
|
|
- **3 vectores de upload de archivos** identificados (banner, foto noticias, adjuntos 30MB)
|
|
- **SQL directo en URL** (imprimirUsuarios.php acepta queries arbitrarias)
|
|
- **Llave de licencia** expuesta (clave.txt)
|
|
- **Logs .NET/SAT** con stack traces del sistema de facturación
|
|
- **Servidor de correo** identificado y parcialmente enumerado
|
|
|
|
**Hallazgos nuevos pase 3:** 18
|
|
- CRÍTICOS: 5
|
|
- ALTOS: 7
|
|
- MEDIOS: 4
|
|
- INFORMATIVOS: 2
|
|
|
|
**Total acumulado (pases 1+2+3):** 57 hallazgos
|
|
|
|
---
|
|
|
|
## EXPLOTACIONES CRÍTICAS NUEVAS (5)
|
|
|
|
### P3-C1 — Contraseñas visibles en HTML del panel admin
|
|
- **Endpoint:** `/adminm/catalogoUsuarios.php?accion=editar&id=<ID>`
|
|
- **Técnica:** Iterar IDs de usuarios conocidos
|
|
- **Resultado:** El campo `<input name='password' value="CONTRASEÑA">` muestra la contraseña real en texto plano en el HTML
|
|
- **Datos extraídos directamente del panel:**
|
|
|
|
| ID | Nombre Completo | Usuario | Password | Email | No. Cliente |
|
|
|----|----------------|---------|----------|-------|-------------|
|
|
| 1 | Administrador de sistema | admin | 1mafram | ventas@mafratijuana.com | 1 |
|
|
| 3 | AUTOPARTES BAJA, SA DE CV | capb | 6349 | armandoapbaja@yahoo.com | 6349 |
|
|
| 23 | Edgar | edgar | eajs1 | ebyted@yahoo.com | — |
|
|
| 25 | AUTOTRANSPORTES CALFIA DE TIJUANA, SA | catp | 6012 | rally_92_@hotmail.com | 6012 |
|
|
| 32 | CARLOS ALBERTO ALDAMA MARTINEZ | maamc | 6123 | karlosautopartes@hotmail.com | 6123 |
|
|
| 39 | CARLOS HUMBERTO ROSAS ALVAREZ | mroac | 6474 | carosas21@hotmail.com | 6474 |
|
|
| 42 | JORGE GOMEZ GARCIA | mgogj | 6357 | jorgegogamx@yahoo.com.mx | 6357 |
|
|
| 48 | JUAN CARLOS ORENDAIN VILLEGAS | moevj | 6284 | apadelnorte@hotmail.com | 6284 |
|
|
| 56 | MIGUEL ANGEL ROMERO ESTRADA | croem | 6329 | mskestrada@msn.com | 6329 |
|
|
| 60 | FRANCISCO BONILLAS TENORIO | mbotf | 6190 | fcobonillas_53@yahoo.com | 6190 |
|
|
| 80 | GRUPO L Y L SA DE CV | mgly | 6137 | grupolyl@hotmail.com | 6137 |
|
|
| 104 | JOSE MANUEL | cveqm | 6429 | ellocov@hotmail.com | 6429 |
|
|
| 106 | Jorge Morales Granados | vendedor1 | 500419 | jomgran@hotmail.com | 0 |
|
|
| 108 | RECTIFICADORA DE ENSENADA S DE RL DE CV | cren | 6273 | rectificadoradeensenada@hotmail.com | 6273 |
|
|
| 117 | BALVINA LUNA BARRIOS | mlubb | 6268 | facturasnapa@rtsautomotriz.com | 6268 |
|
|
| 118 | ANTONIO ALVAREZ ROA | smaara | 6907 | joredgmolray@hotmail.com | 6907 |
|
|
| 120 | ROBERTO BENITEZ RIOS | mberr | 6402 | betitosautoparts@hotmail.com | 6402 |
|
|
| 123 | MARCIALA ISABEL AVILA ESPINOZA | smaiem | 6450 | victorchacon187@hotmail.com | 6450 |
|
|
| 131 | MANUEL ESTRADA RODRIGUEZ | mearm | 6422 | cpilcasacv@yahoo.com.mx | 6422 |
|
|
|
|
- **Impacto:** Compromiso total de datos personales y comerciales. Nombres reales, emails, números de cliente, contraseñas — todo accesible con una sola petición HTTP por usuario.
|
|
- **NOTA:** Muchos son empresas B2B reales de la zona Tijuana/Ensenada.
|
|
|
|
### P3-C2 — SQL arbitrario vía imprimirUsuarios.php
|
|
- **URL:** `/adminm/imprimirUsuarios.php?sql=<QUERY>`
|
|
- **Descubrimiento:** El catálogo de usuarios incluye un link directo con SQL en la URL:
|
|
```
|
|
imprimirUsuarios.php?sql=select+ld_usuario.*,+ld_usuariotipo.Descripcion+from+ld_usuario,+ld_usuariotipo+where+ld_usuario.UsuarioTipoId+=+ld_usuariotipo.UsuarioTipoId
|
|
```
|
|
- **Limitación:** El endpoint depende de la conexión MySQL que está saturada (max_user_connections: 20), por lo que las queries adicionales fallan con "La base de datos no esta en linea"
|
|
- **Tabla descubierta:** `ld_usuariotipo` (tipos de usuario: Administrador, Usuario)
|
|
- **Impacto:** Cualquier query SQL puede ejecutarse directamente sin sanitización. Si la BD responde, se puede extraer TODA la información.
|
|
|
|
### P3-C3 — Tres vectores de upload de archivos sin validación aparente
|
|
- **Vector 1 — agregarBanner.php:**
|
|
- `<input type='file' name='banner'>` con `enctype='multipart/form-data'`
|
|
- Sube banners a `/imgBanner/` o `/imgBanner2/`
|
|
- Directory listing habilitado en ambos directorios
|
|
- **Vector 2 — catalogoNoticias.php:**
|
|
- `<input type='file' name='foto_tn'>` (thumbnail)
|
|
- `<input type='file' name='foto_chica'>` (imagen)
|
|
- Sube imágenes asociadas a noticias
|
|
- **Vector 3 — dlgAttach.php:**
|
|
- `MAX_FILE_SIZE: 31457280` (30MB!)
|
|
- `<input name="userfile" type="file" />`
|
|
- Sube archivos adjuntos a `/adminm/archivosnoticias/`
|
|
- **Este directorio ya tiene directory listing con 420 archivos**
|
|
- **Impacto:** Potencial upload de web shells PHP. Sin embargo, ionCube bloquea ejecución PHP no compilada. Si se desactiva ionCube o se encuentra un bypass, RCE inmediato.
|
|
|
|
### P3-C4 — Acceso completo al sistema de pedidos B2B
|
|
- **URLs:**
|
|
- `/adminm/pedidosListado.php` — Lista todos los pedidos
|
|
- `/adminm/pedidosListado.php?cmbStatus=1` — Pedidos pendientes
|
|
- `/adminm/pedidoDetalle.php?txtPedidoId=<ID>` — Detalle completo
|
|
- `/adminm/pedidosBuscar.php` — Búsqueda por cliente/fecha/status
|
|
- **Datos expuestos:**
|
|
- Pedidos desde 2004 (ID 206) hasta al menos ID 320
|
|
- 24+ pedidos pendientes (IDs 297-320)
|
|
- Nombres completos de empresas clientes
|
|
- Productos pedidos (ej: "INSULADOR DE BRAZAO DIRECCION")
|
|
- Fechas, estatus, totales
|
|
- **Tablas MySQL confirmadas:** Pedido, PedidoDetalle, PedidoStatus
|
|
- **Impacto:** Base de datos comercial B2B completa accesible
|
|
|
|
### P3-C5 — Path disclosure revela stack .NET/SAT y credenciales ADOdb
|
|
- **pedidosBuscar.php** muestra warning PHP:
|
|
```
|
|
Warning: mysql_pconnect() User 'ebyted_mafra' has exceeded 'max_user_connections'
|
|
resource (current value: 20) in /home/www/mafratijuana.com/adodb/drivers/adodb-mysql.inc.php on line 251
|
|
```
|
|
- **Información revelada:**
|
|
- ADOdb library en uso (versión legacy con vulnerabilidades conocidas)
|
|
- Ruta completa del webroot confirmada
|
|
- Límite de 20 conexiones MySQL concurrentes
|
|
- **shcv2.log** contiene stack traces de .NET (SHC_V20.FacturaElectronicaDatos) — sistema de facturación electrónica SAT
|
|
|
|
---
|
|
|
|
## EXPLOTACIONES ALTAS NUEVAS (7)
|
|
|
|
### P3-A1 — Llave de licencia expuesta
|
|
- **Archivo:** `/adminm/archivosnoticias/clave.txt`
|
|
- **Contenido:** `1EC5-C8B8-33CA-0C85-BFB3-5D43-22B1-AB6D`
|
|
- **Probablemente:** Licencia de ionCube, software comercial, o clave de activación
|
|
- **Impacto:** Posible uso de la licencia en otro servidor para activar software pirata
|
|
|
|
### P3-A2 — Servidor de correo separado identificado
|
|
- **Subdominios:** smtp.mafratijuana.com, imap.mafratijuana.com → 198.23.53.115
|
|
- **Puertos abiertos:** 110 (POP3), 143 (IMAP), 465 (SMTPS), 993 (IMAPS), 995 (POP3S)
|
|
- **Puerto 25 (SMTP):** Filtrado desde nuestra IP, pero probablemente abierto para otros
|
|
- **MX records:** mx1.ntchosting.com, mx2.ntchosting.com
|
|
- **Sin SPF, sin DKIM, sin DMARC** (verificado: no hay registros TXT)
|
|
- **Impacto:** Email spoofing trivial. Cualquiera puede enviar correos como @mafratijuana.com
|
|
|
|
### P3-A3 — 6 directorios con directory listing confirmados
|
|
| Directorio | Archivos | Contenido |
|
|
|-----------|----------|-----------|
|
|
| /adminm/archivosnoticias/ | ~420 | ZIPs, PDFs, Excel, SQL, web shells |
|
|
| /img/ | ~69 | Imágenes del sitio, assets de Plesk |
|
|
| /imgBanner/ | ~88 | Banners (01.jpg - 19.jpg+) |
|
|
| /imgBanner2/ | ~20 subdirs | Banners organizados por ID |
|
|
| /javascript/ | 6 | JS + 2 archivos PHP ejecutables |
|
|
| /css/ | 10 | Hojas de estilo |
|
|
|
|
### P3-A4 — Assets de Plesk/Parallels expuestos
|
|
- **Directorio:** `/img/common/` y `/img/glyph/`
|
|
- **Archivos:** parallels_logo.gif, parallels_powered.gif, pb_plesk.gif, top_bg.jpg
|
|
- **Impacto:** Confirma que el servidor usa Plesk como panel de control. Podría tener interfaces de administración accesibles.
|
|
|
|
### P3-A5 — Dreamweaver design notes expuestos
|
|
- **Directorio:** `/img/_notes/` — 24 archivos .mno
|
|
- **Archivos:** btEntrar.gif.mno, mafra_logo.gif.mno, etc.
|
|
- **Impacto:** Revelan que el sitio fue construido con Macromedia Dreamweaver. Los archivos .mno pueden contener rutas locales del desarrollador y metadatos del proyecto.
|
|
|
|
### P3-A6 — PHP ejecutable en directorio /javascript/
|
|
- **Archivos:** borraedita.php, borrar.php
|
|
- **borraedita.php** acepta parámetros `accion` e `id` — función de borrado/edición
|
|
- **Impacto:** PHP ejecutable fuera del directorio admin. Posible acceso directo sin autenticación.
|
|
|
|
### P3-A7 — FTP Pure-FTPd con información de configuración
|
|
- **Banner:** Pure-FTPd [privsep] [TLS]
|
|
- **Info revelada:** "You are user number 7 of 200 allowed" — confirma que hay otros usuarios FTP activos
|
|
- **Sin acceso anónimo** (correcto)
|
|
- **Credenciales web NO funcionan** para FTP (cuentas separadas)
|
|
- **Puerto 5666 (NRPE/Nagios):** Abierto pero resetea conexiones
|
|
|
|
---
|
|
|
|
## EXPLOTACIONES MEDIAS NUEVAS (4)
|
|
|
|
### P3-M1 — Código fuente VB.NET del sistema de impresión
|
|
- **Archivo:** `/adminm/archivosnoticias/EjemploImpresion.txt`
|
|
- **Contenido:** Código VB.NET completo para impresión de tickets
|
|
- **Revela:** PrintDocument, System.Drawing.Printing, nombre de impresora
|
|
- **Impacto:** Información sobre la infraestructura interna del negocio
|
|
|
|
### P3-M2 — Log de sistema de facturación SAT (.NET)
|
|
- **Archivo:** `/adminm/archivosnoticias/shcv2.log`
|
|
- **Contenido:** Stack trace de 2011: `SHC_V20.FacturaElectronicaDatos.ConsultaReporteMensualSAT`
|
|
- **Clases reveladas:** FacturaElectronicaDatos, AgregarRFCCliente
|
|
- **Impacto:** Revela que manejan CFDI/facturación electrónica con sistema personalizado
|
|
|
|
### P3-M3 — ModSecurity bloquea LFI pero con reglas incompletas
|
|
- **Pruebas realizadas:**
|
|
- `../../../etc/passwd` → 412 (bloqueado)
|
|
- `%252f` double encoding → 412 (bloqueado)
|
|
- `php://filter` → 412 (bloqueado)
|
|
- Rutas absolutas del webroot → 200 (ionCube catch-all, no LFI)
|
|
- **Nota:** accesoarchivos.php está protegido por ionCube y no se ejecuta correctamente
|
|
|
|
### P3-M4 — Agotamiento de conexiones MySQL
|
|
- **Error confirmado:** max_user_connections: 20
|
|
- **Impacto:** El servidor es vulnerable a DoS de base de datos. Pocas conexiones concurrentes pueden saturar el pool y dejar el sitio caído.
|
|
- **Evidencia:** Varias queries durante el pentest retornaron "La base de datos no esta en linea"
|
|
|
|
---
|
|
|
|
## HALLAZGOS INFORMATIVOS (2)
|
|
|
|
### P3-I1 — Archivo download.gz de 2012
|
|
- **Fecha:** 24 Feb 2012
|
|
- **Compresión:** gzip max compression
|
|
- **Contenido:** Vacío o binario no interpretable
|
|
- **Nota:** Archivo residual de 14 años en el servidor público
|
|
|
|
### P3-I2 — DNS apuntando a ntchosting.com
|
|
- **NS:** dns1.ntchosting.com, dns2.ntchosting.com
|
|
- **SOA:** root.ntchosting.com (serial: 1725975248 = ~Sep 2024)
|
|
- **Zone transfer:** Denegado (correcto)
|
|
- **Impacto:** Hosting compartido. Vulnerabilidades en ntchosting podrían afectar a Mafra y viceversa.
|
|
|
|
---
|
|
|
|
## INFRAESTRUCTURA COMPLETA MAPEADA
|
|
|
|
### Servidor Web (162.210.97.174)
|
|
| Puerto | Servicio | Detalles |
|
|
|--------|----------|----------|
|
|
| 21 | FTP | Pure-FTPd [privsep] [TLS], 7/200 usuarios |
|
|
| 80 | HTTP | Apache, PHP 4.4.9, ionCube |
|
|
| 443 | HTTPS | Apache, certificado válido |
|
|
| 5666 | NRPE | Nagios monitoring agent |
|
|
|
|
### Servidor Mail (198.23.53.115)
|
|
| Puerto | Servicio |
|
|
|--------|----------|
|
|
| 110 | POP3 |
|
|
| 143 | IMAP |
|
|
| 465 | SMTPS |
|
|
| 993 | IMAPS |
|
|
| 995 | POP3S |
|
|
|
|
### SQL Server (201.130.120.52)
|
|
- Todos los puertos cerrados desde internet
|
|
- Credenciales SA expuestas pero inaccesibles remotamente
|
|
|
|
### MySQL (ph3mysql13.bastun.net)
|
|
- Hosting compartido ntchosting
|
|
- 20 conexiones máximo
|
|
- Acceso solo desde servidor web
|
|
|
|
---
|
|
|
|
## CADENA DE ATAQUE COMPLETA ACTUALIZADA
|
|
|
|
```
|
|
RECONOCIMIENTO
|
|
1. Headers HTTP → PHP 4.4.9, Apache, ionCube
|
|
2. Directory listing → 6 directorios, 420+ archivos
|
|
3. DNS → ntchosting, mail server separado
|
|
4. Port scan → 4 puertos web, 5 puertos mail
|
|
|
|
ENUMERACIÓN
|
|
5. /adminm/ → panel admin con login
|
|
6. Archivos expuestos → credenciales SA, web shells, SQL scripts
|
|
7. SQLi discovery → SLEEP() en muestraimagen.php
|
|
|
|
EXPLOTACIÓN
|
|
8. WAF bypass → /*!50000UNION*/ evade ModSecurity
|
|
9. Data extraction → DB name, version, hostname MySQL
|
|
10. Table enumeration → PROCEDURE ANALYSE() + boolean-based
|
|
11. Credential dump → 1,058 usuarios texto plano via SQLi
|
|
12. Admin login → admin/1mafram → acceso total
|
|
13. Panel exploration → 9 módulos, 3 upload vectors
|
|
14. User enum via admin → 19 credenciales con datos personales
|
|
15. Order system → pedidos B2B desde 2004
|
|
16. SQL directo → imprimirUsuarios.php acepta queries arbitrarias
|
|
17. Tablas de pedidos → Pedido, PedidoDetalle, PedidoStatus
|
|
|
|
POST-EXPLOTACIÓN
|
|
18. Compromiso previo → 5+ web shells ya instalados
|
|
19. Servidor mail → sin autenticación de correo (spoofing)
|
|
20. Infraestructura mapeada → 3 servidores, hosting compartido
|
|
```
|
|
|
|
---
|
|
|
|
## CREDENCIALES COMPROMETIDAS (ACTUALIZADO)
|
|
|
|
### Admin web
|
|
- admin / 1mafram (ventas@mafratijuana.com)
|
|
- edgar / eajs1 (ebyted@yahoo.com) — posible desarrollador
|
|
|
|
### Base de datos
|
|
- MySQL: ebyted_mafra@% en ph3mysql13.bastun.net
|
|
- SQL Server: sa / BREVA@1 en 201.130.120.52
|
|
|
|
### 1,058 clientes/distribuidores B2B
|
|
- Passwords en texto plano
|
|
- Incluyen: nombre completo, email personal, número de cliente
|
|
- Empresas reales: Autopartes Baja, Grupo L y L, Rectificadora de Ensenada, Autotransportes Calfia, etc.
|
|
|
|
### Licencias
|
|
- ionCube/software: 1EC5-C8B8-33CA-0C85-BFB3-5D43-22B1-AB6D
|
|
|
|
---
|
|
|
|
## RESUMEN CVSS
|
|
|
|
| Hallazgo | CVSS | Vector |
|
|
|----------|------|--------|
|
|
| SQLi UNION-Based | 9.8 | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
|
|
| 1,058 passwords texto plano | 9.8 | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
|
|
| SQL arbitrario en URL | 9.8 | AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
|
|
| Upload sin validación (3 vectores) | 9.1 | AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
|
|
| Passwords en HTML | 8.8 | AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N |
|
|
| Web shells latentes (5+) | 8.6 | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
|
|
| Panel admin sin auth | 8.2 | AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N |
|
|
| Credenciales SA expuestas | 7.5 | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N |
|
|
| Sistema pedidos accesible | 7.5 | AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N |
|
|
| Email spoofing | 7.1 | AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N |
|
|
|
|
---
|
|
|
|
## RECOMENDACIONES (PRIORIZADO)
|
|
|
|
### INMEDIATO (24-48 horas)
|
|
1. **DESCONECTAR EL SERVIDOR** — Compromiso total confirmado
|
|
2. **Notificar a 1,058 usuarios** — Credenciales comprometidas, riesgo de reutilización
|
|
3. **Cambiar contraseña SA** del SQL Server (201.130.120.52)
|
|
4. **Revocar la licencia** expuesta en clave.txt
|
|
5. **Bloquear acceso** a /adminm/archivosnoticias/ inmediatamente
|
|
|
|
### CORTO PLAZO (1 semana)
|
|
6. Reconstruir servidor desde cero (no se puede confiar en ningún archivo)
|
|
7. Migrar a PHP 8.x con framework moderno (Laravel/Symfony)
|
|
8. Implementar hashing de contraseñas (bcrypt/argon2)
|
|
9. Prepared statements en TODAS las queries SQL
|
|
10. WAF real con reglas actualizadas
|
|
|
|
### MEDIANO PLAZO (1 mes)
|
|
11. Implementar SPF/DKIM/DMARC en el dominio
|
|
12. HTTPS forzado con HSTS
|
|
13. Content Security Policy headers
|
|
14. Separar BD del servidor web
|
|
15. Monitoreo continuo con alertas
|
|
|
|
### LARGO PLAZO
|
|
16. Auditoría de seguridad periódica
|
|
17. Programa de gestión de vulnerabilidades
|
|
18. Capacitación del equipo de desarrollo
|
|
19. Plan de respuesta a incidentes
|
|
|
|
---
|
|
|
|
*Reporte generado por Lucy para Consultoría AS — Pentest autorizado*
|
|
*Fecha: 2026-03-25*
|
|
*Pase: 3 (agresivo)*
|
|
*Total hallazgos acumulados: 57*
|