HACK80 首页  立即注册  登录
现在注册
已注册用户请  登录
最新活动
CSA2018
HACK80    技术文档

一个URL跳转引发的一系列“惨案”

  •   djg222000 · 2018-1-9 21:47:16 · 679 次点击 ·阅读模式     

    马上注册,加入HACK80!与我们一起交流。

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    前言
    在知乎的题目和答案中,插入的链接都会变成https://link.zhihu.com/target=xxx的形式进行URL跳转,如下图。然而这个看似简单的功能的实现上,曾引发过一系列的问题,过程挺精彩,所以我就来做个总结,以重新体验一下这个过程。声明:以下小节中提到的问题均来自WooYun已经公开的漏洞,复现的代码也是纯属我个人YY。
    0x00 没有任何过滤
    猜测知乎可能的实现方式:
    在上面这个实现中,我们可以发现对于”并没有进行转义,因此我们可以传入”来闭合前面的双引号,然后再插入我们的JS代码。运行上面的程序python server.py,然后使用curl请求:
    0x01 对参数做了urlencode编码
    在上面的漏洞报告之后,(猜测)知乎的工程师按照了洞主给出的修复方案进行代码的修改,修改后的代码如下:
    现在,我们如果在target参数中传入”,则先会被转义成%22插入在页面中,从而无法闭合之前的双引号。看似一个挺好的的解决方案吧,然而,却还不够。
    强烈推荐仔细阅读这个案例哦,洞主的分析利用过程保证你看了会觉得很有收获。
    0x02 使用WTForm进行URL校验
    (猜测开发内心OS)既然如此,Python不是有个叫做WTForm的库可以帮我们校验用户的输入是否合法吗?我们可以利用里面的wtforms.validators.URL进行URL的检查,这样子用户的输入该合法了吧。
    这里也有可能是开发自己写正则进行匹配,问题本质上都是一样的,正则写的不好。上面的写法虽然已经能过滤到前面提到的情况,然而,WTForm的正则过滤并没有写好,导致继续被XSS。如下的URL:
    0x03 除了XSS之外的一个彩蛋
    这里本身其实是一个任意URL调整,可以在某些实现不严格的OAuth2.0的过程中利用偷取用户的授权code,然后使用用户的身份进行登录哦。在我之前的博客已经分析过这个问题,这里就不再写了。案例:微博上你点我链接我就上你绑定过的知乎账号
    总结
    做一个程序员不容易啊!请善待我们。


    679 次点击  
    收藏  分享
    添加一条新回复
    您需要登录后才可以回帖 登录 | 立即注册

    本节点积分规则
    关闭

    推荐上一条 /1 下一条

    QQ
    小黑屋   ·   手机版   ·   236 人在线 最高记录 5500   ·   TOP
    我们很年轻,但我们有信念、有梦想!

      我们坚信只有今天付出了,才有机会看到明天的太阳!现在!加入我们,给你一个气氛优秀的技术圈子。  
    GMT+8, 2018-4-20 04:59, Processed in 0.055535 second(s), 19 queries .
    快速回复 返回顶部 返回列表