Skip to content

Commit fb9b751

Browse files
authored
Add files via upload
1 parent 60dd98a commit fb9b751

File tree

2 files changed

+127
-0
lines changed

2 files changed

+127
-0
lines changed

server.py

+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#!/usr/bin/env python
2+
# -*- conding:utf-8 -*-
3+
from http.server import HTTPServer, BaseHTTPRequestHandler
4+
import muggle_ocr
5+
import re,time,base64,os
6+
7+
host = ('0.0.0.0', 8899)
8+
9+
class Resquest(BaseHTTPRequestHandler):
10+
def handler(self):
11+
print("data:", self.rfile.readline().decode())
12+
self.wfile.write(self.rfile.readline())
13+
14+
def do_GET(self):
15+
print(self.requestline)
16+
if self.path != '/':
17+
self.send_error(404, "Page not Found!")
18+
return
19+
20+
data = '<title>xp_CAPTCHA</title><body style="text-align:center"><h1>验证码识别:xp_CAPTCHA</h1><a href="http://www.nmd5.com">author:算命縖子</a></body>'
21+
self.send_response(200)
22+
self.send_header('Content-type', 'text/html; charset=UTF-8')
23+
self.end_headers()
24+
self.wfile.write(data.encode())
25+
26+
def do_POST(self):
27+
#print(self.headers)
28+
#print(self.command)
29+
if self.path != '/base64':
30+
self.send_error(404, "Page not Found!")
31+
return
32+
33+
img_name = time.time()
34+
req_datas = self.rfile.read(int(self.headers['content-length']))
35+
req_datas = req_datas.decode()
36+
base64_img = re.search('base64=(.*?)$',req_datas)
37+
#print(base64_img.group(1)) #post base64参数的内容
38+
39+
with open("temp/%s.png"%img_name, 'wb') as f:
40+
f.write(base64.b64decode(base64_img.group(1)))
41+
f.close()
42+
43+
#验证码识别
44+
sdk = muggle_ocr.SDK(model_type=muggle_ocr.ModelType.Captcha)
45+
with open(r"temp/%s.png"%img_name, "rb") as f:
46+
b = f.read()
47+
text = sdk.predict(image_bytes=b)
48+
print(text) #识别的结果
49+
50+
#删除掉图片文件,以防占用太大的内存
51+
os.remove("temp/%s.png"%img_name)
52+
53+
self.send_response(200)
54+
self.send_header('Content-type', 'application/json')
55+
self.end_headers()
56+
self.wfile.write(text.encode('utf-8'))
57+
58+
if __name__ == '__main__':
59+
os.makedirs('temp', exist_ok=True)
60+
server = HTTPServer(host, Resquest)
61+
print("Starting server, listen at: %s:%s" % host)
62+
server.serve_forever()

xp_CAPTCHA.py

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#!/usr/bin/env python
2+
#coding:gbk
3+
from burp import IBurpExtender
4+
from burp import IIntruderPayloadGeneratorFactory
5+
from burp import IIntruderPayloadGenerator
6+
import base64
7+
import json
8+
import re
9+
import urllib2
10+
import ssl
11+
12+
host = ('127.0.0.1', 8899)
13+
14+
class BurpExtender(IBurpExtender, IIntruderPayloadGeneratorFactory):
15+
def registerExtenderCallbacks(self, callbacks):
16+
#注册payload生成器
17+
callbacks.registerIntruderPayloadGeneratorFactory(self)
18+
#插件里面显示的名字
19+
callbacks.setExtensionName("xp_CAPTCHA")
20+
print 'xp_CAPTCHA 中文名:瞎跑验证码\nblog:http://www.nmd5.com/\nT00ls:https://www.t00ls.net/ \nThe loner安全团队 author:算命縖子\n\n用法:\n在head头部添加xiapao:验证码的URL\n\n如:\n\nPOST /login HTTP/1.1\nHost: www.baidu.com\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0\nAccept: text/plain, */*; q=0.01\nAccept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2\nContent-Type: application/x-www-form-urlencoded; charset=UTF-8\nX-Requested-With: XMLHttpRequest\nxiapao:http://www.baidu.com/get-validate-code\nContent-Length: 84\nConnection: close\nCookie: JSESSIONID=24D59677C5EDF0ED7AFAB8566DC366F0\n\nusername=admin&password=admin&vcode=8888\n\n'
21+
22+
def getGeneratorName(self):
23+
return "xp_CAPTCHA"
24+
25+
def createNewInstance(self, attack):
26+
return xp_CAPTCHA(attack)
27+
28+
class xp_CAPTCHA(IIntruderPayloadGenerator):
29+
def __init__(self, attack):
30+
tem = "".join(chr(abs(x)) for x in attack.getRequestTemplate()) #request内容
31+
cookie = re.findall("Cookie: (.+?)\r\n", tem)[0] #获取cookie
32+
xp_CAPTCHA = re.findall("xiapao:(.+?)\r\n", tem)[0]
33+
ssl._create_default_https_context = ssl._create_unverified_context #忽略证书,防止证书报错
34+
print xp_CAPTCHA+'\n'
35+
print 'cookie:' + cookie+'\n'
36+
self.xp_CAPTCHA = xp_CAPTCHA
37+
self.cookie = cookie
38+
self.max = 1 #payload最大使用次数
39+
self.num = 0 #标记payload的使用次数
40+
self.attack = attack
41+
42+
def hasMorePayloads(self):
43+
#如果payload使用到了最大次数reset就清0
44+
if self.num == self.max:
45+
return False # 当达到最大次数的时候就调用reset
46+
else:
47+
return True
48+
49+
def getNextPayload(self, payload): # 这个函数请看下文解释
50+
xp_CAPTCHA_url = self.xp_CAPTCHA #验证码url
51+
52+
print xp_CAPTCHA_url
53+
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36","Cookie":self.cookie}
54+
request = urllib2.Request(xp_CAPTCHA_url,headers=headers)
55+
CAPTCHA = urllib2.urlopen(request) #获取图片
56+
CAPTCHA_base64 = base64.b64encode(CAPTCHA.read()) #把图片base64编码
57+
58+
request = urllib2.Request('http://%s:%s/base64'%host, 'base64='+CAPTCHA_base64)
59+
response = urllib2.urlopen(request).read()
60+
print(response)
61+
return response
62+
63+
def reset(self):
64+
self.num = 0 # 清零
65+
return

0 commit comments

Comments
 (0)