1. Conception(Relative vs Absolute)

    Abosolute Path: “/etc/hosts”(in Linux),

    “C:\Windows\System32\Drivers\etc\hosts”(in Windows)

    Relative Path:”./hosts” or “hosts”(when in “etc” folder)

This also valid in website.

Absolute URL: “https://www.site.com/styles.css

Relative URL in html:









In this case, the styles.css is a relative path in server’s root directory.

var/www/

|— index.html

|— styles.css

Using relative directory can be easier when has a complex file structure.

var/www

|— index.html

|— login

| |— login.php

| |— register.php

| |— pc.css

| |— mobile.css

|— static

|— js

| |— jQuery.js

| |— bootstrap.js

|— css

|— styles.css

In this case, we can load css using relative path like “pc.css”(Its absolute path is /login/pc.css)

  1. Example(A missing css style)

Client side(Incorrect url parse):

Considering the following urls:

www.site.com/login/login.php

www.site.com/login/login.php/

In server side, the two urls returns same page named index.php.

But as client side, the two urls differs from each other.

To load css style with relative urls, client requests resource as follows:

www.site.com/static/css/style.css

www.site.com/login/static/css/style.css

Obversely the second url is invalid which would return 404 from server when adding a forward slash.

In this case we can perform XSS without server side checking.

Server side(Incorrect server action and properties):

Some server framework like Apache and Nginx parse url differently.

Urls as follows:

www.site.com/login%2flogin.php

Apache would return 404 cause there is no file named login%2flogin.php, at the same time, Nginx would return the login.php page currectly.

  1. Get it work

    We build a website structured as follows:

    var/www/

    |— index.php

    |— styles.css

index.php











Hi, my name is .

Press the green button below to friend me and the red to cancel.

<button id=”green”>...</button>
<button id=”red”>...</button>

When accessing the page through https://www.site.com/index.php, the included stylesheet will be loaded from https://www.site.com/style.css. If the page is loaded through https://www.site.com/index.php/[anything] instead, the stylesheet will be loaded from https://www.site.com/index.php/style.css.

As stated before, the URL router on the server side will ignore everything after friend.php/ and the included stylesheet will therefore be loaded from the page itself. By changing the name on a vulnerable social network, the attacker can control the value of name and, consequently, the stylesheet.

We can get valid CSS within the HTML page by putting “{}” in front of the CSS, so the result is this:

https://www.site.com/index.php?name={}#green{background-color:red;}#red{background-color:green;}

The button intended to be green is now red.

  1. Share your mind(CTF Writeup)

    Write article section to post text, Overview section to view text, Reports section to post url to bot.

The source code contents following segment:



Which has a RPO attack exploit with a relative path.

So we can exploit it this way:

Write article section to post a XSS file. Then edit a url using PRO exploit with Overview section’s text as malicious JavaScript. Bot will access malicious JavaScript after post the RPO url.

  1. Additional Information

    Phpinfo url mode:

    https://www.site.com/login/login.php/u/user/p/pass

This url is equivalent as

https://www.site.com/login/login.php?u=user&p=pass

补充2018/4/14

RPO简介:

RPO(Relative Path Overwrite) 攻击又称为相对路径覆盖攻击,利用的是nginx服务器、配置错误的Apache服务器和浏览器之间对URL解析出现的差异,并借助文件中包含的相对路径的css或者js造成跨目录读取css或者js,甚至可以将本身不是css或者js的页面当做css或者js解析,从而触发xss等进一步的攻击手段。

RPO原理:

上文英文详细介绍。

RPO漏洞触发前提:

①Apache 配置错误导致AllowEncodedSlashes这个选项开启(对Apache来说默认情况下 AllowEncodedSlashes 这个选项是关闭的),或者nginx服务器。

如何理解:

在Nginx服务器下,当我们访问“http://rpo.com/test/..%2fshow.php”时,nginx服务器默认会返回“http://rpo.com/show.php”页面并显示,这是因为在nginx的路由解析中,“%2f”是url编码过的“/”,这就意味着“..%2f”会被解析成退回上级目录,所以造成了跨目录调用。

在apache服务器下,nginx的情况默认不会出现,相反apache会将“..%2fshow.php”当做是一个文件然后去访问,肯定访问不到返回404。而当apache服务器配置文件中AllowEncodedSlashes=true时,上面的跨目录调用会复现。

②存在相对路径的js或者css的引用

如何理解:

一般情况下我们访问css或者js静态资源时会使用类似"http://rpo.com/test/style.css"的绝对路径进行访问。但是一个网站如果想要迁移更方便或者开发者为了省事,通常会使用相对路径的静态资源加载,例如“http://rpo.com/test/show.php”想要加载test目录下的style.css样式文件,会使用“style.css”直接进行访问。当使用相对路径的资源调用时,就有可能会有rpo漏洞

漏洞利用实例:

待补充

RPO(Relative Path Overwrite)的更多相关文章

  1. Security Report: Stop using relative path to import CSS files

    Detecting and exploiting path-relative stylesheet import (PRSSI) vulnerabilities   Early last year G ...

  2. How to put a relative path for a DLL statically loaded?

    How to put a relative path for a DLL statically loaded? I have a DLL made in Delphi 7/Windows XP tha ...

  3. Hive报错 Failed with exception java.io.IOException:java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:user.name%7D

    报错信息如下 Failed with exception java.io.IOException:java.lang.IllegalArgumentException: java.net.URISyn ...

  4. hive启动时报错 java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D at org.apache.hadoop.fs.Path.initialize

    错误提示信息如下 错误信息如下 [root@node1 bin]# ./hive Logging initialized -bin/lib/hive-common-.jar!/hive-log4j.p ...

  5. c# Relative Path convert to Absolute Path

    Reference: http://stackoverflow.com/questions/4796254/relative-path-to-absolute-path-in-c http://sta ...

  6. firefox ie 比较 relative path

    relative path 对于firefox ie 来说是不同的 在ie中 <base href="/">起基础url作用 此时 <a href="& ...

  7. FAILED java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI:hdfs:192.*

    运行的参数配置 hdfs:192.168.58.180/cf/userItem.txt 应该写成 hdfs://192.*

  8. Caused by: java.net.URISyntaxException: Relative path in absolute URI

    <property> <name>hive.exec.scratchdir</name> <value>/tmp/hive</value> ...

  9. Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bhive.session.id%7D_resources

    原因:环境变量设置问题 <property>    <name>Hive.exec.local.scratchdir</name>    <value> ...

随机推荐

  1. STL --> list用法

    List介绍 Lists将元素按顺序储存在链表中.与 向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢. assign() // 给list赋值 back() // 返回最后 ...

  2. hostPath Volume - 每天5分钟玩转 Docker 容器技术(148)

    hostPath Volume 的作用是将 Docker Host 文件系统中已经存在的目录 mount 给 Pod 的容器.大部分应用都不会使用 hostPath Volume,因为这实际上增加了 ...

  3. [日常] 最近的一些破事w...

    更新博文一篇以示诈尸(大雾 (其实只是断了个网然后就彻底失踪了一波w...连题解都没法写了QAQ) $ \tiny{诈尸的实际情况是老姚提前走还把十一机房门锁了然而钥匙在联赛的时候就还了于是并不能进去 ...

  4. Java 自定义实现链表

    自定义实现链表很简单,只需要明白链表是什么样子的数据结构. 下图表示一种单向列表.其中指针first指向队头,last指向队尾,curr指向当前读的数据. 下面是我的实现代码,很简单,明白上述结构后, ...

  5. 利用jmeter做一个简单的性能测试并进行参数化设置

    1.新增一个线程组,并在下面添加基本原件,包括:监听器.http请求默认值和一个事务控制器 在http请求默认值中填写 ip 地址和端口号,协议类型默认为http 2.添加代理服务器,以便之后进行录制 ...

  6. PTA的使用简介

    PTA(Programming Teaching Assistant)是PAT(Programming Ability Test)的配套练习平台. 1.关于PAT PAT(Programming Ab ...

  7. Beta冲刺NO.7

    Beta冲刺 第七天 昨天的困难 昨天的困难在一些多表查询上,不熟悉hibernate的套路,走了很多弯路. 第一次使用图表插件,在图表的显示问题上花了一定的时间. 对于页面绑定和后台数据自动填充的理 ...

  8. win7如何以管理员身份运行命令提示符(cmd)

    1.进入到: C:\Windows\System32 2.找到cmd.exe文件 3.右键单击 ,选择 以管理员身份运行.

  9. python第三方库requests详解

    Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库.它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTT ...

  10. codevs 3342 绿色通道

    codevs 3342 绿色通道 http://codevs.cn/problem/3342/ 难度等级:黄金 题目描述 Description <思远高考绿色通道>(Green Pass ...