本文最后更新于2024年11月2日,已超过 60天没有更新,可能文章内容已失效,请自行测试!

爱丽丝错了😭爱丽丝再也不敢在网上口嗨了😭

——天童爱丽丝

发现经过

千年的爱丽丝同学原本在做校园网web掉线自动登录的脚本,发现校园网是哆点系统,就去翻了翻其他学校的作业,看到了有意思的东西想去测试一下掉线机制,结果做出了出乎意料的东西...

原理

JSONP实现跨域请求(GPT4o解释)

JSONP(JSON with Padding)是一种实现跨域请求的技术,它通过使用<script>标签的特性来绕过浏览器的同源策略,避免跨域访问的限制。传统的AJAX请求会受到同源策略的限制,而<script>标签不受此限制,因此JSONP通过这种方式实现跨域数据传递。

JSONP 的工作原理是:客户端通过动态创建一个 <script> 标签并设置它的 src 属性来向服务器发起请求。服务器将响应数据包裹在一个回调函数中(即 JSONP 格式),然后浏览器会执行这个回调函数,从而将数据返回给客户端。由于浏览器允许跨域加载脚本标签,因此这种方式可以规避跨域限制。

跨域拦截不被触发的原因主要有以下几点:

  1. 浏览器允许 <script> 标签跨域加载资源:同源策略限制的是 AJAX 请求,而不是 <script> 标签的加载行为。
  2. 服务器返回的是 JavaScript 格式的数据:服务器返回的内容被当做 JavaScript 代码执行,并调用了客户端指定的回调函数,而不是作为普通的 JSON 数据被解析。

然而,JSONP 也有一些局限性,比如:

  • 只能发起 GET 请求,不能用来处理其他类型的请求(如 POST)。
  • 存在潜在的安全风险,如果请求的第三方服务器不可信,可能会执行恶意的 JavaScript 代码。

Portal认证

定义

Portal认证通常也称为Web认证,一般将Portal认证网站称为门户网站。用户上网时,必须在门户网站进行认证,如果未认证成功,仅可以访问特定的网络资源,认证成功后,才可以访问其他网络资源。

优点

  • 一般情况下,客户端不需要安装额外的软件,直接在Web页面上认证,简单方便。
  • 便于运营,可以在Portal页面上进行业务拓展,如广告推送、企业宣传等。
  • 技术成熟,被广泛应用于运营商、连锁快餐、酒店、学校等网络。
  • 部署位置灵活,可以在接入层或关键数据的入口作访问控制。
  • 用户管理灵活,可基于用户名与VLAN/IP地址/MAC地址的组合对用户进行认证。

Drcom哆点认证系统漏洞

BJTU和众多高校一样,web上网认证用的也是哆点认证系统,这套系统问题还挺多的,跟别人学到不少

https://github.com/Zaxk1337/Eportalcutdown

https://github.com/Zaxk1337/DrcomGoturid

底层代码(

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>视频播放页面</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f4f4f4;
            margin: 0;
            padding: 0;
            display: flex;
            align-items: center;
            justify-content: center;
            height: 100vh;
            flex-direction: column;
        }

        #loading {
            display: flex;
            align-items: center;
            justify-content: center;
            background: #fff;
            padding: 20px;
            border-radius: 10px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
        }

        #loading .spinner {
            border: 4px solid rgba(0, 0, 0, 0.1);
            border-left-color: #09f;
            border-radius: 50%;
            width: 40px;
            height: 40px;
            animation: spin 1s linear infinite;
        }

        @keyframes spin {
            to { transform: rotate(360deg); }
        }

        #message {
            margin-left: 10px;
            font-size: 16px;
            color: #555;
        }

        #video-container {
            display: none;
            width: 100%;
            max-width: 800px;
            background: #000;
            border-radius: 10px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
            overflow: hidden;
        }

        iframe {
            width: 100%;
            height: 450px;
            border: none;
        }
    </style>
</head>
<body>
    <div id="loading">
        <div class="spinner"></div>
        <div id="message">检测中,请稍候...</div>
    </div>

    <div id="video-container">
        <iframe src="//player.bilibili.com/player.html?isOutside=true&aid=928861104&bvid=BV1uT4y1P7CX&cid=287639008&p=1" 
                allowfullscreen="true"></iframe>
    </div>

    <script>
        // 设置超时时间(5秒)
        let timeoutHandle = setTimeout(() => {
            document.getElementById('message').textContent = '请求超时,请使用校园网访问。';
            document.getElementById('loading').style.backgroundColor = '#f8d7da';
            document.getElementById('message').style.color = '#721c24';
        }, 5000);

        // 定义 JSONP 回调函数
        function jsonpReturn(data) {
            clearTimeout(timeoutHandle);
            
            if (data && data.result === 1) {
                // 显示视频,隐藏加载动画
                document.getElementById('loading').style.display = 'none';
                document.getElementById('video-container').style.display = 'block';

            } else {
                document.getElementById('message').textContent = '无法获取用户信息,请确认您的网络连接。';
                document.getElementById('loading').style.backgroundColor = '#f8d7da';
                document.getElementById('message').style.color = '#721c24';
            }
        }

        // 动态创建 script 标签来请求 JSONP 数据
        const script = document.createElement('script');
        script.src = 'https://login.bjtu.edu.cn:802/eportal/portal/online_list?callback=jsonpReturn'; // 最核心的部分就是测试这个链接通不通,可以顺带写点php把这个返回数据存到服务器上😋
        document.body.appendChild(script);
    </script>
</body>
</html>

2024年11月2日更新:该漏洞疑似已被修复(?接口时通时不通

被修复了什么的,那种事情不要啊😫

这只是一个校园网环境检测示例...你可以用来让非校园网环境的人看不到你的网页,只能做到这些🤫