GiWiFi 分析
GiWiFi是由上海寰创网络科技有限公司基于wifidog项目开发的一套网关管理系统, 通常被应用于校园网行业.
本文将会展示我对其认证机制的理解和主要api的分析过程.
如有错误, 敬请指正
由于GiWiFi是基于wifidog项目的, 所以大致流程也差不多
- 用户访问网络,通过iptables将未认证的用户dnat到wifidog进程,wifidog通过307报文将用户重定向到认证服务器
- 用户打开认证服务器登录页面,输入用户名密码,发送认证请求
- 认证成功的话服务器会发送302报文,携带token信息重定向到wifidog页面。认证失败的话会返回失败页面
- 用户携带token信息向wifidog发起认证请求,wifidog再向认证服务器发起请求,认证成功后授权,并将用户重定向到成功页面
- wifidog会定时向认证服务器发送保活消息(相当于心跳)
- 当用户主动请求下线后,wifidog此时并没有下线
- 当wifidog再次发起保活请求时,认证服务器会告诉它用户已下线,此时wifidog会将用户下线
当设备连接上GiWiFi之后, 若处于未认证状态时, 将会把任意URL重定向至同一页面
如对http://test.gwifi.com.cn/
进行一次GET请求则会, 返回如下页面:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Loading ...</title>
<script type="text/javascript">
delayURL("http://172.21.1.1:8062/redirect?oriUrl=http://www.baidu.com");
function delayURL(url) {
window.top.location.href = url;
}
</script>
</head>
<body>
<div></div>
</body>
</html>
从中可以得到delayURL("<URL>");
当中的<URL>
便是浏览器会自动跳转的认证页面, 其中的host
与port
信息将用于后面的操作
如此时已认证或者未连接GiWiFi将会返回
it works!
但是此自动获取网关的方式不适用于已认证后的情景!
windows: 使用ipconfig
, arp
等命令得到网关
类unix: 使用ip
, arp
等命令得到网关
但此种方式对于多网卡用户来说并不准确!
在上节中我们已经通过几种方法, 获得了网关信息
接着对网关再进行一次GET请求, 将会得到此页面
通过分析可得获取终端信息的接口
function initData(){
//获取终端信息
var url = "//"+document.domain+"/getApp.htm?action=getAuthState";
//add:os type
if (isiOS) url += "&os=ios";
if (isAndroid) url += "&os=android";
if (isWinPC) url += "&os=windows";
if (isMac) url += "&os=mac";
if (isLinux || isUbuntuExplorer()) url += "&os=linux";
......
再接着对/getApp.htm?action=getAuthState&os=android
进行一次GET请求可得:
{"resultCode":0,"data":"{\"app_url\":\"http:\/\/172.21.1.2\/gbapp\/20200729\/giwifi-2.4.1.3.apk\",\"auth_state\":1,\"online_time\":0,\"redirect_url\":\"http:\/\/login.gwifi.com.cn\/cmps\/admin.php\/api\/login\/?gw_address=172.21.1.2&gw_port=8060&gw_id=GWIFI-luoyangligong2&ip=10.19.100.204&mac=20:f4:78:0b:4a:f9&url=&apmac=&ssid=&jump=account\",\"app_download_switch\":1,\"web_auth_switch\":0,\"custom_tips\":\"\u6709WiFi\u7684\u5730\u65b9\uff0c\u5c31\u662f\u5bb6\u56ed\"}"}
-
其中
app_url
的值代表客户端下载链接由接口的&os
值决定 -
而
auth_state
的值为登陆状态, 如1
代表了未登陆 -
redirect_url
的值为之后要进行真正验证的URL地址, 如GiWiFi开启了浏览器验证
, 则最终会到此页面进行认证. 该对象在已认证情况下不会出现
非常感谢他们的文章在我一筹莫展的时候, 为我提供了许多启发, 不分先后顺序...
GiWiFI校园网认证过程分析与模拟登录- @nocilol
记一次“GiWiFi”的渗透过程 - @泽同学
wifidog认证流程(图文版) - 佐须之男
powered by icepie