Todas las investigacionesAll investigations
SOC165 · #115Web Attack · SQLiWeb Attack · SQLi

Detección de payloads de SQL Injection sobre WebServer1001SQL Injection Payload Detection Against WebServer1001

Se detectaron múltiples peticiones HTTP GET con payloads lógicos de inyección SQL dirigidas al parámetro de búsqueda de WebServer1001 (172.16.17.18) desde una IP alojada en DigitalOcean. El ataque fue real pero no exitoso: todas las inyecciones devolvieron HTTP 500 (248 B) sin exfiltración de datos.

Multiple HTTP GET requests containing logical SQL injection payloads were detected targeting the search parameter on WebServer1001 (172.16.17.18) from a DigitalOcean-hosted IP. The attack was confirmed as a True Positive but unsuccessful: all injection probes returned HTTP 500 (248 B) with no data exfiltration.

Severidad
High
Veredicto
True Positive
Plataforma
LetsDefend
Fecha
14 de oct de 2026
Duración
25 min
Técnicas
02
Severity
High
Verdict
True Positive
Platform
LetsDefend
Date
Oct 14, 2026
Duration
25 min
Techniques
02

Resumen ejecutivo

El 25 de febrero de 2022 se activó la alerta SOC165 — Possible SQL Injection Payload Detected (Caso #115) tras registrarse una secuencia de peticiones HTTP GET con payloads lógicos de inyección SQL (OR 1 = 1, ORDER BY) contra el endpoint /search/ del servidor interno WebServer1001 (172.16.17.18).

Tras correlacionar los logs del firewall perimetral, los registros HTTP del servidor web y la telemetría de endpoint, se determinó el veredicto como Verdadero Positivo (True Positive). Se confirmó un intento de explotación activo pero no exitoso: todas las peticiones maliciosas fueron respondidas con HTTP 500 y un tamaño de cuerpo fijo (248 bytes), sin retorno de datos sensibles ni ejecución de procesos anómalos en el host.

Veredicto: True Positive — ataque real confirmado, no exitoso. Se procedió con la recomendación de bloqueo perimetral de la IP atacante (167[.]99[.]169[.]17) y remediación en el código de la aplicación.

Detección inicial y triaje

Campo Valor
ID de Alerta / Regla LetsDefend Alert #115 — SOC165 - Possible SQL Injection Payload Detected
Fecha del Incidente (Logs) 2022-02-25 (05:30:15 – 05:34:32 SIEM / 11:34:32 UTC+3)
Fecha de Investigación 2026-10-14
IP de Origen 167[.]99[.]169[.]17 (AS14061 — DigitalOcean, LLC)
Activo Afectado WebServer1001 (172.16.17.18)
URI Solicitada hxxps://172[.]16[.]17[.]18/search/?q=%22%20OR%201%20%3D%201%20--%20-
Acción del Dispositivo Allowed

Hipótesis inicial: Un atacante externo está ejecutando pruebas manuales o automatizadas de inyección SQL contra el parámetro q del buscador (/search/) con el objetivo de evadir filtros, enumerar la estructura de tablas o extraer información de la base de datos subyacente.

Análisis e investigación técnica

Decodificación y análisis de payloads

Al inspeccionar los logs de red y decodificar los valores enviados en la query string (URL Decode), se identificaron 5 peticiones provenientes de 167[.]99[.]169[.]17 en un lapso de ~4 minutos. Tras una primera solicitud legítima a la raíz (/), el actor envió 4 vectores clásicos de inyección SQL:

-- 05:32:31 | Sondeo de error de sintaxis SQL (comilla simple truncada)
' OR '1

-- 05:33:12 | Evaluación booleana siempre verdadera (bypass / tautología)
' OR 'x'='x

-- 05:33:51 | Enumeración de cantidad de columnas retornadas por la consulta
1' ORDER BY 3--+

-- 05:34:32 | Cambio a comillas dobles con condición tautológica y comentario SQL
" OR 1 = 1 -- -
Hora URI Registrada (Raw) Payload Decodificado Estado HTTP Tamaño
05:30:15 hxxps://172[.]16[.]17[.]18/ (Navegación inicial) 200 OK 1092 B
05:32:31 .../search/?q=%27%20OR%20%271 ' OR '1 500 248 B
05:33:12 .../search/?q=%27%20OR%20%27x%27%3D%27x ' OR 'x'='x 500 248 B
05:33:51 .../search/?q=1%27%20ORDER%20BY%203--%2B 1' ORDER BY 3--+ 500 248 B
05:34:32 .../search/?q=%22%20OR%201%20%3D%201%20--%20- " OR 1 = 1 -- - 500 248 B

Evaluación de impacto en Logs y Endpoint

Para determinar si alguna de las inyecciones logró vulnerar el backend o extraer registros, se correlacionaron tres fuentes de evidencia:

  • Códigos y tamaños de respuesta HTTP: A diferencia de la petición legítima inicial (HTTP 200, 1092 bytes), las 4 peticiones con payloads SQLi recibieron un error HTTP 500 (Internal Server Error) con un tamaño idéntico de 248 bytes. Esto confirma que las comillas sin sanitizar provocaron una excepción en el servidor, pero ningún payload logró devolver datos de la base de datos.
  • Comportamiento manual vs. automatizado: Los intervalos de ~40 segundos entre cada intento y la cabecera User-Agent estándar (Firefox/40.1 sobre Windows 7) indican pruebas manuales de tanteo y no la ejecución masiva de un escáner automatizado como sqlmap.
  • Telemetría EDR en WebServer1001: La revisión de procesos activos, historial de comandos y conexiones de red del host confirmó ausencia total de ejecución de comandos remotos (xp_cmdshell, shells web) o conexiones reversas hacia 167[.]99[.]169[.]17.

Evidencia de red y Threat Intelligence (CTI)

  • Origen del tráfico: La dirección IP pública 167[.]99[.]169[.]17 pertenece al bloque de DigitalOcean, LLC (AS14061), un proveedor de VPS frecuentemente utilizado para montar infraestructura efímera de reconocimiento.
  • Reputación CTI (VirusTotal / AbuseIPDB): El indicador registra múltiples detecciones previas vinculadas a escaneo activo de puertos, sondeo de aplicaciones web y campañas de phishing.

Contención y recomendaciones

  1. Bloqueo perimetral inmediato: Incorporar la IP externa 167[.]99[.]169[.]17 a las listas de bloqueo del Firewall perimetral y del Web Application Firewall (WAF).
  2. Hardening de aplicación (Prepared Statements): Refactorizar el endpoint /search/ para que el parámetro q utilice consultas parametrizadas (Prepared Statements) o mapeadores ORM, impidiendo que la entrada del usuario modifique la estructura lógica de la sentencia SQL.
  3. Manejo seguro de excepciones: Evitar que errores de sintaxis en la capa de datos se traduzcan en respuestas HTTP 500 hacia el cliente, ya que esto revela al atacante que su entrada está interactuando sin filtro con el intérprete.
  4. Reglas de WAF: Activar o reforzar firmas de inspección profunda sobre parámetros de URL para bloquear peticiones con operadores y palabras reservadas de SQL (ORDER BY, UNION SELECT, tautologías booleanas y secuencias de comentario --).

Cronología

  1. 05:30:15Petición GET inicial legítima hacia https://172.16.17.18/ — HTTP 200 (1092 B)
  2. 05:32:31Primer sondeo SQLi en /search/?q= con payload [' OR '1] — HTTP 500 (248 B)
  3. 05:33:12Prueba booleana tautológica con payload [' OR 'x'='x] — HTTP 500 (248 B)
  4. 05:33:51Intento de enumeración de columnas con [1' ORDER BY 3--+] — HTTP 500 (248 B)
  5. 05:34:32Payload con comillas dobles [" OR 1 = 1 -- -] dispara la alerta SOC165 (#115) — HTTP 500 (248 B)
  6. CierreVerificación de no compromiso en EDR, recomendación de bloqueo perimetral y cierre como True Positive

Mapeo MITRE ATT&CK

Indicadores de compromiso

defanged
IPv4167[.]99[.]169[.]17Atacante externo · AS14061 (DigitalOcean LLC)
HostWebServer1001 (172.16.17.18)Servidor web objetivo
URLhxxps://172[.]16[.]17[.]18/search/?q=%22%20OR%201%20%3D%201%20--%20-URI que disparó la alerta #115
User-AgentMozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1Cabecera HTTP en las 5 peticiones

Executive Summary

On February 25, 2022, the alert SOC165 — Possible SQL Injection Payload Detected (Case #115) triggered after multiple HTTP GET requests containing logical SQL injection payloads (OR 1 = 1, ORDER BY) were directed at the /search/ endpoint of internal server WebServer1001 (172.16.17.18).

Following correlation of perimeter firewall logs, web server access logs, and endpoint telemetry, the incident was classified as a True Positive. The investigation confirmed an active but unsuccessful web exploitation attempt: every malicious request returned an HTTP 500 status code with a constant 248-byte response body, confirming that no sensitive database records were returned and no host compromise occurred.

Verdict: True Positive — confirmed genuine attack, unsuccessful. Perimeter blocking of the offending source IP (167[.]99[.]169[.]17) and backend query parameterization were recommended.

Initial Detection & Triage

Field Value
Alert ID / Rule LetsDefend Alert #115 — SOC165 - Possible SQL Injection Payload Detected
Incident Timestamp (Logs) 2022-02-25 (05:30:15 – 05:34:32 SIEM / 11:34:32 UTC+3)
Investigation Date 2026-10-14
Source IP 167[.]99[.]169[.]17 (AS14061 — DigitalOcean, LLC)
Affected Asset WebServer1001 (172.16.17.18)
Requested URI hxxps://172[.]16[.]17[.]18/search/?q=%22%20OR%201%20%3D%201%20--%20-
Device Action Allowed

Initial Hypothesis: An external threat actor is conducting manual or automated SQL injection testing against the q query parameter on /search/ to bypass input filters, enumerate table columns, or extract records from the backend database.

Technical Analysis & Investigation

Payload Decoding & Progression

Inspecting the proxy/firewall logs and URL-decoding the q parameter values revealed 5 total requests originating from 167[.]99[.]169[.]17 over roughly 4 minutes. Following an initial baseline request to the root path (/), the adversary transmitted 4 classic SQL injection probes:

-- 05:32:31 | SQL syntax error probe (unclosed single quote)
' OR '1

-- 05:33:12 | Always-true boolean tautology (authentication/filter bypass probe)
' OR 'x'='x

-- 05:33:51 | Column count enumeration in the underlying SELECT query
1' ORDER BY 3--+

-- 05:34:32 | Double-quote delimiter switch with boolean tautology and SQL comment
" OR 1 = 1 -- -
Time Logged URI (Raw) Decoded Payload HTTP Status Size
05:30:15 hxxps://172[.]16[.]17[.]18/ (Initial navigation) 200 OK 1092 B
05:32:31 .../search/?q=%27%20OR%20%271 ' OR '1 500 248 B
05:33:12 .../search/?q=%27%20OR%20%27x%27%3D%27x ' OR 'x'='x 500 248 B
05:33:51 .../search/?q=1%27%20ORDER%20BY%203--%2B 1' ORDER BY 3--+ 500 248 B
05:34:32 .../search/?q=%22%20OR%201%20%3D%201%20--%20- " OR 1 = 1 -- - 500 248 B

Impact Assessment across Logs & Endpoint

To verify whether any of the injected statements succeeded in extracting data or compromising the server, three telemetry sources were correlated:

  • HTTP Response Codes & Byte Counts: Whereas the legitimate request to / returned HTTP 200 (1092 bytes), all 4 injection requests returned HTTP 500 (Internal Server Error) with an invariant size of 248 bytes. This proves that while unsanitized quotes triggered an unhandled exception in the backend, no database rows were leaked.
  • Manual vs. Automated Behavior: The ~40-second intervals between requests and the standard browser User-Agent (Firefox/40.1 on Windows 7) indicate manual probing rather than high-speed automated fuzzing via tools like sqlmap.
  • Endpoint Telemetry (WebServer1001): Reviewing active processes, command history, and network connections on 172.16.17.18 confirmed no anomalous child processes (such as cmd.exe or shells spawned by the database engine) and no outbound connections to 167[.]99[.]169[.]17.

Network Evidence & Threat Intelligence (CTI)

  • Traffic Origin: The external IP 167[.]99[.]169[.]17 is allocated to DigitalOcean, LLC (AS14061), a cloud VPS provider frequently leveraged for ephemeral scanning and exploitation infrastructure.
  • CTI Reputation (VirusTotal / AbuseIPDB): The IP address carries multiple prior detections from security vendors for port scanning, web vulnerability probing, and phishing activity.

Containment & Recommendations

  1. Immediate Perimeter Block: Add the external IP 167[.]99[.]169[.]17 to the perimeter Firewall and Web Application Firewall (WAF) blocklists.
  2. Application Hardening (Prepared Statements): Refactor the /search/ endpoint to process the q parameter strictly through Parameterized Queries (Prepared Statements) or ORM bindings, preventing user input from altering SQL statement logic.
  3. Safe Exception Handling: Configure the web application to handle database exceptions gracefully without returning raw HTTP 500 status codes, preventing attackers from inferring backend parser behavior.
  4. WAF Signature Tuning: Enable or tighten deep URL inspection rules to automatically block requests containing SQL keywords and comment operators (ORDER BY, UNION SELECT, boolean tautologies, --).

Timeline

  1. 05:30:15Initial legitimate GET request to https://172.16.17.18/ — HTTP 200 (1092 B)
  2. 05:32:31First SQLi syntax probe on /search/?q= using [' OR '1] — HTTP 500 (248 B)
  3. 05:33:12Boolean tautology probe using [' OR 'x'='x] — HTTP 500 (248 B)
  4. 05:33:51Column enumeration attempt using [1' ORDER BY 3--+] — HTTP 500 (248 B)
  5. 05:34:32Double-quote payload [" OR 1 = 1 -- -] triggers alert SOC165 (#115) — HTTP 500 (248 B)
  6. ClosedConfirmed no host compromise via EDR, recommended perimeter IP block, and closed as True Positive

MITRE ATT&CK Mapping

Indicators of Compromise (IOCs)

defanged
IPv4167[.]99[.]169[.]17External attacker · AS14061 (DigitalOcean LLC)
HostWebServer1001 (172.16.17.18)Targeted internal web server
URLhxxps://172[.]16[.]17[.]18/search/?q=%22%20OR%201%20%3D%201%20--%20-Specific URI that triggered Alert #115
User-AgentMozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1HTTP header across all 5 requests