从Share your mind到RPO 攻击
前言
强网杯初赛已经告一段落,大佬们的wp
也逐渐放出,这篇博客就从强网杯初赛web
的Share your mind
这题来探讨一下RPO
攻击~
前置链接:
题目名称:Share your mind
第二届强网杯Web Writeup by @l3m0n
ROP is what?
RPO(Relative Path Overwrite)
相对路径覆盖,是一种新型攻击技术,最早由Gareth Heyes在其发表的文章中提出。主要是利用浏览器的一些特性和部分服务端的配置差异导致的漏洞,通过一些技巧,我们可以通过相对路径来引入其他的资源文件,以至于达成我们想要的目的。
就目前来看此攻击方法依赖于浏览器和网络服务器的反应,基于服务器的Web缓存技术和配置差异,以及服务器和客户端浏览器的解析差异,利用前端代码中加载的css/js的相对路径来加载其他文件,最终浏览器将服务器返回的不是css/js的文件当做css/js来解析,从而导致XSS,信息泄露等漏洞产生。
初识 RPO 攻击
此部分来自RPO攻击 @Ethan
来自google
的一个例子:
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>
从上述代码中我们很容易看到../../
这样的css
引用结构
下一步是找出目标服务器解析路径的方式。对浏览器来说,目录是通过 /
来分隔的,然而对服务器来说,路径中包含 /
并不意味着存在一个目录。例如,JSP
接收路径参数是以;作为分隔符的,例如http://example.com/path;/notpath
,而浏览器并不识别这种模式,而当做是存在目录的路径。
同样,Google Toolbar
(谷歌工具栏)也有它自己独特的解析路径的方式。在发送请求给服务器之前,会对请求进行处理并解码所有的路径,但是谷歌浏览器并不会强制转换%2f
为/
,因此可以将路径中的/替换为%2f
。
跳目录
访问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 - 导入的css样式:
/tools/
+ toolbar/buttons/…/…/style.css
以上”+”
左边高亮部分表示基本路径,浏览器认为基本路径是 /tools/toolbar/buttons/
而不是 /tools/toolbar/buttons/apis/
, 因此导入相对路径的样式../../style.css
会额外多跳一层目录路径,本应该导入css
的路径为”tools/toolbar/style.css”
, 而现在为”tools/style.xss”
。
制造假目录
除了跳目录以外,还能制作假目录,例如,我们想在导入的样式路径为/tools/fake/styles.css
, 可以构造如下url
: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
- 导入的css样式: /tools/fake/…%2ftoolbar/buttons/…/…/ + style.css
这里我们添加了两个虚假的路径:fake
/和..%2f
, 以便他们能在服务器相互抵消,同时浏览器认为fake/
是一个真实的目录,并且,..%2ftoobar
是另外一个目录。理论上,我们可以再根路径上导入任何样式,通过https://www.google.com/*/styles.css
, 然而不幸的是代理只在https://www.google.com/tools/*/styles.css
路径上有效,换句话说,任何在/tools/
路径之外的路径采用编码魔术(%2
f代替/
)将不起作用, 也就是说,只能在https://www.google.com/tools/*/styles.css
导入任何样式。
PS:很遗憾的是,上述google的这个例子早在14年被发现,现已无法验证,故后续相关利用这里不再继续说明,下面用18强网杯的share your mind来举例说明RPO
的利用方法~
share your mind,biubiubiu!
参考链接:强网杯-writeup @Pupil
注意到index.php
存在相对路径引用,考虑RPO
新建一个文章,内容输入js代码比如alert(1)
然后访问http://39.107.33.96:20000/index.php/view/article/635/..%2f..%2f..%2f..%2findex.php
把635替换成你的文章代码,这里对于服务器来说访问的是
http://39.107.33.96:20000/index.php
但是对于浏览器来说他访问的就是
http://39.107.33.96:20000/index.php/view/article/635/..%2f..%2f..%2f..%2findex.php
然后这个时候浏览器会发起js
请求去请求原本index.php
会加载的../static/js/bootstrap.min.js
就是向
http://39.107.33.96:20000/index.php/view/article/635/..%2f..%2f..%2f..%2findex.php/../static/js/bootstrap.min.js
相当于
http://39.107.33.96:20000/index.php/view/article/635/static/bootstrap.min.js
这里访问的结果和访问
http://39.107.33.96:20000/index.php/view/article/635/
也就是你的文章的内容是一样的(不明白的可以自己本地测试),不同的是浏览器是以js
引擎去解析你的文章的,也就是会把你的文章当成一段js去执行。所以这里就可以绕过<>
的过滤执行xss
了。
ps:这里还有一个点,Mark一下就是String.fromCharCode
解决过滤了"
和'
补充链接:RPO攻击技术浅析
从Share your mind到RPO 攻击相关推荐
- 【RPO技巧拓展】————5、RPO攻击初探
RPO(Relative Path Overwrite) 攻击又称为 攻击,依赖于浏览器和网络服务器的反应, 利用服务器的Web缓存技术和配置差异. 本文中的例子利用css进行攻击,相当于利用页面中 ...
- RPO攻击方式的探究
什么是RPO? RPO (Relative Path Overwrite)相对路径覆盖,作为一种相对新型的攻击方式,由 Gareth Heyes在2014年首次提出,利用的是nginx服务器.配置错误 ...
- XSS:RPO(Relative Path Overwrite)攻击
0x00 具体原理参考: Infinite Security: (Relative Path Overwrite) RPO XSS RPO Gadgets RPO攻击 0x01 RPO攻击首先利用的是 ...
- RPO 相对路径覆盖攻击
RPO (Relative Path Overwrite) 相对路径覆盖,最早由 Gareth Heyes 在其发表的文章中提出.主要是利用浏览器的一些特性和部分服务端的配置差异导致的漏洞,通过一些技 ...
- mysql远程rpo为0_RPO攻击
RPO攻击 最近见到几个题,了解到一种攻击方式,就是有RPO攻击 0x00概述 浏览器解析页面路径有误而导致css文件加载路径错误,从而引发的任意解析. 引子: 1.在php有些框架中会有些pathi ...
- 【RPO技巧拓展】————3、IIS和.Net应用程序中的非根相对路径覆盖(RPO)
在这篇博文中,我将向您展示一种更好的方法来利用ASP.NET Web窗体应用程序中的非根相对路径覆盖问题.这是一个低风险漏洞,可用于将资源(如样式表)甚至动态JavaScript注入受影响的网页. 介 ...
- CSS RPO Gadgets
RPO Gadgets 这篇文章并不是讲述Return Oriented Programming (ROP),误入的可以点右上角的红叉了.由于我想介绍的技术是Relative Path Overwri ...
- DenyHosts阻止SSH暴力攻击
DenyHosts是运行于Linux上的一款预防SSH暴力破解的软件,可以从http://sourceforge.net/projects/denyhosts/files/进行下载 然后将下载回来的D ...
- 新型Web攻击技术——Web缓存欺骗
你是否曾想过你只需要访问如:https://www.paypal.com/myaccount/home/stylesheet.css或https://www.paypal.com/myaccount/ ...
最新文章
- Laravel Dcat Admin 安装
- VIM 高校实用配置实践
- 滴滴出行2020数据分析面试题
- BGWN项目轶事之主导Global Weekly Meeting
- Winform中设置ZedGraph的曲线符号Symbol以及对应关系
- 电信级的RSA加密后的密码的破解方法
- brew update失败提示:/System/Library/Frameworks/Ruby.framework/。。。解决方法
- Impala使用RPM安装过程
- Android5.0 CheckBox颜色修改
- C#求学之路MVC《医院管理系统》项目研发文献
- 全国实时公交查询API接口
- python 文字快闪视频制作
- 分列:将excel单元格的内容拆分为两列
- 程序员怎样才能实现财富自由
- 汇编inc为什么不影响cf_为什么INC和DEC指令不会影响进位标志?
- activiti会签多人审批(通过以及驳回)
- 使用 Python 将 MP4视频 转换为GIF动画
- Developing a new LMS function
- AOJ 2534 Dictionary
- 操作系统hpf算法事例_操作系统调度算法是什么