色情資源引發的百度網盤之戰

nmask· 2019-09-12
本文來自 nmask ,作者 nmask

image.png

事情的起因是這樣的,由于我想找幾部經典電影欣賞欣賞,于是便向某老司機尋求資源(我備注了需要正規視頻,絕對不是他想的那種資源),然后他丟給了我一個視頻資源網站,說是比較有名的視頻資源網站。我信以為真,便激動地點開尋求經典電影,于是便引出了一段經典的百度網盤之戰。

免責申明:文章中的工具等僅供個人測試研究,請在下載后24小時內刪除,不得用于商業或非法用途,否則后果自負,文章出現的截圖只做樣例演示,請勿非法使用


先來看下這個視頻網站的截圖:

image.png

不得不說,這是一個正規的網站,正規的視頻,只是看著標題的我想多了而已。
懷著滿滿的求知欲,我點開了鏈接,并在網頁下方看到了視頻資源鏈接。

image.png

  這里有2種資源,一種是百度網盤,另一種是迅雷種子,不得不說這個網站還是比較良心,相較于只發圖不留種的某些網站。按照正常邏輯,此時我應該點開資源地址靜靜地欣賞起來(不對,其實我不是那樣的人),因此我選擇默默地將資源添加到網盤收藏。看到網盤又多了幾部佳作,心情頓時爽了很多,但僅僅添加幾部作品并沒有滿足我的收藏欲望,于是我便開始探索如何快速將視頻資源自動添加到百度網盤,也由此引發了我對于百度網盤的一系列斗爭。

戰爭序幕

首先通過觀察該網站url構成,以及網頁源碼組成,我決定采用爬取的方式采集資源鏈接地址。
網頁截圖:

image.png

該過程并沒有遇到很大的問題,我采用了python+協程的方式進行采集,很快便獲取了一部分資源地址:
百度網盤資源地址:

image.png

寫完采集數據腳本,采集完部分數據已是晚上11點,原本應該洗洗睡了,然而技術探索的力量鼓舞著我繼續前行。目前資源地址都有了,然而對于百度網盤資源,仍然需要一一點開,然后添加到我的網盤,此步驟太耗費精神,因此我決定繼續挖掘自動添加資源到百度網盤的方法。

注意:以下內容是本文的重點技術內容,關乎著我與百度網盤一戰的最終結局,請勿走開,精彩繼續。

終極之戰

首先我通過抓包,查看源碼,審查元素等方式分析了百度分享頁面的特征,判斷其是否適合爬蟲方式。

image.png

在經過一系列測試之后,我發現雖然過程有點曲折,但還是可以用爬蟲的方式實現自動化的添加資源到網盤。

要實現這一技術,我總結了以下幾點流程:

  • 獲取用戶cookie(可以手動登錄然后抓包獲取)

  • 首先爬取如:http://pan.baidu.com/s/1o8LkaPc網盤分享頁面,獲取源碼。

  • 解析源碼,篩選出該頁面分享資源的名稱、shareid、from(uk)、bdstoken、appid(app_id)。

  • 構造post包(用來添加資源到網盤),該包需要用到以上4個參數+cookies。

獲取cookie

抓取cookie可以用很多工具,我用了火狐的Tamper插件,效果如下:
獲取登錄的數據包:

image.png

查看登錄發送的請求包,發現有賬號密碼,當然我們這里需要的是cookie,可以在response中查看到。

image.png

cookie的格式如下:

BAIDUID=52C3FE49FD82573C4ABCEAC5E77800F6:FG=1;
BIDUPSID=52C11E49FD82573C4ABCEAC5E778F0F6;
PSTM=1421697115; PANWEB=1; Hm_lvt_7a3960b6f067eb0085b7196ff5e660b0=1491987412; Hm_lpvt_7a3960b6f067eb0085b7f96ff5e6260b0=1491988544;
STOKEN=3f84d8b8338c58f127c29e3eb305ad41f7c68cefafae166af20cfd26f18011e8;
SCRC=4abe70b0f9a8d0ca15a5b9d2dca40cd6;
PANPSC=16444630683646003772%3AWaz2A%2F7j1vWLfEj2viX%2BHun90oj%2BY%2FIsAxoXP3kWK6VuJ5936qezF2bVph1S8bONssvn6mlYdRuXIXUCPSJ19ROAD5r1J1nbhw55AZBrQZejhilfAWCWdkJfIbGeUDFmg5zwpdg9WqRKWDBCT3FjnL6jsjP%2FyZiBX26YfN4HZ4D76jyG3uDkPYshZ7OchQK1KQDQpg%2B6XCV%2BSJWX9%2F9F%2FIkt7vMgzc%2BT;
BDUSS=VJxajNlVHdXS2pVbHZwaGNIeWdFYnZvc3RMby1JdFo5YTdOblkydkdTWlVmUlZaSVFBQUFBJCQAAAAAAAAAAAEAAAA~cQc40NLUy7XEwbm359PwABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFTw7VhU8O1Yb

由于此cookie涉及到個人賬號,因此我做了改動處理,但格式應該是一樣的。

訪問百度資源分享頁面

請求頁面如:http://pan.baidu.com/s/1o8LkaPc
獲取cookie以后,可以在訪問百度資源分享頁面時,在headers里面寫入cookie值,并使用該cookie登錄,期間我也失敗過幾次,原因還是需要加上其他header參數(如果不加cookie參數,返回的結果將是”頁面不存在”)。
  請求成功之后,我們可以在源碼中找到一些我們需要的內容,比如頁面分享資源的名稱、shareid、from(uk)、bdstoken、appid(app_id)值。

構造添加資源POST包

首先看下post包的構造:

POST https://pan.baidu.com/share/transfer?shareid=2337815987&from=1612775008&bdstoken=6e05f8ea7dcb04fb73aa975a4eb8ae6c&channel=chunlei&clienttype=0&web=1&app_id=250528&logid= HTTP/1.1
Host: pan.baidu.com
Connection: keep-alive
Content-Length: 169
Accept: */*
Origin: https://pan.baidu.com
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: https://pan.baidu.com/s/1kUOxT0V?errno=0&errmsg=Auth%20Login%20Sucess&&bduss=&ssnerror=0
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6
Cookie:
filelist=["/test.rar"]&path=/

在post包的url中有一些參數,填寫我們獲取到的內容即可,還有一個logid參數,內容可以隨便寫,應該是個隨機值然后做了base64加密。

在post包的payload中,filelist是資源名稱,格式filelist=[“/name.mp4”],path為保存到那個目錄下,格式path=/pathname
cookie必須填上,就是之前我們獲取到的cookie值。

最終返回內容

{"errno":0,"task_id":0,"info":[{"path":"\/娛樂游戲\/三國全戰戰棋1.4六號版本.rar","errno":0}],"extra":{"list":[{"from":"\/娛樂游戲\/三國全戰戰棋1.4六號版本.rar","to":"\/三國全戰戰棋1.4六號版本.rar"}]}}

最終如果看到以上內容,說明資源已經成功添加到網盤,如果errno為其他值,則說明出現了錯誤,12代表資源已經存在。

戰績

花費了近1個小時之后,我寫完了代碼,其中大部分時間主要花費在調試與研究數據包上,期間遇到了很多坑,但最終還是解決了。
欣賞下程序運行時的快感吧:

image.png

百度網盤的戰果:

image.png

搞完這些,寫下這篇文章差不多快半夜12點了,視頻資源我只跑了一小部分,其余的明天繼續。(為了看點視頻容易嗎我?!)

項目GitHub地址:https://github.com/tengzhangchao/BaiDuPan

奔驰宝马机漏洞玩法