Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Herramientas/GitHubGitHub/vertexcover-io/strot
ReconocimientoScripting y AutomatizaciónPruebas de Seguridad de APIsRecopilación de InformaciónSeguridad WebCrawler
GitHubvertexcover-io/strot

strot

Agente de scraping de API para APIs web

Ver Repositorio
18hace 9 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Sitio web

Ingeniería inversa de la API interna de cualquier sitio web usando lenguaje natural

Licencia Python


El Problema

Los sitios web modernos cargan datos a través de llamadas AJAX ocultas:

  • Los datos no están en el HTML; se obtienen a través de APIs internas
  • Debes inspeccionar manualmente las solicitudes de red
  • Lógica de paginación compleja oculta en JavaScript
  • Las APIs cambian frecuentemente sus endpoints y parámetros

La Solución

Strot analiza sitios web y descubre sus llamadas internas a la API por ti.

Lo que Strot realmente hace:

  1. Analiza la página web para entender qué datos deseas
  2. Captura la solicitud AJAX que obtiene esos datos
  3. Detecta todos los parámetros - paginación (límite/desplazamiento, cursores, números de página) Y parámetros dinámicos (ordenamiento, filtrado, búsqueda)
  4. Genera código de extracción para analizar la respuesta JSON
  5. Devuelve una Fuente que replica las llamadas a la API del propio sitio web con control total de parámetros

🐳 Pruébalo Ahora - ¡Sin Configuración Requerida!

Obtén la experiencia completa de Strot (interfaz web + API) al instante:

Using Patchright browser

root@kitploit:~
docker run -d --name browser-server -p 5678:5678 synacktra/patchright-headless-server
STROT_ANTHROPIC_API_KEY=sk-ant-apiXXXXXX \
  docker compose -f https://raw.githubusercontent.com/vertexcover-io/strot/refs/heads/main/docker-compose.yml up

O, usando el navegador Steel

root@kitploit:~
STROT_BROWSER_WS_URL=wss://connect.steel.dev?apiKey=ste-XXXXXX STROT_ANTHROPIC_API_KEY=sk-ant-apiXXXXXX \
  docker compose -f https://raw.githubusercontent.com/vertexcover-io/strot/refs/heads/main/docker-compose.yml up

Luego visita:

  • 🌐 Panel web: http://localhost:3000 - Interfaz visual para analizar sitios web
  • 🔌 API REST: http://localhost:1337 - Acceso programático

🐍 Biblioteca de Python

Instalación

root@kitploit:~
pip install strot

O usando uv:

root@kitploit:~
uv pip install strot

Ejemplo 1: Ingeniería inversa de la API de reseñas

root@kitploit:~
import strot
import asyncio
from pydantic import BaseModel

class Review(BaseModel):
    title: str | None = None
    username: str | None = None
    rating: float | None = None
    comment: str | None = None
    date: str | None = None

async def get_reviews():
    # Strot discovers the internal API that loads reviews
    source = await strot.analyze(
        url="https://www.getcleanpeople.com/product/fresh-clean-laundry-detergent/",
        query="Customer reviews with ratings and comments",
        output_schema=Review,
        code_executor="e2b" # Defaults to "unsafe"
    )

    # Use the same API call the website uses, with full parameter control
    async for reviews in source.generate_data(limit=500, offset=100, sortBy="date desc"):
        for review in reviews:
            print(f"{review['rating']}⭐ by {review['username']}: {review['comment']}")

if __name__ == "__main__":
    asyncio.run(get_reviews())

Ejemplo 2: Capturar la API de listado de productos

root@kitploit:~
import strot
import asyncio
from pydantic import BaseModel

class Product(BaseModel):
    name: str | None = None
    price: float | None = None
    rating: float | None = None
    availability: str | None = None
    description: str | None = None

async def get_products():
    # Strot finds the AJAX endpoint that loads product listings
    source = await strot.analyze(
        url="https://blinkit.com/cn/fresh-vegetables/cid/1487/1489",
        query="Listed products with names and prices.",
        output_schema=Product
    )

    # Set code executor of your choice into source
    source.set_code_executor("e2b")

    # Access all products with custom filtering and sorting
    async for products in source.generate_data(limit=100, offset=0, category="vegetables", sortBy="price"):
        for product in products:
            print(f"{product['name']}: ${product['price']} ({product['rating']}⭐)")

if __name__ == "__main__":
    asyncio.run(get_products())

🔌 Servidor MCP

Strot proporciona un servidor MCP (Protocolo de Contexto de Modelo) que permite a clientes MCP como Claude analizar sitios web y descubrir sus APIs internas directamente.

Configuración

root@kitploit:~
git clone https://github.com/vertexcover-io/strot.git
cd strot && uv sync --group mcp

Establece las variables de entorno:

root@kitploit:~
export STROT_ANTHROPIC_API_KEY=sk-ant-apiXXXXXX
export STROT_BROWSER_MODE_OR_WS_URL=headless  # or 'headed' or ws://browser-url

Si deseas usar un navegador alojado, puedes hacer lo siguiente:

Ejecuta un servidor headless dentro de Docker

root@kitploit:~
docker run -d --name browser-server -p 5678:5678 synacktra/patchright-headless-server
export STROT_BROWSER_MODE_OR_WS_URL=ws://localhost:5678/patchright

O, conéctate a un servidor de navegador remoto:

root@kitploit:~
export STROT_BROWSER_MODE_OR_WS_URL=wss://...

Uso

