前言

强网杯初赛已经告一段落,大佬们的wp也逐渐放出,这篇博客就从强网杯初赛webShare 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/路径之外的路径采用编码魔术(%2f代替/)将不起作用, 也就是说,只能在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 攻击相关推荐

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

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

  2. RPO攻击方式的探究

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

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

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

  4. RPO 相对路径覆盖攻击

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

  5. mysql远程rpo为0_RPO攻击

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

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

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

  7. CSS RPO Gadgets

    RPO Gadgets 这篇文章并不是讲述Return Oriented Programming (ROP),误入的可以点右上角的红叉了.由于我想介绍的技术是Relative Path Overwri ...

  8. DenyHosts阻止SSH暴力攻击

    DenyHosts是运行于Linux上的一款预防SSH暴力破解的软件,可以从http://sourceforge.net/projects/denyhosts/files/进行下载 然后将下载回来的D ...

  9. 新型Web攻击技术——Web缓存欺骗

    你是否曾想过你只需要访问如:https://www.paypal.com/myaccount/home/stylesheet.css或https://www.paypal.com/myaccount/ ...

最新文章

  1. Laravel Dcat Admin 安装
  2. VIM 高校实用配置实践
  3. 滴滴出行2020数据分析面试题
  4. BGWN项目轶事之主导Global Weekly Meeting
  5. Winform中设置ZedGraph的曲线符号Symbol以及对应关系
  6. 电信级的RSA加密后的密码的破解方法
  7. brew update失败提示:/System/Library/Frameworks/Ruby.framework/。。。解决方法
  8. Impala使用RPM安装过程
  9. Android5.0 CheckBox颜色修改
  10. C#求学之路MVC《医院管理系统》项目研发文献
  11. 全国实时公交查询API接口
  12. python 文字快闪视频制作
  13. 分列:将excel单元格的内容拆分为两列
  14. 程序员怎样才能实现财富自由
  15. 汇编inc为什么不影响cf_为什么INC和DEC指令不会影响进位标志?
  16. activiti会签多人审批(通过以及驳回)
  17. 使用 Python 将 MP4视频 转换为GIF动画
  18. Developing a new LMS function
  19. AOJ 2534 Dictionary
  20. 操作系统hpf算法事例_操作系统调度算法是什么

热门文章

  1. Apache Prefork、Worker和Event三种MPM分析
  2. CPDA 第 8 次课改,全新课程上线——暨上海第 46 期正式开课
  3. springboot视图解析器配置
  4. 将演示文稿转换为视频
  5. C++基础(二)-hello world
  6. BHAR-事件研究法-示例数据Stata计算代码
  7. moviepy音视频开发:音频剪辑基类AudioClip
  8. 万里鹏程,青云独步——记惠普Helion的前世今生
  9. 卡尔曼滤波,最最容易理解的讲解.找遍网上就这篇看懂了.
  10. 什么是静态资源服务器?