該文章主要提供交流學習使用,請勿利用其進行不當行爲!
如本篇文章侵犯了貴公司的隱私,請聯繫我立刻刪除!
個人博客:http://www.feastawlisao.com/
歡迎關注個人公衆號:pythonORjs
今天我們來研究一下新浪微博的參數加密,也來做一下模擬登陸,今天全方位詳細講解撒。
這裏我們登陸的網址爲https://login.sina.com.cn/signup/signin.php,因爲新浪的賬號各個板塊是互通的,登錄後獲取cookie就能訪問新浪微博了,至於抓包工具,這裏就暫時用不到了,推薦用charles,因爲市面上流行的都是Fiddler,我感覺不太順手,個人喜好哈,進入正題。
這裏我們打開開發者工具,然後輸入賬號,密碼,密碼先輸入錯誤的,,方便我們更好的抓包。
這裏我們可以看到,返回兩個url,我們先研究第一個url。參數裏各種莫名其妙的東西,無大礙,那我們就先研究一下,entry,callback,rsakt,client,當前都是固定的,_是時間戳,su是什麼呢,我們看一下,可能對於經常玩js的人一眼就看出來了,su參數是base64編碼。
這裏就不在搜索su參數在js裏面怎麼實現的了,因爲這個參數太多了,這裏直接貼出來js代碼。
su參數知道怎麼生成後,我們用python代碼進行get請求,如下,我們返回的參數都先取出來,以備後續使用。爲什麼我沒取出來完,啊哈哈哈哈,因爲我已經知道哪些有用了。。
接着我們看下面請求的url,分析它的參數,然後一看一大堆參數,不要慌,問題不大,慌也沒用,我們分析一波,此處講重要的參數,su參數不就是我們的用戶名,然後base64的結果,servertime還記得嗎??上一個url返回的參數,nonce,rsaku也是如此。sp參數就是密碼,經過了一系列的加密,perlt是隨機生成的數字。好了,分析完,那我們找sp參數的生成過程吧。
這裏有一個坑,因爲,這裏有一個參數,pwencode=rsa2,告訴我們密碼是rsa加密生成的,然後再看前面返回的publickey值,剛好符合rsa的加密規則,然後就用python寫rsa直接加密,然後發現,涼涼,還是錯的,爲什麼呢,聽我一一道來,哈哈哈哈哈哈哈哈。
接下來我們開始搜索參數,然後發現,sp參數多的超乎我們的想象,,,太多了。
這裏可以這樣搜,因爲加密的是密碼,我們可以搜password,passwd,pwd等等,也可以搜密碼輸入框的id標籤,或者class標籤。
此處我們搜索發現,在ssologin.js裏面發現可疑的地方。password=rsa,nonce,servertime等等參數,那我們就試一下。
在這裏有個if判斷語句,注意一下。
我們開始下上斷點,開始調試,下完斷點後,點擊登陸按鈕。
然後程序會斷下來,等待下一步操作。具體操作可搜索谷歌調試。
然後一步一步執行,看到rsaPubkeys,這個key是不是很眼熟呀,就是第一個請求url返回的pubkey,關於rsa加密的原理可自行百度。
我們接着往下調試,password 生成原理就是, encrypt函數裏面傳入三個參數,如下圖,servertime,nonce字符串相加,中間由空格\t隔開,然後加上\n換行,再加上原始的password,就是沒加密之前的密碼。
此處只用python語言實現,如需js實現,可留言。因爲python實現rsa加密有多種方法,此處只演示一種。有人說,爲什麼和我第一次加密的結果不一樣,因爲rsa是一直都在變化的,具體搜索rsa加密原理。
此處請特別注意,有兩點。
1.post提交參數的時候,瀏覽器是沒有url這個參數的,提交必須加上,要不然無法完成二次驗證。
微博有二次驗證,注意,注意,特別注意,別以爲post成功後就能獲取cookie登陸了,需要二次驗證。
data全部參數如下:
data = {
'entry': 'account',
'gateway': '1',
'from': 'null',
'savestate': '30',
'useticket': '0',
'pagerefer': '',
'vsnf': '1',
'su': su,
'service': 'account',
'servertime': servertime,
'nonce': nonce,
'pwencode': 'rsa2',
'rsakv': rsakv,
'sp': sp,
'sr': '1920*1080',
'encoding': 'UTF-8',
'cdult': '3',
'domain': 'sina.com.cn',
'prelt': random.randint(1, 100),
'url': 'https://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack',
'returntype': 'TEXT',
'door': '', # 驗證碼,小號需要填寫,,,小號還需要二次點觸驗證
}
必須添加url這個參數,要不然無法返回,ticket參數,請注意。
二次驗證所需要的參數如下,ticket參數就是上一步提交post返回的參數,ssosavestate,生成方式在js裏面,,但是根據實驗,可以寫成任意時間戳。_是時間戳。然後提交請求
提交成功後,獲取其cookie就行了,然後攜帶cookie進行訪問數據。
然後你就會發現一個更重要的問題,就是,成功了,
本次分享到處結束,,如需需要js代碼,或者python完整代碼,請留言!謝謝!