root@kitploit:~
$ uv run strotmcp
Usage: strotmcp COMMAND

╭─ Commands ─────────────────────────────────────────────╮
│ http             Start an http server.                 │
│ sse              Start an sse server.                  │
│ stdio            Start a stdio server.                 │
│ streamable-http  Start a streamable http server.       │
╰────────────────────────────────────────────────────────╯

Con Claude Code

  • Transporte stdio

    root@kitploit:~
    claude mcp add strot-mcp "uv run strotmcp stdio" --transport stdio \
      --env STROT_ANTHROPIC_API_KEY=$STROT_ANTHROPIC_API_KEY STROT_BROWSER_MODE_OR_WS_URL=$STROT_BROWSER_MODE_OR_WS_URL
    
  • Transportes sse, http, streamable-http

    Ejecuta el servidor MCP con el transporte deseado en una terminal separada:

    root@kitploit:~
    uv run strotmcp sse --port 8888
    # uv run strotmcp http --host 0.0.0.0
    # uv run strotmcp streamable-http --host 127.0.0.1 --port 8777
    

    Añade el servidor MCP a Claude:

    root@kitploit:~
    claude mcp add strot-mcp http://127.0.0.1:8888/sse --transport sse
    

🧪 Evaluación

Prueba y valida la precisión del análisis de Strot en diferentes sitios web y componentes individuales. El sistema de evaluación admite cinco tipos de entrada:

  • trabajos existentes (evalúa trabajos completados por ID),
  • nuevos trabajos (crea y evalúa tareas de análisis completas),
  • detección de solicitudes (prueba combinaciones de URL y consulta),
  • detección de parámetros (prueba el análisis de parámetros individuales de solicitudes, tanto de paginación como dinámicos),
  • extracción estructurada (prueba el análisis de respuestas con esquemas específicos).

Compara los resultados reales con los esperados, rastreando métricas como la coincidencia de la URL fuente, la detección de claves de paginación, la detección de parámetros dinámicos y la precisión del recuento de entidades. Todas las evaluaciones y sus pasos de análisis detallados se almacenan en Airtable.

Configuración

root@kitploit:~
git clone https://github.com/vertexcover-io/strot.git
cd strot && uv sync --group eval

Configuración de Airtable

  1. Crea una nueva base de Airtable:

    • Ve a Workspaces
    • Haz clic en el botón Crear en el espacio de trabajo deseado
    • Selecciona Construir una aplicación por tu cuenta
    • Copia el ID de la Base desde la URL (ej. appXXXXXXXXXXXXXX)
  2. Crea un Token de Acceso Personal:

    • Ve a /create/tokens
    • Agrega los siguientes alcances:
      • data.records:read
      • data.records:write
      • schema.bases:read
      • schema.bases:write
    • Dale acceso a la base que creaste en el paso 1
    • Presiona Crear token y copia el token (ej. patXXXXXXXXXXXXXX)

Nota: Las tablas requeridas se crean automáticamente con el esquema adecuado cuando ejecutas evaluaciones.

Uso

root@kitploit:~
$ uv run stroteval
Usage: stroteval [OPTIONS]

Evaluate multiple job-based or task-based inputs from a file or stdin.

╭─ Parameters ──────────────────────────────────────────────────────────────────╮
│ --file  -f  Path to the JSON/JSONL file. If not provided, reads from stdin.   │
╰───────────────────────────────────────────────────────────────────────────────╯

Asegúrate de que el servidor API esté en ejecución si estás evaluando entradas basadas en trabajos.

root@kitploit:~
echo '[
  {
    "job_id": "existing-job-uuid",
    "expected_source": "https://api.example.com/reviews",
    "expected_pagination_keys": ["cursor", "limit"],
    "expected_dynamic_keys": ["sortBy", "category"],
    "expected_entity_count": 243
  },
  {
    "site_url": "https://example.com/category/abc",
    "query": "Listed products with name and prices",
    "expected_source": "https://api.example.com/products",
    "expected_pagination_keys": ["limit", "offset"],
    "expected_dynamic_keys": ["category", "sortBy"],
    "expected_entity_count": 100
  },
  {
    "request": {
      "method": "GET",
      "url": "https://example.com/api/products",
      "type": "ajax",
      "queries": {"page": "2", "limit": "50", "sortBy": "price", "category": "electronics"}
    },
    "expected_pagination_keys": ["page", "limit"],
    "expected_dynamic_keys": ["sortBy", "category"]
  },
  {
    "response": {
      "value": "",
      "request": {
        "method": "GET",
        "url": "https://example.com/api/reviews",
        "type": "ajax"
      },
      "preprocessor": {"element_selector": ".reviews-container"}
    },
    "output_schema_file": "review_schema.json",
    "expected_entity_count": 10
  }
]' | uv run stroteval

🆘 ¿Necesitas Ayuda?

  • 💬 Discusiones de GitHub - Haz preguntas
  • 🐛 Reportar Problemas - ¿Encontraste un error?

📄 Licencia

Licencia MIT - ¡Úsala como quieras!


Hecho con ❤️ por Vertexcover Labs

Descargar herramienta
Establece variables de entorno:
root@kitploit:~
export STROT_AIRTABLE_BASE_ID=appXXXXXXXXXXXXXX
export STROT_AIRTABLE_TOKEN=patXXXXXXXXXXXXXX

# set the following if you wish to evaluate separate tasks
export STROT_ANTHROPIC_API_KEY=sk-ant-apiXXXXXX