承接上一篇貼子的后續(xù),這次成功完成了預(yù)想功能.
其實(shí)本來對(duì)學(xué)校的教務(wù)系統(tǒng)已經(jīng)沒什么興趣了,但是前兩天從吾愛上面看到一篇帖子,在post登錄后獲取自己的成績(jī)直接對(duì)接短信平臺(tái),實(shí)現(xiàn)每當(dāng)有新成績(jī)公布的時(shí)候可以直接短信通知自己.這一下就又激起了我的興趣,于是又掉回頭來搞它.
不得不說我們這青果的教務(wù)管理系統(tǒng)雖然在加密程度上并不高只有前端加密,但是在請(qǐng)求數(shù)據(jù)的時(shí)候卻麻煩的很.
在上一篇文章中我剛剛把前端加密摸清楚以后嘗試著取post登錄,但是返回的卻全都是亂碼.這時(shí)候看看協(xié)議頭瞬間明了,不知道是青果都這樣還是只有我們學(xué)校這樣,網(wǎng)站在傳遞數(shù)據(jù)時(shí)采用了GZIP壓縮.
而且我還發(fā)現(xiàn)前文提到的SessionID在協(xié)議頭中也有提交.其實(shí)在整個(gè)網(wǎng)站中不管是post包還是get包中提交信息的作用我發(fā)現(xiàn)并不大,主要的識(shí)別用戶憑據(jù)反而是請(qǐng)求協(xié)議頭里面的內(nèi)容.提交的信息里面的參數(shù)其實(shí)大多都是一看就能猜到具體意義的.
回歸正題,經(jīng)過網(wǎng)頁(yè)解壓后的數(shù)據(jù)中可以很清楚的看到錯(cuò)誤提示---驗(yàn)證碼錯(cuò)誤.
既然找到了真正的錯(cuò)誤原因,那么下一步的方向就很明確了.通過反復(fù)比較網(wǎng)頁(yè)源碼中的加密方式與自己的代碼,基本確定在加密方面并沒有問題.然后進(jìn)一步過抓包驗(yàn)證(抓提交登錄的包看里面的驗(yàn)證碼加密后的數(shù)據(jù)與自己的代碼加密后的數(shù)據(jù)進(jìn)行對(duì)比)確定加密一定是沒有問題的.
前文曾提到過,當(dāng)時(shí)猜測(cè)cookies中的SessionID作為系統(tǒng)識(shí)別用戶的識(shí)別憑證,經(jīng)過多次試驗(yàn)(用其他瀏覽器抓包發(fā)現(xiàn)SessionID不同,且IP不被作為識(shí)別標(biāo)記因?yàn)橥辉O(shè)備不同瀏覽器的SessionID的值也是不同的)發(fā)現(xiàn),這一猜想是正確的.
這樣一來問題就變得非常簡(jiǎn)單了,驗(yàn)證碼錯(cuò)誤的原因很明顯就是因?yàn)橛脩糇R(shí)別身份的問題,我在get驗(yàn)證碼圖片時(shí)僅僅是get獲取圖片并沒有附上SessionID,所以系統(tǒng)也就將獲取的驗(yàn)證碼和我登錄時(shí)的SessionID區(qū)分開,判斷為不同人在進(jìn)行操作.用別人的驗(yàn)證碼進(jìn)行驗(yàn)證怎么可能成功呢?當(dāng)我包get數(shù)據(jù)時(shí)的請(qǐng)求頭附上我的SessionID時(shí)問題解決了,進(jìn)一步證實(shí)了SessionID是識(shí)別用戶的識(shí)別憑證這一猜想.
當(dāng)把一切梳理修改完成之后,再次對(duì)程序進(jìn)行調(diào)試,OK,登錄成功但是隨之而來的第二個(gè)問題也出現(xiàn)了,盡管已經(jīng)登錄成功,但是在獲取成績(jī)時(shí)卻提示沒有權(quán)限.仔細(xì)檢查檢查,在get時(shí)也已經(jīng)附上了登陸成功的SessionID.但是就是無法獲取.
返回瀏覽器從新抓包.我們的教務(wù)管理系統(tǒng)在檢索成績(jī)時(shí)一共發(fā)了兩個(gè)包一個(gè)是post包一個(gè)是get獲取成績(jī)的包.在第一次試驗(yàn)時(shí)因?yàn)榘l(fā)現(xiàn)成績(jī)是直接get過來的而post包的返回?cái)?shù)據(jù)是一個(gè)標(biāo)題也就沒怎么在意,回國(guó)頭來發(fā)現(xiàn)這個(gè)post包里面提交的數(shù)據(jù)幾乎和get包提交的一樣,而且get包中與這個(gè)post包中有同樣的提交參數(shù)并且那些提交參數(shù)在試驗(yàn)中發(fā)現(xiàn)修改以后對(duì)返回的成績(jī)并沒有影響.
看看這個(gè)所發(fā)送的文件名,_rpt,巧了get包里面也有一個(gè)參數(shù)也叫rpt.
最后經(jīng)過多次試驗(yàn)發(fā)現(xiàn)在post包中的sj參數(shù)便是get包中的rpt參數(shù),兩者必須一致,并且必須先post然后再get才能獲取成績(jī).
總結(jié):在抓包時(shí)一定要不放過每一個(gè)小細(xì)節(jié),不止是cookies消息頭是非常重要的一環(huán),必要時(shí)要耐下心來閱讀網(wǎng)頁(yè)的源碼也許你能在里面找到意想不到的收獲,比如我們學(xué)校的教務(wù)系統(tǒng)是采用GBK編碼而不是UTF-8,這直接導(dǎo)致了在抓包發(fā)包時(shí)很多的內(nèi)容被encoding.
最后關(guān)于短信平臺(tái)的話可以自己在網(wǎng)上找一找,想要實(shí)現(xiàn)一開頭所說的每當(dāng)有新成績(jī)發(fā)布就自動(dòng)短信通知自己的話你還必須擁有一臺(tái)屬于自己的24h開機(jī)的服務(wù)器才行,短信大概是20元200條的樣子.單人用的話成本蠻高的,不過如果想做成自己服務(wù)器的附屬功能也還蠻不粗,看自己的實(shí)際情況吧.