urlib2和requests模拟登录查询MD5

0x00 原由:javascript

 

网上看帖子的时候有人推荐了一个基于GPUMD5解密软件Barswf,帖子说解密速度很快,无聊就荡了一份下来试验了一下。(分享一下软件:连接: http://pan.baidu.com/s/1jGVZruQ 密码: 8eay,这是个64的windows版本)试了一下对于8位及一下的MD5加密解密速度仍是很快的,用本身的渣渣电脑也能跑到1700Mhash/s,一个8位的 小写字母加数字的MD5很快就能跑出来。html

 

使用语法规则以下:java

 

-h  5216b5ad6cd0c6265bfa11c19e93ee18-c 0aA~   设置密文可能包含的字符串类型0  表示纯数字例如:1234567890a  表示纯字母例如:abcdefghigklmnopqrstuvwxyzA  表示大写字母~ 表示可打印的特殊字符example:barswf_cuda_x64.exe -h 350c9d901b7f1c73a481e240ec1b7c0b -c  a(纯小写)         barswf_cuda_x64.exe -h 30e0ae2b52f3ff74f2de65a4573164f8 -c  0aA(大小写和数字混合)ajax

后来查了一下破解hash密码的有一个更专业的工具:hashcat,并且最近也开源了。也试了一下,惟一的好处是hashcat纯靠GPU,不像这个同样每次跑cpu都是满负荷的运转,渣渣本子扛不住。并且hashcat支持字典,以及其余各类形式的hash加密。总之就是hashcat更专业。有兴趣的同窗能够本身查一下。我就不在这详细描述了。数据库

 

回到正题,有了这个工具就想折腾点什么,因此想到了曾经被脱裤的那些网站的数据。而后就在网上找了一些数据库。比较感兴趣的就是小米论坛的库(原来也用太小米的手机,想找找本身的数据被泄密没)。json

 

简单一看密码后面跟了一个6位的数字,明显是加盐了。看来小米仍是比较良心的,不像csdn那样的明文数据库。(注:研究这些只是兴趣,并没有恶意,小米官方也就数据库泄露作了说明,全部泄露的数据的用户都已经被强制要求修改修改密码了,因此这些数据作作研究就行了,想干坏事仍是省省吧)windows

对于这种加盐的密码要想还原回去,首先得知道加盐的方式,并且加盐以后密码的长度最短也须要12位吧,原本想用本身电脑解密的,但一想一条都到猴年马月了,直接到cmd5网站解密,结果提示找到结果但要收费,收费就收费吧,准备充值的,但一看100起充,瞬间就放弃了。因而就寻找别的破解网站吧。最后发现了一个chaMD5的良心网站,注册以后能够免费查,就拿第一条为例吧cookie

密文:201e4a5117cf97f1ba83984c68a611d2:109027app

解密以后的明文:bcbe3365e6ac95ea2c0343a2395834dd109027 工具

能够看到盐值是直接追加到后面的,并且前面明显是通过MD5加密的,因此对前面一部分再次MD5解密

BCBE3365E6AC95EA2C0343A2395834DD : 222

解密出来明文是 222

 

既然知道加密方式了就想把全部的都解密出来玩玩啦。一条一条的解密?开什么玩笑,几百万弄死你也搞不完,因此咱们须要一个自动查询的程序,来解决手工查询的烦恼。

 

 

0x01 urlib2 && requests

 

 

chaMD5不须要验证码就能登陆,因此只须要登陆上去,得到cookie,而后每次查询的时候加上cookie就能查到结果。

首先提交查询确定是post请求,只要模仿网页中的post请求的格式替换其中的查询的加密的字符串就能获得查询结果。直接用wrieshark抓取post请求的数据包。由于只是用本身的帐号查询,因此就不用再去用cookiejar去获取cookie,直接把数据包中的cookie复制出来,而后替换其中cookie段便可。用来模拟post请求的话urllib2确定是最简单的。根据上述思路写好代码:

import urllib2

import cookielib

import json

 

#cookies = cookielib.CookieJar()

#opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookies))

#urllib2.install_opener(opener)

#req = urllib2.urlopen('http://www.chamd5.org/login.html')

#print req.read()

 

#f = opener.open('http://www.chamd5.org/HttpProxyAccess.aspx/ajax_login')

#f = opener.open('http://www.chamd5.org/login.html',)

 

 

data = "{'hash': '201e4a5117cf97f1ba83984c68a611d2','type': 'md5'}"

 

url = 'http://www.chamd5.org//HttpProxyAccess.aspx/ajax_me1ody'

headers = {'Host': 'www.chamd5.org',

               'Connection': 'keep-alive',

               'Content-Length': '58',

               'Accept': 'application/json, text/javascript, */*; q=0.01',

               'Origin': 'http://www.chamd5.org',

               'X-Requested-With': 'XMLHttpRequest',

               'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',

               'Content-Type': 'application/json; charset=UTF-8',

               'Referer': 'http://www.chamd5.org/login.html',

               'Accept-Encoding': 'gzip, deflate',

               'Accept-Language': 'zh-CN,zh;q=0.8',

               'Cookie':'***********'

}

 

#f = opener.open('http://www.chamd5.org/login.html',headers)

request = urllib2.Request(url,data,headers)

r = urllib2.urlopen(request)

 

html = r.read();

print html

print type(html)

s = list(html)

print len(s)

for line in range(286):

    s[line].encode("utf-8")

    #print line

print "end"

 

 

可是这种方法并不行,由于返回值是json对象,没法解析。为此纠结了2天,后来在网上找到有大神说requests更好用,因此改用requests。

代码以下:

import urllib2

import cookielib

import json

 

#cookies = cookielib.CookieJar()

#opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookies))

#urllib2.install_opener(opener)

#req = urllib2.urlopen('http://www.chamd5.org/login.html')

#print req.read()

 

#f = opener.open('http://www.chamd5.org/HttpProxyAccess.aspx/ajax_login')

#f = opener.open('http://www.chamd5.org/login.html',)

 

 

data = "{'hash': '201e4a5117cf97f1ba83984c68a611d2','type': 'md5'}"

 

url = 'http://www.chamd5.org//HttpProxyAccess.aspx/ajax_me1ody'

headers = {'Host': 'www.chamd5.org',

               'Connection': 'keep-alive',

               'Content-Length': '58',

               'Accept': 'application/json, text/javascript, */*; q=0.01',

               'Origin': 'http://www.chamd5.org',

               'X-Requested-With': 'XMLHttpRequest',

               'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64)  AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',

               'Content-Type': 'application/json; charset=UTF-8',

               'Referer': 'http://www.chamd5.org/login.html',

               'Accept-Encoding': 'gzip, deflate',

               'Accept-Language': 'zh-CN,zh;q=0.8',

               'Cookie':' ***********'}

 

#f = opener.open('http://www.chamd5.org/login.html',headers)

request = urllib2.Request(url,data,headers)

r = urllib2.urlopen(request)

 

html = r.read();

print html

print type(html)

s = list(html)

print len(s)

for line in range(286):

    s[line].encode("utf-8")

    #print line

print "end"

 

0x02 总结

虽然最后由于网站查询MD5须要消耗积分值,因此并不能把全部的MD5都解密出来。但感受整个过程都记下来,但愿对读者有所帮助。

相关文章
相关标签/搜索