DISCUZ所有版本COOKIE劫持方法+DEMO -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

    DISCUZ和很多论坛都无法进行会话劫持,因为会话和IP绑定了,DISCUZ主要的会话认证机制如下:

    /inlude/common.inc.php

    //第136行 验证会话重要的一段就是从sessions表中查询SID,其中一个重要的条件就是$onlineip,如果$onlineip和sessions表中的IP信息无法对应,就不能继续建立sessions表中保存的会话,

DISCUZ所有版本COOKIE劫持方法+DEMO

    --------------------------------------------------------------------------------

    if($sid) {

    if($discuz_uid) {

    $query = $db->query("SELECT s.sid, s.styleid, s.groupid='6' AS ipbanned, s.pageviews AS spageviews, s.lastolupdate, s.seccode, $membertablefields

    FROM {$tablepre}sessions s, {$tablepre}members m

    WHERE m.uid=s.uid AND s.sid='$sid' AND CONCAT_WS('.',s.ip1,s.ip2,s.ip3,s.ip4)='$onlineip' AND m.uid='$discuz_uid'

    AND m.password='$discuz_pw' AND m.secques='$discuz_secques'");

    //79行 $onlineip首先取自HTTP_CLIENT_IP和HTTP_X_FORWARDED_FOR这两个HTTP头

    ------------------------------------------------------------------------------

    if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {

    $onlineip = getenv('HTTP_CLIENT_IP');

    } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {

    $onlineip = getenv('HTTP_X_FORWARDED_FOR');

    } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {

    $onlineip = getenv('REMOTE_ADDR');

    } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {

    $onlineip = $_SERVER['REMOTE_ADDR'];

    }

最新文章