-
-
转载:微信公众号管理员后台点击我发的消息链接,公众号介绍等设置就会被修改(绕过csrf防护)
-
发表于: 2015-10-11 00:58 1489
-
转载自 http://www.wooyun.org/bugs/wooyun-2015-0136903
微信公共号后台的CSRF防护是有的,token防护加referrer限制,看起来很完美
但是,由于设计的一些不合理,仍然可被csrf攻击,以下是详情
1、公众号后台的token的设计问题
公众号后台的csrf防护的token直接在后台所有操作的url中都会出现。这样token就有可能被http包里的referer字段发往第三方而泄露。我在以前写过的文章 http://drops.wooyun.org/web/7112 里也提过这个问题的风险,当时我说削弱了防护体系。一旦其他的防护有问题的时候,这个问题就会被利用
2、先偷TOKEN
发送一个自己可控内容的https(公众后台是https的,只给https传递referrer)的url给微信公众账号,一旦他点击,管理后台url里的token就会发给我们。
直接给公众号发送url,后台是不会识别的。需要一个小技巧来给后台发链接
把链接到微信的聊天框中然后访问,然后微信内置浏览器会打开这个页面,然后再收藏这个页面
然后再给公众号发收藏里的这个页面,这样在管理员的后台看到的就是一个富媒体格式的链接的
3、某些处可绕过referrer
微信公众号后台的操作都是post的,而且限制了referrer为本域
但是有一些操作,比如公众号设置里的介绍、头像修改、添加分组、地址修改、隐私设置是否允许别人搜索的设置等地方的请求,虽然看起来也是post的
但是你如果把post请求改成get,body的内容放到get参数中,这样的请求服务端也接受
修改介绍的请求:
code 区域
https://mp.weixin.qq.com/cgi-bin/setuserinfo?action=intro&t=ajax-response&token=589115843&lang=zh_CN&f=json&ajax=1&random=0.3911454190965742&intro=hacked%20by%20shidada
添加分组
code 区域
https://mp.weixin.qq.com/cgi-bin/modifygroup?t=ajax-friend-group&token=589115843&lang=zh_CN&f=json&ajax=1&random=0.0741190540138632&func=add&name=helloasasas
关闭允许他人搜索到的设置
code 区域
https://mp.weixin.qq.com/cgi-bin/setuserinfo?t=ajax-response&token=589115843&lang=zh_CN&f=json&ajax=1&random=0.5444546448998153&action=search&open=0
而且改成get请求后,referrer限制允许了空referrer的情况,这样我们的利用就更不易被察觉了,因为不需要直接发此链接让受害者点了
4、怎么利用
构造一个https页面,里面是伪装的内容,并且会发出空referer的带着token的get请求(可使用iframe动态加载form来发get请求)来完成如上一些敏感操作
微信公共号后台的CSRF防护是有的,token防护加referrer限制,看起来很完美
但是,由于设计的一些不合理,仍然可被csrf攻击,以下是详情
1、公众号后台的token的设计问题
公众号后台的csrf防护的token直接在后台所有操作的url中都会出现。这样token就有可能被http包里的referer字段发往第三方而泄露。我在以前写过的文章 http://drops.wooyun.org/web/7112 里也提过这个问题的风险,当时我说削弱了防护体系。一旦其他的防护有问题的时候,这个问题就会被利用
2、先偷TOKEN
发送一个自己可控内容的https(公众后台是https的,只给https传递referrer)的url给微信公众账号,一旦他点击,管理后台url里的token就会发给我们。
直接给公众号发送url,后台是不会识别的。需要一个小技巧来给后台发链接
把链接到微信的聊天框中然后访问,然后微信内置浏览器会打开这个页面,然后再收藏这个页面
然后再给公众号发收藏里的这个页面,这样在管理员的后台看到的就是一个富媒体格式的链接的
3、某些处可绕过referrer
微信公众号后台的操作都是post的,而且限制了referrer为本域
但是有一些操作,比如公众号设置里的介绍、头像修改、添加分组、地址修改、隐私设置是否允许别人搜索的设置等地方的请求,虽然看起来也是post的
但是你如果把post请求改成get,body的内容放到get参数中,这样的请求服务端也接受
修改介绍的请求:
code 区域
https://mp.weixin.qq.com/cgi-bin/setuserinfo?action=intro&t=ajax-response&token=589115843&lang=zh_CN&f=json&ajax=1&random=0.3911454190965742&intro=hacked%20by%20shidada
添加分组
code 区域
https://mp.weixin.qq.com/cgi-bin/modifygroup?t=ajax-friend-group&token=589115843&lang=zh_CN&f=json&ajax=1&random=0.0741190540138632&func=add&name=helloasasas
关闭允许他人搜索到的设置
code 区域
https://mp.weixin.qq.com/cgi-bin/setuserinfo?t=ajax-response&token=589115843&lang=zh_CN&f=json&ajax=1&random=0.5444546448998153&action=search&open=0
而且改成get请求后,referrer限制允许了空referrer的情况,这样我们的利用就更不易被察觉了,因为不需要直接发此链接让受害者点了
4、怎么利用
构造一个https页面,里面是伪装的内容,并且会发出空referer的带着token的get请求(可使用iframe动态加载form来发get请求)来完成如上一些敏感操作
赞赏
看原图
赞赏
雪币:
留言: