PentestingIPTV Pentest Lab

Catalogo de Tecnicas

105+ tecnicas probadas — SQL Injection, SSRF, routing bypass, RCE/Debug y protocolos no-HTTP

Lo Que Intentamos (Catalogo de Tecnicas)

Resumen de Intentos


SQL Injection — Todo Cerrado

Probamos inyeccion SQL en todos los parametros accesibles:

TargetParametroResultado
STB API load.phpMAC cookie, sortby, search, category, p, stb_typePrepared statements
Xtream player_api.phpseries_id, sort, category_id, username, password, vod_id, stream_idPrepared statements / PHP crash
Xtream panel_api.phpTodos los paramsPrepared statements
Check Point 2019 vclubsortby (SLEEP, FLOOR/RAND, UNION)Tabla vacia — sin ejecucion

Conclusion: Todos los parametros usan prepared statements. El crash en series_id es un error de PHP (type casting), no SQL injection.


SSRF — Sin Fetch Saliente

Probamos 16 endpoints buscando Server-Side Request Forgery:

EndpointParametroResultado
itv/create_linkcmd, url{"js":[]} — ignora
stb/get_urlurl{"js":[]} — ignora
stb/proxyurl{"js":[]} — ignora
epg/getperiod, ch_id{"js":[]} — sin fetch
test_downloadurl{"js":[]} — no implementa
RTMP notify callbackstream nameProcesa pero no hace HTTP

Analisis de timing: Inyectamos URLs a puertos cerrados y IPs no enrutables. Si el servidor hiciera fetch, veriamos delays de conexion. Resultado: timing constante — no hay fetch.


Bypass de Routing — 30+ Tecnicas Fallidas

Detalle de tecnicas:

CategoriaTecnicasResultado
Method overrideX-HTTP-Method-Override, _method, 6 headersEscapa a Laravel (sin rutas admin)
Path confusionDouble slash, encoded slash, dot segments, null byte, CRLF, semicolon, backslashnginx normaliza todo
Entry points16+ alternativas PHP (index.php, app.php, api.php...)Ninguna existe
Alternative pathsportal.php, PATH_INFO via load.phpMisma cupula
Silex routes51 rutas POST probadasTodas 405
Admin JSON10+ rutas _jsonAuth middleware -> 404
Internal routestools, debug, graphql, rest, api, v1Todas 404

RCE y Debug — Bloqueados

Check Point 2019 Chain:

  • Stage 1 (Auth Bypass): Funciona parcialmente — type=vclub accesible
  • Stage 2 (SQLi): Tabla vclub esta vacia, ORDER BY no ejecuta
  • Stage 3 (RCE): Depende de Stage 2

La vulnerabilidad existe en el codigo pero es inexplotable en esta instancia porque no hay datos en las tablas accesibles sin auth.

VectorEstado
_fragment (CVE-2014-4931)Ruta existe, bloqueada por routing
Laravel Ignition (CVE-2021-3129)Instalado, POST -> 405 (dual routing)
Silex debug (_profiler, _wdt)Registrado pero 403/404
Config leak (.env, composer.json, logs)Todo 404 o redirect
PHP stream wrappersIgnorados
APP_DEBUG info leakfalse (sin stack trace)
6 PHP CVEs evaluadas0 aplicables (target Linux, sin upload)
Type jugglingdo_auth ignora todos los params
XXEXML no procesado
Check Point 2019 full chainAuth bypass funciona, SQLi inexplotable (tablas vacias)

Protocolos No-HTTP

Fuera de HTTP probamos otros vectores:

VectorResultado
CL.TE / TE.CL smuggling400 nginx strict parsing
h2c upgrade404 Laravel
WebSocket + Host bypass404 Laravel
CONNECT tunnelingRechazado
HTTP/1.0 downgradeSin diferencial
Port 31210 header spoofing403 (socket-based IP check)
SIP :5060 (3 nodos, TCP+UDP)Sin respuesta
RTMP :4499 (10 apps)Solo /live existe, auth callback deniega
SSH user enum (CVE-2018-15473)Parchado (timing constante)
SSH brute force (2700 combos)Cancelado al 32%, sin exito
DNS AXFR (4 dominios x 2 servidores)Todos denegados
nginx MP4 module CVEsModulo NO activo en ningun nodo
RoadRunner health/metricsNo expuesto
set_settings writeConfirmado read-only