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都解密出來。但感受整個過程都記下來,但願對讀者有所幫助。

相關文章
相關標籤/搜索