首先感谢钟馗之眼公开的攻击过程,感谢您的无私分享
老文章,当时没有粉丝,在发一遍
今天刷着手机,突然被朋友圈里一篇名为《小心新型二维码钓鱼》的文章吸引,看完演示视频心里久久不能平静,喜欢瞎折腾的我于是开始折腾起来,最终终于折腾明白了,于是写下这篇文章分享一下技术细节。
首先先贴上大表哥的文章链接:小心新型二维码钓鱼
首先我们先来看一下qq邮箱快速登陆的api
https://xui.ptlogin2.qq.com/cgi-bin/xlogin?target=self&appid=522005705&daid=4&s_url=https://mail.qq.com/cgi-bin/readtemplate?check=false%26t=loginpage_new_jump%26vt=passport%26vm=wpt%26ft=loginpage%26target=&style=25&low_login=1&proxy_url=https://mail.qq.com/proxy.html&need_qr=0&hide_border=1&border_radius=0&self_regurl=http://zc.qq.com/chs/index.html?type=1&app_id=11005?t=regist&pt_feedback_link=http://support.qq.com/discuss/350_1.shtml&css=https://res.mail.qq.com/zh_CN/htmledition/style/ptlogin_input_for_xmail440503.css
F12,启动,抓包看一下
既然是二维码登陆钓鱼,那么我们首先要关注的点首先肯定是如何生成二维码,我们先来找一下生成二维码的api,F12,启动!!!! 生成登陆二维码的api如下图
随着F12里面Network里抓的包越来越多,我被其中一个接口所吸引,这个接口是用来判断f12是否过期的接口,我们来看一下。
既然有接口能验证二维码是否过期,那么就说明生成的每一张二维码里的某一个参数和这个接口里的某一个参数一定存在着某种不可告人的py交易。顺着思路寻找,结局当然是被我当场捉奸,来看一下。
我发现在这两个api中,二维码生成接口的cookie里和二维码是否过期查询的接口里有同一个参数 login_sig,那么下面我只需要找到login_sig这个值是从哪过来的,就能将二维码和二维码是否过期接口一一对应到一起了。果然,我们在这个接口的cookie里找到了login_sig
https://xui.ptlogin2.qq.com/cgi-bin/xlogin?target=self&appid=522005705&daid=4&s_url=https://mail.qq.com/cgi-bin/readtemplate?check=false%26t=loginpage_new_jump%26vt=passport%26vm=wpt%26ft=loginpage%26target=&style=25&low_login=1&proxy_url=https://mail.qq.com/proxy.html&need_qr=0&hide_border=1&border_radius=0&self_regurl=http://zc.qq.com/chs/index.html?type=1&app_id=11005?t=regist&pt_feedback_link=http://support.qq.com/discuss/350_1.shtml&css=https://res.mail.qq.com/zh_CN/htmledition/style/ptlogin_input_for_xmail440503.css
现在梳理一下以上的思路,首先我们访问
https://xui.ptlogin2.qq.com/cgi-bin/xlogin?target=self&appid=522005705&daid=4&s_url=https://mail.qq.com/cgi-bin/readtemplate?check=false%26t=loginpage_new_jump%26vt=passport%26vm=wpt%26ft=loginpage%26target=&style=25&low_login=1&proxy_url=https://mail.qq.com/proxy.html&need_qr=0&hide_border=1&border_radius=0&self_regurl=http://zc.qq.com/chs/index.html?type=1&app_id=11005?t=regist&pt_feedback_link=http://support.qq.com/discuss/350_1.shtml&css=https://res.mail.qq.com/zh_CN/htmledition/style/ptlogin_input_for_xmail440503.css
从cooki里取到login_sig,然后就可以通过login_sig得到一个二维码,和一个查询二维码是否过期的接口。
但是在实际操作过程中,我发现查询二维码是否过期的接口除了login_sig还需要ptqrtoken与action,action参数在这里没什么可说的,就是一个时间戳,于是我就开始寻找ptqrtoken是如何生成的。
寻找思路就是
https://ssl.ptlogin2.qq.com/ptqrlogin
这个api的请求是从哪个地方发起的,最终我在这个js里找到了他
https://cdn-go.cn/qq-web/any.ptlogin2.qq.com/c7d607f7//ptlogin/ver/19112817/js/c_login_2.js
由于c_login_2.js后带参数,所以想要自己亲自调试的小伙伴可以自行抓包寻找这个js的路径
首先我们来找ptqrtoken
好的,我们可以看到ptqrtoken是将cookie中的qrsig参数通过hash33方式加密得到的,我们再来找一下hash33方法的定义
hash33:function(t){for(var e=0,i=0,n=t.length;i<n;++i)e+=(e<<5)+t.charCodeAt(i);return 2147483647&e}}}()
这样子我们就可以得到ptqrtoken了,同时也得到了一对url,一个是生成二维码的url,一个是对应查询那个二维码是否过期的url
说了这么多,小伙伴们可能还是一头雾水,好奇我上面啰嗦这么多是什么意思,下面就是揭晓真相的时刻
我给大家写一个不停访问二维码查询是否过期接口的小例子大家就明白了,由于本人还是习惯用易语言,希望各位大佬看我用易语言写demo做演示不要嘲笑我,看下图
在扫码之前,访问那个接口的时候,接口会返回二维码未失效,在扫码的过程中,那个接口会返回二维码认证中,在扫码过后,接口直接返回了邮件免密登陆地址,那么二维码钓鱼的原理就因此显而易见了
那么我们来访问下面的url来测试一下
由于本人安全意识较强设置了独立密码,没有独立密码的人将通过那个url直接进入邮箱了
惊不惊喜意不意外
以上就是今天给大家分享的内容,上面那些构造url的方法会在写利用脚本里面用到,为了防止某些小黑非法使用,利用脚本就不公开了,各位大佬自己去写吧。
文章有看不懂的地方欢迎大家来跟我交流,有错误的地方也希望各位大佬指正
原创不易,希望大佬们多多关注,您的关注是我更新的动力,关注我,日常分享小技巧