0 什么是RPO攻击?

RPO(Relative Path Overwrite)相对路径覆盖,是一种新型攻击技术,最早由Gareth Heyes在其发表的文章中提出。主要是利用浏览器的一些特性部分服务端的配置差异导致的漏洞,通过一些技巧,我们可以通过相对路径来引入其他的资源文件,以至于达成我们想要的目的。

就目前来看此攻击方法依赖于浏览器和网络服务器的反应,基于服务器的Web缓存技术和配置差异,以及服务器和客户端浏览器的解析差异,利用前端代码中加载的css/js的相对路径来加载其他文件,最终浏览器将服务器返回的不是css/js的文件当做css/js来解析,从而导致XSS,信息泄露等漏洞产生。

1 技术分析

在分析RPO攻击技术之前,首先我们得先了解几个关于服务器和客户端浏览器在解析和识别上的差异性基础知识。

第一个差异化(apache和nginx)

在apache环境下不会解析%2f:

在nginx环境下会解析%2f:

第二个差异化(nginx和客户端)

rpo\xxx\index.php

地址栏输入

x.js被加载解析

可以看见index.php文件还是rpo/xxx/index.php。但本应是rpo/xxx/.../x.js(即rpo/x.js)的文件却成了/x.js,(即,在x.js的视角下,xxx%2f为一个目录)。

这说明了两点:

1.在nginx中,服务器在加载文件时会解码后找到具体文件返回给客户端。2.在客户端识别url时是不会解码的。

2 实战解析

场景一 加载任意文件下静态资源文件

部署

css xss了解一下:#header { background:url(javascript:alert(‘1’));}  {}*{x:expression(alert(1))}

then

ok

场景二 将返回内容按静态文件解析

补充知识:php url路由(url-rewrite)

在很多使用了url路由的php/python web框架中,经常使用相对路径来加载静态资源文件,而且url都有一个特征:

比如/rpo/user/id/1,相当于user?id=1;

比如/rpo/user.php/name/tester,相当于user.php?name='tester'。

使用相对路径加载静态资源文件会发生什么问题?

现在有如下环境:

我们可以提交内容,然后内容会显示到当前页面,而且使用相对路径加载静态文件style.css和script.js文件,这两个文件原本内容为空,此时我们访问:

http://127.0.0.1:8888/RPO_HACK/user/2

这里表示使用2作为参数请求user接口,此时加载静态文件为:

http://127.0.0.1:8888/RPO_HACK/user/style.css

http://127.0.0.1:8888/RPO_HACK/user/script.js

然后我们提交一段css内容:{} * {color:red;}

当我们访问:http://127.0.0.1:8888/RPO_HACK/user/2/xxx时:

这里表示我们使用2/xxx作为参数访问user接口,返回的内容和使用参数2访问返回的内容相同。

但是浏览器客户端认为2是目录,然后加载的静态文件为:

http://127.0.0.1:8888/RPO_HACK/user/2/style.css

http://127.0.0.1:8888/RPO_HACK/user/2/script.js

所以此时加载静态文件返回的内容也是同使用参数2访问时返回内容相同,但是此时浏览器认为这里加载的是样式文件和脚本文件,从而将返回内容解析为css或者js,所以我们提交的css内容:{} * {color:red;} 成功解析为css,将页面渲染成红色。

TIPS3

这里用到了CSS解析器的一个特性:浏览器在解析CSS样式时,会忽略非法的部分,直到找到正确的开始然后进行解析一直到结束。所以我们上面植入CSS代码,欺骗CSS解析器忽略之前不合法的语法内容,从而加载我们注入的CSS内容,最终页面变成渲染后的红色。

当然这里除了可以使用CSS样式之外,还可以输入payload为CSS XSS向量,例如:

#header { background:url(javascript:alert(‘1’));}

{}*{x:expression(alert(1))}

参考链接:http://blog.nsfocus.net/rpo-attack/

