La API de Tráfico No Deseado admite filtrado simple y complejo para los puntos finales /sessions
, /attempts
y /malware
. Esta página explica cómo usar estos filtros para consultar datos específicos.
Los filtros simples se aplican usando parámetros de consulta en la URL. Cada parámetro corresponde a un campo en el modelo de datos, y múltiples parámetros se combinan con una operación AND implícita. Los filtros simples son compatibles con los siguientes puntos finales:
/sessions
: Filtrar por atributos de sesión, detalles de intentos o propiedades de malware./attempts
: Filtrar por atributos de intentos o detalles de sesión asociados./malware
: Filtrar por atributos de malware o detalles de sesión asociados.La tabla a continuación enumera los campos de filtro simple compatibles para cada punto final:
Punto Final | Campo de Filtro | Tipo de Dato | Descripción |
---|---|---|---|
/sessions | session-id | Entero | ID de sesión único |
/sessions | session | Cadena | Identificador de sesión (por ejemplo, "2a58f17a436b") |
/sessions | commands | Cadena | Comandos ejecutados en la sesión |
/sessions | dst-ip | Cadena | IP de destino (por ejemplo, "192.168.0.96") |
/sessions | dst-port | Entero | Puerto de destino (por ejemplo, 2723) |
/sessions | dst-asn | Entero | ASN de destino (por ejemplo, 7922) |
/sessions | dst-country | Cadena | País de destino con espacios codificados en URL (por ejemplo, "United%20States") |
/sessions | duration | Flotante | Duración de la sesión en segundos (por ejemplo, 1.23172) |
/sessions | protocol | Cadena | Protocolo (por ejemplo, "telnet", "ssh") |
/sessions | sensor | Cadena | Nombre del sensor (por ejemplo, "raspberrypi") |
/sessions | src-ip | Cadena | IP de origen (por ejemplo, "192.168.1.100") |
/sessions | src-port | Entero | Puerto de origen (por ejemplo, 61248) |
/sessions | src-asn | Entero | ASN de origen (por ejemplo, 4766) |
/sessions | src-country | Cadena | País de origen con espacios codificados en URL (por ejemplo, "South%20Korea") |
/sessions | timestamp | Cadena | Marca de tiempo de la sesión (por ejemplo, "2025-02-23T00:00:00Z") |
/sessions | traffic-type | Cadena | Tipo de tráfico (por ejemplo, "attack", "scan") |
/sessions | start | Cadena | Marca de tiempo inicial para el rango (por ejemplo, "2025-02-23T00:00:00Z") |
/sessions | end | Cadena | Marca de tiempo final para el rango (por ejemplo, "2025-02-23T23:59:59Z") |
/attempts | attempt-id | Entero | ID de intento único |
/attempts | attempt-session | Cadena | Identificador de sesión (por ejemplo, "2a58f17a436b") |
/attempts | attempt-login | Cadena | Éxito de inicio de sesión ("true" o "false") |
/attempts | attempt-credentials | Cadena | Credenciales con "||" codificado en URL como separador entre usuario y contraseña (formato: "usuario%7c%7ccontraseña") |
/attempts | attempt-username | Cadena | Nombre de usuario usado en el intento |
/attempts | attempt-password | Cadena | Contraseña usada en el intento |
/attempts | start, end | Cadena | Rango de marca de tiempo vía sesión |
/malware | malware-id | Entero | ID de malware único |
/malware | malware-session | Cadena | Identificador de sesión (por ejemplo, "82e4335b3bb3") |
/malware | malware-hash | Cadena | Hash de malware (por ejemplo, "a8460f446be540410004b1a8db4083773fa46f7fe76fa84219c93daa1669f8f2") |
/malware | malware-site | Cadena | URL del sitio de malware con barra inclinada codificada doblemente en URL (por ejemplo, "http:%252f%252f37.44.238.88") |
/malware | malware-type | Cadena | Tipo de malware (por ejemplo, "redir", "download", "upload") |
/malware | start, end | Cadena | Rango de marca de tiempo vía sesión |
Ejemplo de Solicitud (Filtro Simple):
Recuperar sesiones donde la IP de destino es "192.168.0.96" y el protocolo es "telnet":
curl -H "X-API-Key: YOUR_API_KEY" -H "Accept: application/json" "https://defrancisco.us/unwanted-traffic/sessions?dst-ip=192.168.0.96&protocol=telnet&limit=1"
Ejemplo de Respuesta:
{
"status": "success",
"data": [
{
"attempts": [
{
"attempt_credentials": "root||xc3511",
"attempt_id": 1,
"attempt_login": "true",
"attempt_password": "xc3511",
"attempt_session": "2a58f17a436b",
"attempt_username": "root"
}
],
"commands": "sh; shell; enable; system; ping ;sh; >/usr/.a && cd /usr/; rm -rf .a; >/mnt/.a && cd /mnt/; rm -rf .a; >/var/run/.a && cd /var/run/; rm -rf .a; >/dev/shm/.a && cd /dev/shm/; rm -rf .a; >/etc/.a && cd /etc/; rm -rf .a; >/var/.a && cd /var/; rm -rf .a; >/tmp/.a && cd /tmp/; rm -rf .a; >/dev/.a && cd /dev/; rm -rf .a; >/var/home/user/fw/.a && cd /var/home/user/fw/; rm -rf .a; for i in `cat /proc/mounts|grep tmpfs|grep -v noexec|cut -d ' ' -f 2`; do >$i/.a && cd $i;done; cat /proc/mounts | grep tmpfs | grep -v noexec | cut -d -f 2; /bin/busybox wget --help; /bin/busybox ftpget --help; /bin/busybox echo -e '\\\\x67\\\\x61\\\\x79\\\\x66\\\\x67\\\\x74';",
"dst_asn": 7922,
"dst_country": "United States",
"dst_ip": "192.168.0.96",
"dst_port": 2723,
"duration": 1.23172,
"malware": [],
"protocol": "telnet",
"sensor": "raspberrypi",
"session": "2a58f17a436b",
"session_id": 1,
"src_asn": 4766,
"src_country": "South Korea",
"src_ip": "192.168.1.100",
"src_port": 61248,
"timestamp": "Sun, 23 Feb 2025 00:00:01 GMT",
"traffic_type": "attack"
}
],
"pagination": {
"limit": 1,
"offset": 0,
"totalRecords": 6850
}
}
Los filtros complejos se aplican usando un único parámetro de consulta filter
, que acepta un objeto codificado en JSON. Los filtros complejos admiten operadores avanzados y combinaciones lógicas, lo que permite consultas más precisas. Los operadores compatibles incluyen:
eq
: Igualne
: No igualgt
: Mayor quelt
: Menor quege
: Mayor o igual quele
: Menor o igual quein
: En una lista de valorescontains
: La cadena contiene una subcadenaand
: AND lógico de condicionesor
: OR lógico de condicionesEl objeto JSON del filtro tiene la siguiente estructura:
field
: El campo a filtrar (por ejemplo, "dst_ip", "protocol").operator
: El operador a aplicar (por ejemplo, "eq", "contains").value
: El valor a comparar (cadena, número o matriz para "in").conditions
: Matriz de subfiltros para operadores "and" u "or".Los filtros complejos deben estar codificados en URL cuando se incluyen en la cadena de consulta.
Ejemplo de Solicitud (Filtro Complejo):
Recuperar sesiones donde la IP de origen es "192.168.1.100" Y el protocolo es "telnet" O "ssh":
curl -H "X-API-Key: YOUR_API_KEY" -H "Accept: application/json" "https://defrancisco.us/unwanted-traffic/sessions?filter=%7B%22and%22:%5B%7B%22field%22:%22src_ip%22,%22operator%22:%22eq%22,%22value%22:%22192.168.1.100%22%7D,%7B%22or%22:%5B%7B%22field%22:%22protocol%22,%22operator%22:%22eq%22,%22value%22:%22telnet%22%7D,%7B%22field%22:%22protocol%22,%22operator%22:%22eq%22,%22value%22:%22ssh%22%7D%5D%7D%5D%7D&limit=1"
JSON de Filtro Decodificado:
{
"and": [
{
"field": "src_ip",
"operator": "eq",
"value": "192.168.1.100"
},
{
"or": [
{
"field": "protocol",
"operator": "eq",
"value": "telnet"
},
{
"field": "protocol",
"operator": "eq",
"value": "ssh"
}
]
}
]
}
Ejemplo de Respuesta:
{
"status": "success",
"data": [
{
"attempts": [
{
"attempt_credentials": "root||xc3511",
"attempt_id": 1,
"attempt_login": "true",
"attempt_password": "xc3511",
"attempt_session": "2a58f17a436b",
"attempt_username": "root"
}
],
"commands": "sh; shell; enable; system; ping ;sh; >/usr/.a && cd /usr/; rm -rf .a; >/mnt/.a && cd /mnt/; rm -rf .a; >/var/run/.a && cd /var/run/; rm -rf .a; >/dev/shm/.a && cd /dev/shm/; rm -rf .a; >/etc/.a && cd /etc/; rm -rf .a; >/var/.a && cd /var/; rm -rf .a; >/tmp/.a && cd /tmp/; rm -rf .a; >/dev/.a && cd /dev/; rm -rf .a; >/var/home/user/fw/.a && cd /var/home/user/fw/; rm -rf .a; for i in `cat /proc/mounts|grep tmpfs|grep -v noexec|cut -d ' ' -f 2`; do >$i/.a && cd $i;done; cat /proc/mounts | grep tmpfs | grep -v noexec | cut -d -f 2; /bin/busybox wget --help; /bin/busybox ftpget --help; /bin/busybox echo -e '\\\\x67\\\\x61\\\\x79\\\\x66\\\\x67\\\\x74';",
"dst_asn": 7922,
"dst_country": "United States",
"dst_ip": "192.168.0.96",
"dst_port": 2723,
"duration": 1.23172,
"malware": [],
"protocol": "telnet",
"sensor": "raspberrypi",
"session": "2a58f17a436b",
"session_id": 1,
"src_asn": 4766,
"src_country": "South Korea",
"src_ip": "192.168.1.100",
"src_port": 61248,
"timestamp": "Sun, 23 Feb 2025 00:00:01 GMT",
"traffic_type": "attack"
}
],
"pagination": {
"limit": 1,
"offset": 0,
"totalRecords": 7604
}
}
Para usar los filtros de manera efectiva:
in
o contains
.400 Solicitud Incorrecta
.limit
, offset
) para manejar conjuntos de resultados grandes (ver Paginación).commands
o malware-site
, usa el operador contains
en filtros complejos para buscar subcadenas.limit
para verificar los resultados antes de consultar conjuntos de datos grandes.