*本文作者:丶楼兰,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。
继上次登陆框引起的血案这个文章之后,时隔一个月笔者又写了续集,呃……升华版。
0x00 文章内容结构图
0x01 信息泄露
利用泄露的信息可以大大增加我们的可测试点,从而增加我们的成功率。
1. HTML源代码
必看的肯定要属HTML源代码了,源代码里包含了下面所说的JS文件。HTML源代码会泄露很多信息,像程序员未删除的注释、敏感路径等都可能在HTML源代码中找的到,从来增加发现漏洞的成功率。
2. JS文件
很多JS文件中会泄露其他路径,或者敏感函数等。泄露其他路径可以增加我们可以测试的点,泄露一些敏感函数可以实现未授权访问等恶意操作。
3. 其他敏感文件
还可以利用其他途径获得到的文件,如爆破、爬虫等其他方式得到的敏感文件,可能会发现日志文件、配置文件、网站的其他业务页面等。
0x02 点我链接登陆你的账号
这个问题多出现在第三方登陆功能中
1. 主站账号登陆
2. 微信登陆
3. QQ登陆
4. 微博登陆
5. ....
1. 一个二维码引领风骚
呃,小石师傅是真男神,把我带进了米斯特,从此不知归路..……
子业务选择使用主站账号扫码登陆时:
将二维转换为HTTP请求(https://cli.im/deqr/)
可以发现只有一个TOKEN参数:
使用主站APP 扫码进行登录扫描之后,会弹出确认登录框以确认登录。在点击“登录”按钮的之后,发送如下POST数据包来进行登陆:
POST https://xxx.com/xxxx/confirm HTTP/1.1
....
token=xxxxx&source=passport&fingerprint=一大长串字符
删除finderprint参数,发现对请求无影响=>删除
删除referer参数,发现对请求无影响=>可以CSRF
将请求方法改为GET型,发现失败=>只能构造表单进行CSRF
此时受害者只要是主站登陆状态下,发送了我们构造好的这个表单,那么我这里就可以直接登陆他的账号。
2. 二维码又起风波
使用账号所绑定的微信登陆:
扫描之后发现不需要点击确认就登录了,和常规的微信二维码扫描登录完全不一样,这时候才发现原来这里是使用的微信公众号绑定的账户去登录的,解析的二维码地址为:
条件:
受害者微信公众号绑定了账号;
受害者微信内点击我们的链接,我这里就这可以直接登陆了
0x03 劫持用户身份凭证
1. XSS劫持
子站使用主站账号登陆时,来来回回N个数据包,经过我仔细观察,得出重要结论:
如果主站是登陆状态,那么访问如下链接,主站便会返回身份凭证
经过测试发现:这个client_id参数必须存在,但是没有什么影响,不会影响整个攻击。
然后,我们便可以使用返回的这个链接来登陆受害者这个子站。为了获得响应包里面Locatin的值,我们可以使用该域下面的XSS来获得。
2. JSON劫持
当然,如果发现此处返回的用户凭证如下格式,那么当然首先考虑到的便是json劫持了。
关于json劫持,大家可以移步key师傅博客
http://gh0st.cn/archives/2018-03-22/1
0x04 XSS
1.登陆时XSS
POST类型,尝试修改改为GET类型:
发现成功弹窗,呃,即使不能修改成功,那么还可以组合CSRF一起使用。
2. 登陆成功时XSS
所有参数测试一遍,发现link参数,存在xss,直接在script标签里面,并且还送URL跳转一个。
3. 登陆失败时XSS
逐个参数进行测试后,最后发现gourl参数存在xss,过滤了script关键字,使用tab键进行绕过。
4. 利用泄露的文件进行XSS
通过源代码发现了一个隐藏的链接:
打开之后发现提示缺少sid参数,此时手动构造:
点击确定之后,跳过去的是一个荒废的页面,此时我回过头来看了一下源代码,尝试手动添加action、method参数:
发现了method参数有效,此时构造xss payload,成功弹窗(= = 没想到method参数也可以)。
5. 接口JSON XSS
发现请求链接是:http://xxxx/swap/im?callback=jQuery18900926711223842687
而响应包内容是:
jQuery18900926711223842687({"errorCode":1,"errorMessage":xxxxxxx})
灵光一闪:可以测试JSON劫持嘛。但是由于响应包的内容并没有啥作用,所以此处的JSON劫持完全没有危害,但是这里却还可以测试XSS漏洞。
构造如下链接,成功弹窗:
http://xxxx/swap/im?callback=<script>alert(1)</script>
0x05 URL跳转
用户登陆这个功能这里,可以测试的点可以但不仅仅并且不一定是如下几个:
1.登陆成功后跳转到的页面
此处link1参数可以控制跳转到的页面:
2.登陆失败后跳转到的页面
此处的gourl参数可以控制返回的页面:
可以看到设置了自动跳转,(呃……我们让他跳转到mstsec)。
0x06 未授权访问
1. JS文件背后的秘密
在查看源代码时发现引入了该JS文件,跟踪……
发现了两处接口,逐个跟踪。
发现下面那个接口直接未授权访问... 泄露了该站,所有的用户名,此时便可以进行有针对性撞库了。
2.看JS如何不见泰山
通过JS来验证权限时,还可以通过删除JS来实现未授权访问,例如登陆失败时通过JS来实现跳回主页面。简言之便是绕过客户端校验类型,so easy~
0x07 不安全的对象直接引用 | 设计缺陷
1. JS文件GETSHELL
通过读取JS代码时发现这么一段,竟然可以文件上传。
构造如下表单:
成功GETSHELL:
2. 任意用户登陆之绕过客户端校验
登陆成功后相应包里返回一条链接 http://xxx.com/user/login.php?id=MTAw。发现是用户ID的base64编码,此时遍历用户ID,实现任意用户登陆。
3. 最风骚之参数的FUZZ
1)任意后台地址,手动添加参数admin=1之后,发现返回了cookie,成功登陆
2)普通用户时,手动添加debug=1之后,发现权限竟然多了一些。。
呃。。关于参数的fuzz,增删改都可以进行尝试
0x08 感言
笔者现在是米斯特安全团队的成员(外围 .. 并且实习),想对大家说的是:欢迎各位大佬加入我们的团队,一起进行孜孜不倦的学习
呃 ... 猝死的那种 ==
最后真心感谢米斯特安全团队各位师傅的指导,他们的思路是真的骚 = =
万分感谢米斯特的各位师傅,协助我完成了这篇文章,包括但不限于:
key师傅,动不动就秋名山走一圈的男人!
小石师傅,我男神!带我走进了米斯特的男人,自此一去不复返 = =
狗哥师傅,dogboy,呃... 总感觉怪怪的,还是喊狗师傅吧。此时狗哥抿了抿嘴,满意的笑了 = =
Taskshi师傅,米斯特新秀,裤兜装满0day的男人!
*本文作者:丶楼兰,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。