我繞過驗證的模擬登陸的崎嶇倒流


由於好奇一直想試試模擬登陸,然后就把目標定在某所大學的登錄網站上

大至樣式就是這樣的

通過界面我們大致可以了解到請求可能會后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,不聊了,看電視劇去了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM