由於好奇一直想試試模擬登陸,然后就把目標定在某所大學的登錄網站上
大至樣式就是這樣的
通過界面我們大致可以了解到請求可能會后username,password,驗證碼,記住用戶
接着使用burp進行抓包得:
可以通過post請求知道dlm就是uesrname,hexMd5是加密后的password(加密手段應該是MD5),cookie就是記住用戶
...等等,怎么沒有驗證碼,真奇怪,算了待會再看驗證碼把
通過瀏覽器中查看源碼,得:
我們看出來dlmm是原始密碼,而hexMd5是通過md5加密后的值
而后我的好奇心又回到了驗證碼上,源碼顯示:
哈哈哈,驗證碼居然在明面上,那簡直太簡單了,抓一下試試,代碼如下:
1 import re 2 def reg_html(html): 3 parttern = re.compile(r'<input type="hid.*') 4 yzm = parttern.findall(html) 5 return yzm
但結果也大失所望,抓到的value值為空,可能是我對前端知識不太了解,願意堅持看下去
發現這個驗證碼調用了一個js的generateMixed函數
找到這個函數 得:
大致看明白了,別的還好說,關鍵這個random就讓人沒法弄啊。苦惱想放棄.....回家!
在路上,我問了一個師哥,我說我的post請求里沒有驗證碼這是什么情況,他告訴我兩種情況:
1 驗證碼在只是在前端作為一個check,可以繞過
2 驗證碼可能和用戶密碼等參數分着發過去了
我不解,回去用fiddler又做了一次抓包,post的數據中確實沒有驗證碼,所以我猜想是第二種可能
於是我寫了個腳本進行驗證 代碼如下:
1 #!/usr/bin/env python 2 #coding:utf-8 3 4 import re 5 import requests 6 from bs4 import BeautifulSoup 7 import hashlib 8 9 URL = 'http://xxxxx.xxxxxx.edu.cn/login.login.action' #login_url 10 URL_p = 'http://xxxxx.xxxxxx.edu.cn/login.toStudentJsp.action?math=4636' #跳轉url,可以通過js找到 11 URL_p2 = 'http://xxxxxx.xxxxxx.edu.cn/stumiddle.jsp' #user_info_url 12 13 def md5Encode(string): 14 m = hashlib.md5() 15 m.update(string) 16 return m.hexdigest() 17 18 def post_html(url,url2,url3): 19 session = requests.Session() 20 headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1581.2 Safari/537.36'} 21 payload = {'dlm':'xxxxxxxxxxxxxxx', 22 'hexMd5':'%s'%md5Encode('xxxxxxxxxxxxxx'), 23 'cookie':'0' 24 } 25 session.post(url,data=payload,headers=headers) 26 session.get(url2,headers=headers) 27 text = session.get(url3,headers=headers).text 28 return text 29 30 def parser_html(html): 31 soup = BeautifulSoup(html,'html.parser') 32 return soup.prettify() 33 34 35 if __name__ == '__main__': 36 parser_html(post_html(URL,URL_p,URL_p2))
其中URL_p可以通過fiddler抓包得到或者通過js的跳轉代碼也可以找到,其中math=4636,如果看到js源碼,這個就是js隨機生成的一個4位數,可能為了標記每次的用戶信息頁面不一樣吧
URL_p2通過fildder可以找到
運行這個腳本,如果我們的username或者password有錯誤,會返回這個text
但如果正確,則會get到正確頁面,下圖是上面腳本運行后,fiddler抓到的
模擬登陸成功了!,完全繞過了頁面的驗證碼環節。
那么話說回來,既然有賬號密碼,我用的着這么麻煩,我個人認為有兩方面原因
一是為了練習一下模擬登陸
二是可以 b r u t e f o r c e 阿,但我有個不好的消息,這所大學的登錄系統,如果5次嘗試失敗,會將username凍住30分鍾。這真是殺敵一千自損八百啊,
但如果你要真想讓這個用戶崩,你可以寫一個30鍾登錄5次的模擬登陸腳本,讓該用戶始終上不了。
haha,不聊了,看電視劇去了