一
某團(tuán) PASSWORD 參數(shù)網(wǎng)址如下:
aHR0cHM6Ly9wYXNzcG9ydC5tZWl0dWFuLmNvbS9hY2NvdW50L3VuaXRpdmVsb2dpbg==
下面的抓包的界面:
這里有三個(gè)參數(shù)是需求構(gòu)造的莽鸿,password枚赡,csrf(這個(gè)簡(jiǎn)單,從html中獲取即可)乘凸,h5Fingerprint。h5Fingerprint 以前的參數(shù)名是 token, 這個(gè)今天不演示良姆,有興趣的朋友可以去試試蚁堤。今天的主要是找到 password 的生成方式。
根據(jù)工具欄中的 Network 刽辙,找到 Initiator 選項(xiàng)欄窥岩,將鼠標(biāo)懸停在抓到包的那條請(qǐng)求上,出現(xiàn)如上圖宰缤。我們找到 ajax 請(qǐng)求的前面一個(gè) e, 點(diǎn)擊進(jìn)去
注意發(fā)現(xiàn)關(guān)鍵點(diǎn)颂翼,對(duì)象 o 有 url, post,data, 其中 data 就是 post 的參數(shù)慨灭,打上斷點(diǎn)朦乏,重發(fā)請(qǐng)求,如下:
e 里面的 password 已完成加密氧骤,往上追
定位到加密函數(shù) u.encrypt() , 而在加密之前對(duì)對(duì)象 u 進(jìn)行了u.setPublicKey(this.publicKey) 這一步呻疹。
二
地址:aHR0cDovL3d3dy5pYXBwc3RvZGF5LmNvbS8=
下面是瀏覽器抓包 Network 欄,和上面定位加密位置一樣筹陵,鼠標(biāo)懸浮在 Initiator 那一列
選擇 ajax 請(qǐng)求前面那個(gè)刽锤,點(diǎn)擊進(jìn)去之后如下:
很明顯的可以看到,前面代碼是獲取輸入的 password 值惶翻,并對(duì)其進(jìn)行 RSA 加密姑蓝,最后你可下個(gè)斷點(diǎn)將相關(guān)的代碼拿出來(lái)。
三
地址如下:aHR0cHM6Ly9sb2dpbi4xMDA4Ni5jbi9odG1sL2xvZ2luL2VtYWlsX2xvZ2luLmh0bWw=
根據(jù) password = , 快速定位到加密位置
在該位置打上斷點(diǎn)后進(jìn)入到加密函數(shù)吕粗,
熟悉的 setPublicKey(), 典型的 RSA 加密
四
地址如下: aHR0cDovL2kuYmFpZHUuY29tL3dlbGNvbWUv
抓包之后纺荧,根據(jù)登錄的請(qǐng)求,
如上圖所示,點(diǎn)擊進(jìn)去后宙暇,定位如下输枯,記得打上斷點(diǎn),
從頁(yè)面輸入框獲取 password 之后做了簡(jiǎn)單處理占贫,然后進(jìn)入到
baidu.url.escapeSymbol(e.RSA.encrypt(o)桃熄,其中 o 就是我們輸入的密碼
⌒桶拢可以看到函數(shù)名稱(chēng)等特征是 RSA 加密瞳收,我們可以點(diǎn)進(jìn)去查看
上面的代碼也能佐證我們的判斷,password 使用的 RSA 加密厢汹。
上述的四個(gè)案例都是 RSA 加密螟深,實(shí)際上只是找到加密的代碼位置,并沒(méi)有去和以前一樣扣代碼烫葬。也許你以前也遇到過(guò)很多類(lèi)似的案例界弧,然后扣了大半天也沒(méi)有扣出結(jié)果!結(jié)果即浪費(fèi)時(shí)間搭综,也沒(méi)有效果垢箕。其實(shí)遇到這種加密并不需要去扣代碼,因?yàn)榇蠖紨?shù)的 RSA 加密都是通用的兑巾,加密的算法都是一樣的条获。
很少有網(wǎng)站會(huì)去更改,就算就修改也只是對(duì)參數(shù)的輸入和加密后的輸出做了進(jìn)一步的處理闪朱。例如第四個(gè)案例月匣,對(duì) RSA 加密后的結(jié)果中某些字符進(jìn)行了簡(jiǎn)單的替換,baidu.url.escapeSymbol()
所以我們不要去扣代碼奋姿,直接用成熟的RSA加密即可!這里提供一個(gè) RSA 加密算法的 JS 代碼素标,https://github.com/travist/jsencrypt/blob/master/bin/jsencrypt.js 以后遇到類(lèi)似的 RSA 加密称诗,可以直接拿來(lái)用。
了解更多內(nèi)容头遭,煩請(qǐng)關(guān)注公眾號(hào) Python編程與實(shí)戰(zhàn)