由于每次打开电脑都要手动的登录校园网,导致很麻烦,所以写了一个爬虫来模拟浏览器自动登录校园网的功能
1.使用Burpsuit对校园网登录界面进行抓包分析
简介:burpsuite
是一款渗透工具,运行环境是Java
,所以需要先配置,主要可以用来对HTTP
协议的工具包进行分析,也可以扫描网站的漏洞,接下来我们就用它来对校园网登录界面进行一个抓包。
1.1 设置浏览器代理
代理,就是拦截到浏览器的前面将数据包截取下来。
1.2 抓包分析
浏览器输入网址http://10.10.1.6/srun_portal_pc.php?ac_id=1&&userurl=http://www.lzu.edu.cn
然后打开burpsuite
,点击forward
(前进),就是讲刚才浏览器进行的动作,发送的包截取下来。
我们发现post
一个表单到auth_action.php
进行处理,在下面cookie
里面有一个login
还和上面一致。我们将报文复制一份进行分析,
POST /include/auth_action.php HTTP/1.1
Host: 10.10.1.6
Content-Length: 116
Accept: */*
Origin: http://10.10.1.6
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://10.10.1.6/srun_portal_pc.php?ac_id=1&&userurl=http://www.lzu.edu.cn
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: login=bQ0qQMxJvKa38joL2%252FjcHkC%252BmsG82yAhTQz7gmzQkugXpBZMrQUGiPHbG7NW34vDounugHSLx5A8mO4foZDYk3gvuzEOm8oE2SVDxfjaQLfPK6S3nHNRFaSa5KKhD%252FBgYozWIuXKWglZ6pYHmbs0l2KSqBUsQnuEp%252Fth0bbc%252BjfILH2xC501DX3AWRxf9c4IHUiuZZvZAhRsJGqlP9ypVRn9Ii6bTg%253D%253D; language=en; login=bQ0qQMxJvKa38joL2%252FjcHkC%252BmsG82yAhTQz7gmzQkugXpBZMrQUGiPHbG7NW34vDounugHSLx5A8mO4foZDYk3gvuzEOm8oE2SVDxfjaQLfPK6S3nHNRFaSa5KKhD%252FBgYozWIuXKWglZ6pYHmbs0l2KSqBUsQnuEp%252Fth0bbc%252BjfILH2xC501DX3AWRxf9c4IHUiuZZvZAhRsJGqlP9ypVRn9Ii6bTg%253D%253D
Connection: close
action=login&username=********&domain=@cernet&password={B}MTk5NjEy&ac_id=1&user_ip=&nas_ip=&user_mac=&save_me=1&ajax=1
下面是post
出去的表单数据,username
通过猜测肯定是用户名,然后password
是密码,但是发现这个是一个加密的报文,我们来打开firebug
查看下网页的javascript
代码,发现是base64
加密,save_me
字段应该是是否记住密码,如果点击了记住密码就是1
否则就是0
,接下来我们验证一下这个密码字段是否是base64
.
选中password
字段,然后点击send to decoder
,decoder
是burp
的一个编码解码模块,可以进行解码
发现密码和输入的一致但是前面加了一个{B}
,可能有什么标志位,接下来,我们继续对这个包进行分析,我们将它发送到repeater
模块(中继器模块)可以对包进行修改。右击选中send to repeater
选择Go
,发送包,看返回结果是什么
login_ok
说明我们已经模拟浏览器登陆成功,但是我想测试下去掉几个无关紧要的字段是否也可以登录呢。经过repeater
发包测试发现只有这几个字段是必须的。
经过测试只有request
是如上的请求报文,我们就可以登陆成功,接下来我们用python
模拟这个请求发送数据。
以下是代码:
import urllib.request
url="http://10.10.1.6/include/auth_action.php"
password="{B}MTk5NjEy"
username="********"
ac_id='2'
save_me='1'
ajax='1'
cookie="login=bQ0qQMxJvKa38joL2%252FjcHkC%252BmsG82yAnZjIv2aOiNLgdcFisQOPGduNfpXrq1m1kMaO3V9pmNJPwW7CiRVsfuOiIH7CP%252BlGaKj03wx3EcoSa1nagEF2HgnfjJcmJl6udXJxskZT0T9dmFgWtrhEObjLeL%252B05%252B3BB0l8ay8RfSeheGn%252F6p7YnxP46H43utiPMSxuZEl5YwF0dIA%253D%253D; language=en; login=bQ0qQMxJvKa38joL2%252FjcHkC%252BmsG82yAnZjIv2aOiNLgdcFisQOPGduNfpXrq1m1kMaO3V9pmNJPwW7CiRVsfuOiIH7CP%252BlGaKj03wx3EcoSa1nagEF2HgnfjJcmJl6udXJxskZT0T9dmFgWtrhEObjLeL%252B05%252B3BB0l8ay8RfSeheGn%252F6p7YnxP46H43utiPMSxuZEl5YwF0dIA%253D%253D"
postdata=urllib.parse.urlencode({
"username":username,
"password":password,
"ac_id":ac_id,
"save_me":save_me,
"ajax":ajax,
"action":"login"
}).encode('utf-8')
req=urllib.request.Request(url,postdata)
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36')
req.add_header("Cookie",cookie)
data=urllib.request.urlopen(req).read()
print(data)