Skip to content
This repository has been archived by the owner on Dec 31, 2022. It is now read-only.

GiWiFi 分析

Tea edited this page Nov 17, 2020 · 3 revisions

前言

GiWiFi是由上海寰创网络科技有限公司基于wifidog项目开发的一套网关管理系统, 通常被应用于校园网行业.

本文将会展示我对其认证机制的理解和主要api的分析过程.

如有错误, 敬请指正

认证机制

由于GiWiFi是基于wifidog项目的, 所以大致流程也差不多

基本流程

用户上线

  1. 用户访问网络,通过iptables将未认证的用户dnat到wifidog进程,wifidog通过307报文将用户重定向到认证服务器
  2. 用户打开认证服务器登录页面,输入用户名密码,发送认证请求
  3. 认证成功的话服务器会发送302报文,携带token信息重定向到wifidog页面。认证失败的话会返回失败页面
  4. 用户携带token信息向wifidog发起认证请求,wifidog再向认证服务器发起请求,认证成功后授权,并将用户重定向到成功页面

保活和下线

  1. wifidog会定时向认证服务器发送保活消息(相当于心跳)
  2. 当用户主动请求下线后,wifidog此时并没有下线
  3. 当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>便是浏览器会自动跳转的认证页面, 其中的hostport信息将用于后面的操作

如此时已认证或者未连接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认证流程(图文版) - 佐须之男