Command and Control - web_attack_and_isp_webshell_localhost_access_log.txt
Sigue el rastro de las IPs
Cuando tienes un log masivo con varias IPs, lo primero es identificar el rol de cada una. En este log verás principalmente tres direcciones: 192.168.105.83, 192.168.105.76 y 192.168.105.64. También se aprecian en ocasiones peticiones internas.
Primero: identifica qué hizo la IP 192.168.105.83 al principio del log. Si nos fijamos en los códigos de respuesta HTTP (401 vs 200) y los nombres de las aplicaciones a las que accede, empezamos a tirar del hilo.
Punto de entrada (IP 192.168.105.83)
- ¿Qué aplicación intenta comprometer? Busca la palabra
/manager. En Tomcat, este es el panel de gestión. - Patrón de ataque: Verás múltiples peticiones seguidas con códigos
401(No autorizado) hasta que de repente aparece un200. - Pregunta de mentor: Si ves varios
401seguidos de un200en el/manager/html, ¿qué técnica crees que ha tenido éxito?
¿Qué hace ruido y qué ejecuta algo?
A partir de las 09:32, la misma IP empieza a lanzar cientos de peticiones a rutas extrañas como boot.ini, etc/passwd, y scripts aleatorios (jsd1nrlqrxYi.html, etc.).
- No te pierdas los detalles de cada archivo. El 99% de estas peticiones devuelve un
404o400. - Interpretación: Esto no es un humano tecleando; es un escáner de vulnerabilidades automático (como Nessus o Nikto).
- En un informe de incidentes, esto se cataloga como “Reconocimiento ruidoso”.
Buscando compromiso (IP 192.168.105.76)
Aquí es donde el caso se pone serio. Olvidamos el escaneo ruidoso y saltamos hacia el final del log.
Buscamos las peticiones realizadas por la IP 192.168.105.76.
- Ruta crítica: Busca
/error/cmd.jsp. - El acontecimiento: Verás peticiones POST a ese archivo
.jsp. - Análisis forense: En Tomcat, los archivos
.jspdentro de carpetas como/error/o que no pertenecen a la aplicación estándar suelen ser Webshells. - Evidencia de persistencia: Fíjate si esa IP utiliza el usuario
adminpara subir archivos (POST /manager/html/upload).
Filtra el log solo con las interacciones de la IP 192.168.105.76:
- ¿Qué archivos subió?
- ¿Qué comandos parece estar ejecutando a través de
cmd.jsp?
Aunque no veas el contenido del comando, el hecho de que reciba un
200 OKtras un POST confirma la ejecución.
Resumen de fases
- Fase 1: Fuerza bruta exitosa al Tomcat Manager por la IP
.83. - Fase 2: Escaneo masivo de vulnerabilidades (ruido) por la IP
.83. - Fase 3: Despliegue de Webshell y ejecución de comandos por la IP
.76. - Fase 4: Rotación de IP y ejecución por la IP
.64.
¿Hay patrón? La IP .83 abrió la puerta y la IP .76 (que podría ser el mismo atacante tras cambiar de VPN/Proxy o un movimiento lateral) es la que realmente opera el sistema.
Comandos de análisis
Identificar archivos leídos (Path Traversal)
grep "192.168.105.83" log.txt | cut -d'"' -f2 | awk '{print $2}' | sort | uniq -c | sort -nrO alternativamente:
grep -a "192.168.105.83" log1.txt | cut -d'"' -f2 | awk '{print $2}' | sort | uniq -c | sort -nrFiltrar por código de estado HTTP
En ciberseguridad, lo que devuelve 404 no nos interesa ahora. Queremos los 200 OK o 302 (Redirección):
grep -a "192.168.105.83" log1.txt | awk '$9 ~ /200|302/ {print $7}' | sort | uniq -c | sort -nrActividad de la IP comprometedora
grep -a "192.168.105.76" log1.txt | awk '{print $7}' | sort | uniq -cResultado: 21 /error/cmd.jsp
- Ese archivo es una Webshell.
- No es un archivo estándar de Tomcat.
- El atacante lo subió para ejecutar comandos del sistema operativo a través de la web.
Peticiones con 200 OK a la webshell
grep -a "/error/cmd.jsp" log1.txt | awk '{print $1, $6, $7, $9, $10}'Fíjate en los bytes devueltos en la columna 10: confirman que se ejecutó código.
Archivos subidos vía Tomcat Manager
grep -a "upload" log1.txt | grep "192.168.105.76"El atacante usó el panel de control que hackeó la IP .83 para subir sus herramientas.
Carpeta sospechosa jsp_app
grep -a "/jsp_app/" log1.txt | awk '{print $4, $7, $9}'¿Exfiltración?
En un servidor Tomcat, la exfiltración a veces no es descargar un .zip, sino:
- Leer
tomcat-users.xml(robar más credenciales). - Leer archivos de configuración de bases de datos (
context.xml).
Conviene buscar peticiones que intenten acceder a archivos .xml o .properties. El intento a WEB-INF. (con punto final) es un bypass de seguridad: en algunos servidores mal configurados, añadir un punto al final permitía saltarse restricciones que impiden leer web.xml. Sin embargo, devuelve un 404 — no lo consiguió por ahí.
La tercera IP (192.168.105.64)
Al final del log aparece la IP 192.168.105.64. Si su última acción fue subir otro archivo o acceder a /manager/html/upload, significa que el incidente seguía activo cuando se extrajeron los logs. Parece que efectúa un reescaneo.
El detalle del favicon.ico
El favicon.ico es el pequeño icono de la pestaña del navegador. Es anormal que el servidor lo envíe justo después de un POST a la webshell.
Cuando un atacante usa una Webshell a través de un navegador, cada vez que la página se refresca, el navegador solicita automáticamente los recursos asociados (como el favicon). Esto es evidencia de actividad humana: un script automatizado no descarga el favicon, pero un navegador web sí. Confirma que tras la automatización inicial, hubo un operador humano tomando el control.
Misión Final
Si eres el analista y ves que la última línea del log es a las 15:25:48 con un código 200 en la webshell:
- ¿El ataque ha terminado? No. El log termina mientras el atacante sigue ejecutando comandos.
- ¿Qué harías primero?
- A) Borrar el log para que no se llene el disco.
- B) Desconectar el servidor de la red o apagar Tomcat inmediatamente.
- C) Bloquear la IP
.76en el Firewall pero dejar el servidor encendido.
Bloquear solo la IP detiene el ataque inmediato sin tirar todo el servicio, manteniendo la disponibilidad — Confidencialidad, Integridad y Disponibilidad.
El riesgo de bloquear solo la IP 76
Si el atacante está rotando IPs (como vimos con la .83, .64 y .76), bloquear la .76 es insuficiente. El atacante ya tiene:
- Credenciales de administrador (usuario
admin). - Persistencia (archivos
.warsubidos y la webshellcmd.jsp).
Si solo bloqueas la IP, se conectará desde una cuarta IP, usará las credenciales que ya tiene, y volverá a llamar a cmd.jsp.
Plan Post-Contención
- Aislamiento y Observación.
- Limpieza de Persistencia: Borrar los archivos
.warsubidos y/error/cmd.jsp. - Cambiar la contraseña del usuario
adminde Tomcat inmediatamente. - Parcheado: Analizar por qué el escáner de la IP
.83tuvo tanto éxito. ¿Versión antigua de Tomcat? ¿Contraseñas por defecto?