写在前面
最近在一边学习红队的内容一边参与红队项目,但是学到的东西还不够支撑发一篇推送。先分享之前看别的师傅的渗透报告学到一个新漏洞,需要水报告的师傅可以看一下。结合这个工具,也可以达到验证码识别+暴破的效果。
目录
·漏洞描述
·测试方法
·风险分析
·风险等级
·修复方案
漏洞描述
图形验证码过于简单,可使用工具自动化识别。
测试方法
利用Python Image Library、tesseract-ocr、pytesser等python第三方库,经过二值化、文字分割等操作识别验证码。这里用的是github上的captcha-killer项目改编的一个工具。验证的过程就是先抓到请求验证码的包,重放后抓到返回包。本地开启一个验证的python脚本,把返回包发到python服务验证后返回到burp。
下载地址:
https://github.com/f0ng/captcha-killer-modified
环境安装,这里ddddocr用到了国内的镜像,下载速度会快一点:
pip install ddddocr -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install aiohttp
python脚本,我这里设置运行在18888端口
import argparse
import ddddocr # 导入 ddddocr
from aiohttp import web
parser = argparse.ArgumentParser()
parser.add_argument("-p", help="http port", default="18888")
args = parser.parse_args()
ocr = ddddocr.DdddOcr()
port = args.p
async def handle_cb(request):
return web.Response(text=ocr.classification(img_base64=await request.text()))
app = web.Application()
app.add_routes([
web.post('/reg', handle_cb),
])
if __name__ == '__main__':
web.run_app(app, port=port)
测试方法:页面点击刷新验证码,burp抓包,右键发送到captcha-killer-modified工具。点击获取重放,抓到返回包,把返回包发送到18888端口识别。
左下角发送的数据包:
POST /reg HTTP/1.1
Host: 127.0.0.1:18888
Authorization:Basic f0ngauth
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:97.0) Gecko/20100101 Firefox/97.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-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
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 8332
<@BASE64><@IMG_RAW></@IMG_RAW></@BASE64>
这个modified的可以识别关键词。如果返回包返回的验证码不是图片是base64数据,也可以专门设定关键词,如图
风险分析
验证码通常使用一些线条和一些不规则的字符组成,这些字符通常同时包含字母和数字。但有些Web程序设计的验证码较简单,仅由数字或字母组成,且生成的验证码字符排列规整,很容易被程序自动识别。
风险等级
【中危】:图形验证码可被自动化识别,且成功率高于95%。
修复方案
使用安全性强的验证码,验证码应从以下方面保证其安全性:验证码长度不低于4位,至少同时包含数字、字母或汉字,增加干扰因素比如线条,避免使用容易被程序自动识别的验证码,验证码不应返回到客户端。
写在最后
梅雨季节到了,大家注意防潮防霉呀。
原文始发于微信公众号(云下信安):图形验证码可自动获取(水)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论