rpo攻击的更多相关文章

  1. RPO攻击 & share your mind

    参考文章: https://xz.aliyun.com/t/2220 http://www.thespanner.co.uk/2014/03/21/rpo/ https://www.lorexxar. ...

  2. 再看CVE-2018-12613 phpmyadmin后台文件包含&&RPO攻击

    写在前面 因为看了朋友的一篇分析又回头想了想自己去年遇到的这个纠结的问题. 去年写过一篇phpmyadmin后台文件包含的文章,写的非常的草草,并没有分析的过程,只是把自己的问题记了下来.当时纠结于最 ...

  3. 一篇RPO漏洞挖掘文章翻译加深理解。

    这是我第一次尝试翻译一篇漏洞挖掘文章,翻译它也是为了加深理解它.这是一篇很有意思的漏洞挖掘文章. 前几天在看fd的博客,偶然看到了这篇文章,虽然有点老了.但是思路真的牛皮.我决定花费时间和精力研究它们 ...

  4. 浅析RPO漏洞攻击原理

    RPO的全称为Relative Path Overwrite,也就是相对路径覆盖,利用客户端和服务端的差异,通过相对路径来引入我们想要的js或者css文件,从而实现某种攻击. 就目前来看此攻击方法依赖 ...

  5. RPO(Relative Path Overwrite)

    Conception(Relative vs Absolute) Abosolute Path: "/etc/hosts"(in Linux), "C:\Windows\ ...

  6. 防御XSS攻击-encode用户输入内容的重要性

    一.开场先科普下XSS 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶 ...

  7. 【趣事】用 JavaScript 对抗 DDOS 攻击 (下)

    上一篇:http://www.cnblogs.com/index-html/p/js-network-firewall.html 对抗 v2 之前的那些奇技淫巧,纯属娱乐而已,并不能撑多久. 但简单. ...

  8. 【趣事】用 JavaScript 对抗 DDOS 攻击

    继续趣事分享. 上回聊到了大学里用一根网线发起攻击,今天接着往后讲. 不过这次讲的正好相反 -- 不是攻击,而是防御.一个奇葩防火墙的开发经历. 第二学期大家都带了电脑,于是可以用更高端的方法断网了. ...

  9. 超大 Cookie 拒绝服务攻击

    有没有想过,如果网站的 Cookie 特别多特别大,会发生什么情况? 不多说,马上来试验一下: for (i = 0; i < 20; i++) document.cookie = i + '= ...

随机推荐

  1. Azure VMSS (2) 对VM执行Generalize操作

    <Windows Azure Platform 系列文章目录> 在本章中,笔者将介绍如何创建Azure Template镜像模板. 1.首先,我们先创建1台Windows Server 2 ...

  2. <亲测>centos7通过yum安装JDK1.8(实际上是openjdk)

    centos7通过yum安装JDK1.8   安装之前先检查一下系统有没有自带open-jdk 命令: rpm -qa |grep java rpm -qa |grep jdk rpm -qa |gr ...

  3. Chrome默认搜索引擎被窜改

    折腾了几个安全软件之后,Chrome浏览器默认搜索引擎被窜改,且无法删除,提示“管理员安装”,另外在插件栏出现了一个unTabs的东西,也无法删除,“受政策保护之类的”.搜索后找到一篇文章“Unabl ...

  4. kubernetes学习笔记之七: Ingress-nginx 部署使用

    一.Ingress 简介 在Kubernetes中,服务和Pod的IP地址仅可以在集群网络内部使用,对于集群外的应用是不可见的.为了使外部的应用能够访问集群内的服务,在Kubernetes 目前 提供 ...

  5. 200用户的并发用户配置(CSV)

    我来解释一下为什么标题是,设置多个参数对浏览器进行访问,原本想写成对app或者web,但是我想只要有参数的地方无聊是app或者web或者小程序,都是可以用到设置参数的. 第一步:在线程组下添加参数配置 ...

  6. PHP判断是手机端还是PC访问

    function isMobile(){ $useragent=isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ' ...

  7. leetcode152

    class Solution { public: int maxProduct(vector<int>& nums) { if(nums.empty()) ; ) ]; ]; // ...

  8. 模拟器 Unable to execute simctl install Error 117

    ios 模拟器 Unable to execute '"/usr/bin/xcrun" simctl install  "/Users/tt/PAServer/scrat ...

  9. ABAP-FTP-执行

    1.界面 2.程序 ZFID0004_FTP_EXEC 主程序: *&------------------------------------------------------------- ...

  10. CentOS6.5搭建OpenVas完全搭建手册(搭建过程总结及小记)

    一.OpenVAS 介绍 1.关于OpenVAS OpenVAS(Open Vulnerability Assessment System)是一套开源的漏洞扫描系统,早期Nessus 是其中一个最流行 ...