用户
搜索
  • TA的每日心情
    擦汗
    2019-1-31 10:58
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    官方账号

    Rank: 7Rank: 7Rank: 7

    182

    主题

    182

    帖子

    1659

    魔法币
    收听
    0
    粉丝
    1
    注册时间
    2018-12-21

    i春秋认证

    发表于 2019-8-13 19:07:42 01082

    22.png

    先让我们看看如下这个web应用示例:

    <html>
        <meta http?equiv="Content?Security?Policy"
            content="script?src 'nonce?...' 'unsafe?eval'">
        <div id="template_target"></div>
    
        <script type="application/template" id="template">
            Hello World! 1 + 1 = {{ 1 + 1 }}
        </script>
    
        Your search is <?php echo $_GET['q']; ?>
    
        <script nonce="...">
            let template = document.getElementById('template');
            template_target.innerHTML = template.innerText.replace(/{{(.?)}}/g,eval)
        </script>
    </html>
    

    以上这段简单的HTML代码可能反映了现在渗透测试人员经常碰到的模板化Web应用。某些模板内容存储在Web页面中,然后再转换为HTML代码的一部分。上段代码中含有id为template的HTML元素内容先被读取,然后再执行{{}}括号内的内容,最后在某个单独HTML元素中呈现出来。

    Hello World! 1 + 1 = 2
    Your search is ........... 
    

    其次,这段代码应用程序会在页面上打印URL中的参数值。这显而易见是一个XSS漏洞,但由于CSP(内容安全策略)的存在,攻击者并不能直接执行javascript。虽然直接运行javascript的路被堵死,但是我们可以找到其他绕过方法。

    乍一看,貌似eval函数是一个可以利用的点,我们或许可以直接插入某些特制代码,让eval函数去执行。

    为了实现这点,我们必须插入HTML元素中id为template的代码。但在我们插入语句的前面已有id为template的HTML元素,而document.getElementById('template')只会去获取第一个HTML元素,并不是我们所输入的语句。

    此刻,我们需要换个角度,看看浏览器是否能出现“意外”,以前就出现过很多浏览器的异常解析所导致的XSS攻击。我把所有能使用的tag都收集起来进行测试,看看是否有惊喜。测试代码如下:

    <div id="template">First Tag</div>
        {% for tag in tag_list %}
            <{{tag}} id="template">{{tag}}</{{tag}}>
        {% endfor %}
    <script>console.log(document.getElementById('template'));</script>
    

    当程序运行完毕时,我得到一个奇怪的结果:当轮到<html>时,页面结构似乎发生了大变,此时已不再是<div>排在前面。让我们看下当插入<html id="template">时的变化:

    33.png

    此时<html>已排在文档顶部(在我所测试的所有浏览器中都是如此!),现在getElementById('template')将获取<html>中的恶意数据,而不是<div>的内容。

    只需简单的?q=<html id="template">{{ alert("xss") }}</html>就可进行攻击

    最终,由于浏览器这个“莫名其妙”的特性,我们绕过了CSP成功进行了XSS攻击!

    本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场:https://nosec.org/home/detail/2860.html
    来源:https://pagedout.institute/download/PagedOut_001_beta1.pdf(该PDF文档的第62页)
    
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册