-
-
转载:微信公众号管理员后台点击我发的消息链接,公众号介绍等设置就会被修改(绕过csrf防护)
-
发表于: 2015-10-11 00:58 1617
-
转载自 8c2K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4N6G2L8%4W2#2L8W2)9J5k6h3!0J5k6#2)9J5c8X3u0#2k6%4y4Q4x3V1k6%4L8$3!0&6N6h3&6Q4x3X3b7J5x3o6p5#2i4K6u0V1x3o6p5K6y4U0V1H3x3H3`.`.
微信公共号后台的CSRF防护是有的,token防护加referrer限制,看起来很完美
但是,由于设计的一些不合理,仍然可被csrf攻击,以下是详情
1、公众号后台的token的设计问题
公众号后台的csrf防护的token直接在后台所有操作的url中都会出现。这样token就有可能被http包里的referer字段发往第三方而泄露。我在以前写过的文章 c8eK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3c8J5L8%4m8K6i4K6u0W2N6$3!0G2P5i4g2F1i4K6u0W2L8%4u0Y4i4K6u0r3N6$3g2T1i4K6u0r3y4K6p5I4x3R3`.`. 里也提过这个问题的风险,当时我说削弱了防护体系。一旦其他的防护有问题的时候,这个问题就会被利用
2、先偷TOKEN
发送一个自己可控内容的https(公众后台是https的,只给https传递referrer)的url给微信公众账号,一旦他点击,管理后台url里的token就会发给我们。
直接给公众号发送url,后台是不会识别的。需要一个小技巧来给后台发链接
把链接到微信的聊天框中然后访问,然后微信内置浏览器会打开这个页面,然后再收藏这个页面
然后再给公众号发收藏里的这个页面,这样在管理员的后台看到的就是一个富媒体格式的链接的
3、某些处可绕过referrer
微信公众号后台的操作都是post的,而且限制了referrer为本域
但是有一些操作,比如公众号设置里的介绍、头像修改、添加分组、地址修改、隐私设置是否允许别人搜索的设置等地方的请求,虽然看起来也是post的
但是你如果把post请求改成get,body的内容放到get参数中,这样的请求服务端也接受
修改介绍的请求:
code 区域
697K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0M7q4)9J5k6i4N6W2K9i4S2A6L8W2)9J5k6i4q4I4i4K6u0W2j5$3!0E0i4K6u0r3j5$3N6A6i4K6u0V1j5X3W2F1i4K6u0r3M7$3g2@1N6i4y4W2M7X3W2F1k6X3!0Q4x3@1k6S2j5%4c8A6L8$3&6Q4x3@1c8A6L8Y4c8J5L8#2)9J5y4Y4c8Q4x3@1c8S2K9X3q4^5i4K6u0V1M7X3g2K6M7r3!0F1M7$3g2Q4x3U0k6@1L8$3E0W2L8W2)9K6c8o6f1^5z5e0p5I4y4e0R3@1x3#2)9J5y4X3I4S2L8X3N6Q4x3@1c8*7K9q4)9#2k6V1y4z5i4K6t1$3k6W2)9K6c8r3A6K6L8$3&6Q4x3U0k6S2K9X3q4^5i4K6y4p5x3g2)9J5y4Y4u0S2L8X3c8G2L8g2)9K6c8o6m8Q4x3X3f1K6z5e0p5I4y4o6f1@1x3e0V1H3z5e0j5#2y4K6b7J5i4K6t1$3K9h3&6@1M7X3!0Q4x3@1c8Z5j5h3y4C8k6h3c8Q4x3U0f1J5x3r3u0&6i4K6t1#2x3U0m8K6K9r3W2V1j5h3c8S2
添加分组
code 区域
c4aK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0M7q4)9J5k6i4N6W2K9i4S2A6L8W2)9J5k6i4q4I4i4K6u0W2j5$3!0E0i4K6u0r3j5$3N6A6i4K6u0V1j5X3W2F1i4K6u0r3L8h3!0V1K9h3k6&6k6%4u0G2N6i4m8Q4x3@1k6@1i4K6y4p5j5h3A6S2P5q4)9J5k6r3k6J5K9h3g2F1k6q4)9J5k6r3N6J5L8%4g2H3i4K6t1$3N6r3!0C8k6h3&6Q4x3@1b7#2z5o6V1I4x3e0f1^5y4o6y4Q4x3U0k6D9j5h3&6Y4i4K6y4p5P5X3S2Q4y4h3k6o6e0W2)9J5y4X3k6Q4x3@1c8B7M7$3!0F1i4K6t1$3j5h3A6S2P5q4)9K6c8o6q4Q4x3U0k6J5j5h3&6V1L8$3#2Q4x3@1b7H3i4K6u0W2x3o6M7@1x3e0p5&6x3o6f1@1x3o6p5K6z5o6j5K6x3W2)9J5y4X3k6#2L8X3y4Q4x3@1c8S2k6r3c8Q4x3U0k6F1j5h3#2W2i4K6y4p5K9r3g2D9L8r3!0S2M7$3q4K6j5i4x3`.
关闭允许他人搜索到的设置
code 区域
850K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0M7q4)9J5k6i4N6W2K9i4S2A6L8W2)9J5k6i4q4I4i4K6u0W2j5$3!0E0i4K6u0r3j5$3N6A6i4K6u0V1j5X3W2F1i4K6u0r3M7$3g2@1N6i4y4W2M7X3W2F1k6X3!0Q4x3@1k6@1i4K6y4p5j5h3A6S2P5q4)9J5k6s2u0W2M7%4m8G2L8Y4y4W2i4K6t1$3N6r3!0C8k6h3&6Q4x3@1b7#2z5o6V1I4x3e0f1^5y4o6y4Q4x3U0k6D9j5h3&6Y4i4K6y4p5P5X3S2Q4y4h3k6o6e0W2)9J5y4X3k6Q4x3@1c8B7M7$3!0F1i4K6t1$3j5h3A6S2P5q4)9K6c8o6q4Q4x3U0k6J5j5h3&6V1L8$3#2Q4x3@1b7H3i4K6u0W2y4e0b7@1y4o6f1@1y4U0b7@1z5o6V1&6z5o6p5#2x3#2)9J5y4X3q4U0N6r3W2G2L8W2)9K6c8s2y4W2j5i4u0U0K9q4)9J5y4X3!0H3k6h3&6Q4x3@1b7H3
而且改成get请求后,referrer限制允许了空referrer的情况,这样我们的利用就更不易被察觉了,因为不需要直接发此链接让受害者点了
4、怎么利用
构造一个https页面,里面是伪装的内容,并且会发出空referer的带着token的get请求(可使用iframe动态加载form来发get请求)来完成如上一些敏感操作
微信公共号后台的CSRF防护是有的,token防护加referrer限制,看起来很完美
但是,由于设计的一些不合理,仍然可被csrf攻击,以下是详情
1、公众号后台的token的设计问题
公众号后台的csrf防护的token直接在后台所有操作的url中都会出现。这样token就有可能被http包里的referer字段发往第三方而泄露。我在以前写过的文章 c8eK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3c8J5L8%4m8K6i4K6u0W2N6$3!0G2P5i4g2F1i4K6u0W2L8%4u0Y4i4K6u0r3N6$3g2T1i4K6u0r3y4K6p5I4x3R3`.`. 里也提过这个问题的风险,当时我说削弱了防护体系。一旦其他的防护有问题的时候,这个问题就会被利用
2、先偷TOKEN
发送一个自己可控内容的https(公众后台是https的,只给https传递referrer)的url给微信公众账号,一旦他点击,管理后台url里的token就会发给我们。
直接给公众号发送url,后台是不会识别的。需要一个小技巧来给后台发链接
把链接到微信的聊天框中然后访问,然后微信内置浏览器会打开这个页面,然后再收藏这个页面
然后再给公众号发收藏里的这个页面,这样在管理员的后台看到的就是一个富媒体格式的链接的
3、某些处可绕过referrer
微信公众号后台的操作都是post的,而且限制了referrer为本域
但是有一些操作,比如公众号设置里的介绍、头像修改、添加分组、地址修改、隐私设置是否允许别人搜索的设置等地方的请求,虽然看起来也是post的
但是你如果把post请求改成get,body的内容放到get参数中,这样的请求服务端也接受
修改介绍的请求:
code 区域
697K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0M7q4)9J5k6i4N6W2K9i4S2A6L8W2)9J5k6i4q4I4i4K6u0W2j5$3!0E0i4K6u0r3j5$3N6A6i4K6u0V1j5X3W2F1i4K6u0r3M7$3g2@1N6i4y4W2M7X3W2F1k6X3!0Q4x3@1k6S2j5%4c8A6L8$3&6Q4x3@1c8A6L8Y4c8J5L8#2)9J5y4Y4c8Q4x3@1c8S2K9X3q4^5i4K6u0V1M7X3g2K6M7r3!0F1M7$3g2Q4x3U0k6@1L8$3E0W2L8W2)9K6c8o6f1^5z5e0p5I4y4e0R3@1x3#2)9J5y4X3I4S2L8X3N6Q4x3@1c8*7K9q4)9#2k6V1y4z5i4K6t1$3k6W2)9K6c8r3A6K6L8$3&6Q4x3U0k6S2K9X3q4^5i4K6y4p5x3g2)9J5y4Y4u0S2L8X3c8G2L8g2)9K6c8o6m8Q4x3X3f1K6z5e0p5I4y4o6f1@1x3e0V1H3z5e0j5#2y4K6b7J5i4K6t1$3K9h3&6@1M7X3!0Q4x3@1c8Z5j5h3y4C8k6h3c8Q4x3U0f1J5x3r3u0&6i4K6t1#2x3U0m8K6K9r3W2V1j5h3c8S2
添加分组
code 区域
c4aK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0M7q4)9J5k6i4N6W2K9i4S2A6L8W2)9J5k6i4q4I4i4K6u0W2j5$3!0E0i4K6u0r3j5$3N6A6i4K6u0V1j5X3W2F1i4K6u0r3L8h3!0V1K9h3k6&6k6%4u0G2N6i4m8Q4x3@1k6@1i4K6y4p5j5h3A6S2P5q4)9J5k6r3k6J5K9h3g2F1k6q4)9J5k6r3N6J5L8%4g2H3i4K6t1$3N6r3!0C8k6h3&6Q4x3@1b7#2z5o6V1I4x3e0f1^5y4o6y4Q4x3U0k6D9j5h3&6Y4i4K6y4p5P5X3S2Q4y4h3k6o6e0W2)9J5y4X3k6Q4x3@1c8B7M7$3!0F1i4K6t1$3j5h3A6S2P5q4)9K6c8o6q4Q4x3U0k6J5j5h3&6V1L8$3#2Q4x3@1b7H3i4K6u0W2x3o6M7@1x3e0p5&6x3o6f1@1x3o6p5K6z5o6j5K6x3W2)9J5y4X3k6#2L8X3y4Q4x3@1c8S2k6r3c8Q4x3U0k6F1j5h3#2W2i4K6y4p5K9r3g2D9L8r3!0S2M7$3q4K6j5i4x3`.
关闭允许他人搜索到的设置
code 区域
850K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0M7q4)9J5k6i4N6W2K9i4S2A6L8W2)9J5k6i4q4I4i4K6u0W2j5$3!0E0i4K6u0r3j5$3N6A6i4K6u0V1j5X3W2F1i4K6u0r3M7$3g2@1N6i4y4W2M7X3W2F1k6X3!0Q4x3@1k6@1i4K6y4p5j5h3A6S2P5q4)9J5k6s2u0W2M7%4m8G2L8Y4y4W2i4K6t1$3N6r3!0C8k6h3&6Q4x3@1b7#2z5o6V1I4x3e0f1^5y4o6y4Q4x3U0k6D9j5h3&6Y4i4K6y4p5P5X3S2Q4y4h3k6o6e0W2)9J5y4X3k6Q4x3@1c8B7M7$3!0F1i4K6t1$3j5h3A6S2P5q4)9K6c8o6q4Q4x3U0k6J5j5h3&6V1L8$3#2Q4x3@1b7H3i4K6u0W2y4e0b7@1y4o6f1@1y4U0b7@1z5o6V1&6z5o6p5#2x3#2)9J5y4X3q4U0N6r3W2G2L8W2)9K6c8s2y4W2j5i4u0U0K9q4)9J5y4X3!0H3k6h3&6Q4x3@1b7H3
而且改成get请求后,referrer限制允许了空referrer的情况,这样我们的利用就更不易被察觉了,因为不需要直接发此链接让受害者点了
4、怎么利用
构造一个https页面,里面是伪装的内容,并且会发出空referer的带着token的get请求(可使用iframe动态加载form来发get请求)来完成如上一些敏感操作
赞赏
赞赏
雪币:
留言: