csdn帳號密碼登錄剖析(模擬登錄)

  • 2019 年 10 月 6 日
  • 筆記

大綱

  • 前言
  • 分析加密參數
    • uaToken
    • webUmidToken
  • 發送模擬請求
  • 對比解決障礙
    • 瀏覽器發送
    • postman模仿
  • 小結
  • 編寫程式碼

前言

  • 很久以前研究過csdn的模擬登錄,記得那個時候的csdn登錄還是一個`form``表單,然後參雜著一些參數。使用遍歷input元素把表單各個參數拿下來。存下直接post即可登陸成功。
  • 前幾天再次看了下親愛的csdn。突然發現多了這連個參數。這就勾起了我的性趣和好奇心:我靠,就一年沒見,csdn也搞這麼一大串加密?並且以看兩種加密方式還不一樣哇?有點東西!
  • 下面就分享一下分析的過程!由於時間有限,只能每晚抽點時間研究,如果大家感覺不夠深入或者講的不好請諒解!

使用工具:

  • Google瀏覽器
  • postman發送請求調試
  • fidder抓包

分析加密參數

可以根據上圖分析得知:有uaToken 和webUmidToken兩個token。 分析參數肯定是要打斷點的,一般有直接搜索,查看js調用堆棧,和hook查找找到參數位置。我是利用搜索找參數。 分析前先做好一些預備工作,多發幾個請求,刷新頁面。你會發現:

  1. 不刷新頁面的話uaToken不會變化。
  2. webUmidToken每次都不一樣。
  3. 每次cookie不變。

uaToken

  • 查找uaToken發現這段程式碼比較詭異。打斷點debug。發現沒錯,這就是我們要找的!點擊F11,進入子函數查看發生了什麼。
  • 進去發現它執行e()函數。再次F11查看。
  • 通過校驗發現e函數其實就是一個加密函數,關鍵是它跟我們的核心數據(帳號、cookie、密碼等)無關,所以這個加密數據空有其架勢無作用。你可以保存一個直接一直使用一個(如果可逆後台可能會根據字元串進行校驗是否符合規則)。

webUmidToken

每次刷新都會發現他在變化,鑒於前面的token都沒啥作用,我大膽猜測,他也不影響登錄!就先不debug分析了。

實際上他對結果也是沒有影響的,這裡就不進行分析,先發送請求!

發送模擬請求

  • 通過瀏覽器的頭髮送請求資訊。你會發現:不管你怎麼模擬都是各種錯誤,要麼類型錯誤,要麼繁忙,要麼類型錯誤。(可以看得出csdn是java後台,個人感覺介面異常處理的還有問題。暴露方法了)

對比解決障礙

有時候瀏覽器太過於局限。用fidder找到其中不同之處。用瀏覽器和postman發送請求找到其中參數的不同之處。

瀏覽器發送

postman模仿

  • 你可以發現其中主要是格式區別,和部分頭資訊瀏覽器不顯示需要加上。然後發送請求檢驗!

小結

  1. 後來發現其實那兩個token,和cookie為空都沒有關係!
  2. cookie也沒有限制,在登錄時候根本不要cookie都可以。按理論來說應該進入頁面返回一組cookie,用這個cookie訪問登錄介面有效才行,顯然csdn沒有。
  3. 分析一波約等於白分析,登錄機制太簡單了。
  4. content-length別亂加,加錯了它後台校驗或出錯
  5. 也就是登錄著需要type,帳號密碼即可,其他設為空都行。要注意的就是參數發送的格式!raw文本。
  6. 以後見到類似先測試登錄,不能盲目分析。雖然能夠增加經驗,但是有點浪費時間。。像csdn這次就是。。啥都沒用。

編寫程式碼

思路:訪問登錄介面,用返回的cookie訪問我關注的人的文章!

import  requests  from bs4 import BeautifulSoup    url='https://passport.csdn.net/v1/register/pc/login/doLogin'  header={'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',          'referer':'https://passport.csdn.net/login',          'origin':'https://passport.csdn.net',          'content-Type':'application/json;charset=UTF-8',          'x-requested-with':'XMLHttpRequest',          'accept':'application/json, text/plain, */*',          'accept-encoding':'gzip, deflate, br',          'accept-language':'zh-CN,zh;q=0.9',           'connection': 'keep-alive'           ,'Host': 'passport.csdn.net'          }  data='{"loginType":"1","pwdOrVerifyCode":"你的密碼",'        '"userIdentification":"你的帳號","uaToken":"",'        '"webUmidToken":""}'  req=requests.post(url,data=data,headers=header)  cookies = requests.utils.dict_from_cookiejar(req.cookies)  res=req.text  print(res)  print(req.status_code)  print(cookies)    url2='https://blog.csdn.net/nav/watchers'  req2=requests.get(url2,cookies=cookies)  soup=BeautifulSoup(req2.text,'lxml')    print(soup.text)  

Tags: