写在前面
本文以CMCC-EDU为例,实现自动认证。其他使用web认证的网络可以参考。
不想看原理解析,直接跳转到抄作业
抓包
连接网络,进入认证页面http://192.168.253.6/
打开dev-tools,监听网络连接,输入账号密码认证
查看第一条连接,得到以下信息
复制为curl,得到(已隐去隐私信息)
curl ^"http://192.168.253.6:801/eportal/?c=Portal^&a=login^&callback=dr1003^&login_method=1^&user_account=^%^2C0^%^2CXXXX^%^40cmcc^&user_password=XXXX^&wlan_user_ip=XXXX^&wlan_user_ipv6=^&wlan_user_mac=XXXX^&wlan_ac_ip=192.168.253.5^&wlan_ac_name=^&jsVersion=3.3.2^&v=7455^" ^
-H ^"Accept: */*^" ^
-H ^"Accept-Language: zh-CN,zh;q=0.9,ja;q=0.8^" ^
-H ^"Connection: keep-alive^" ^
-H ^"Cookie: PHPSESSID=XXXX^" ^
-H ^"Referer: http://192.168.253.6/^" ^
-H ^"User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0^" ^
--insecure
分析
提取可能的关键参数
user_account
user_password
wlan_user_ip
wlan_user_mac
Cookie
经测试,关键参数及格式如下
user_account=,0,学号@cmcc
user_password=密码
wlan_user_ip=ip地址
最简的curl命令如下
curl "http://192.168.253.6:801/eportal/?wlan_ac_ip=192.168.253.5&c=Portal&a=login&callback=dr1003&login_method=1&user_account=,0,${学号}@cmcc&user_password=${密码}&wlan_user_ip=${ip地址}"
并且最终获得授权的设备ip为curl命令中wlan_user_ip参数的ip,与发包ip无关
应用(抄作业)
至此,便可以配合ping命令检测网络,ip命令获取ip,来实现自动认证
完整代码
#!/bin/sh
#检测网络
check() {
if ping -c 1 -W 5 8.8.8.8 > /dev/null 2>&1;
then
return 0
else
return 1
fi
}
#认证
auth() {
#获取ip
ip=$(ip addr show CMCC | grep "inet " | awk '{print $2}' | cut -d/ -f1)
#学号
user=""
#密码
pwd=""
#记录日志
echo $ip >> auth-cmcc.log
#认证
curl "http://192.168.253.6:801/eportal/?wlan_ac_ip=192.168.253.5&c=Portal&a=login&callback=dr1003&login_method=1&user_account=,0,${user}@cmcc&user_password=${pwd}&wlan_user_ip=${ip}" >> auth-cmcc.log
}
#判断是否能联网,若不能则进行认证
if ! check; then
auth
fi
利用cron实现自动执行
#7:00到22:59每分钟执行一次
* 7-22 * * * /path/to/auth-cmcc.sh