前言

Record一篇RPO(Relative Path Overwrite)相对路径覆盖漏洞,其于2014年由Gareth Heyes提出,2016年后filedescriptor在Google发现了多个RPO的问题使其二次出现在人们的视野中。

目录

0x00漏洞原理
0x01漏洞基础知识
0x02漏洞组合利用

0x00漏洞原理

RPO漏洞主要是由于服务器和浏览器对特殊URL的处理存在差异,导致攻击者可通过一些方式在页面中载入攻击者可控的资源文件,例如JS、CSS文件,以达到攻击者的目的,如盗取Cookie。

0x01漏洞基础

在说漏洞利用之前,先了解漏洞基础知识,这里,我的网站服务器是Apache,且已在httpd.conf中设置了AllowEncodedSlashes为On,浏览器是Chrome,以下都为该场景情况。

首先,在浏览器中输入URL,http://www.bywalks.com/rpo/test/..%2f1.html

浏览器和服务器对该URL的处理不同,服务器可以正常找到rpo目录下的1.html文件,并把1.html文件的内容返回给浏览器,而浏览器会认为..%2f1.html是一个文件,服务器返回的的内容是访问/rpo/test/目录下的文件..%2f1.html所返回的。

举个场景,在个人博客做了个演示Demo,给大家分析该问题
目录结构如下,博客根目录下存在rpo目录,rpo目录下存在1.html和test目录,test目录下存在a.js

1.html文件内容为

1
2
3
4
5
6
7
<html>
<head></head>
<body>
<script src=a.js></script>
</body>
</html>
123

a.js文件内容为

1
alert("Read file successfully");

访问之前给过的URL:http://www.bywalks.com/rpo/test/..%2f1.html ,结果如下图

1.html会加载test目录下的a.js文件,这是怎么回事呢?

讲述一遍加载顺序,你就可理解这个问题。
1:输入并访问http://www.bywalks.com/rpo/test/..%2f1.html,服务器可正常识别编码后的URL,服务器找到rpo目录下的1.html文件,并把1.html文件的内容返回给浏览器;
2:浏览器接受到1.html文件的内容,试图加载同目录下的a.js文件;
3:浏览器不可正常识别编码后的URL,同一URL浏览器会认为1.html返回的内容是访问
http://www.bywalks.com/rpo/test/目录下的..%2f1.html文件所返回的,所以浏览器会加载/rpo/test/目录下的a.js文件,这是一个超预期的行为,会造成相应的危害。

0x02漏洞组合利用

RPO+OpenRedirect

假设漏洞场景:
访问http://www.bywalks.com

返回

1
2
3
4
5
6
<html>
<head></head>
<body>
<script src=a.js></script>
</body>
</html>

访问http://www.bywalks.com//evil.com/,会跳转到evil.com

以上场景下,如果evil.com根目录下存在a.js文件,访问http://www.bywalks.com//evil.com/%2e%2e即会载入evil.com的a.js文件,这是为什么呢?了解一下加载顺序
1:访问http://www.bywalks.com//evil.com/%2e%2e,服务器返回访问http://www.bywalks.com的内容;
2:浏览器接受http://www.bywalks.com的内容,加载a.js,尝试访问http://www.bywalks.com//evil.com/a.js获取js文件;
3:触发OpenRedirect漏洞,访问evil.com/a.js文件。

RPO+Upload File

假设漏洞场景:
访问http://www.bywalks.com

返回

1
2
3
4
5
6
<html>
<head></head>
<body>
<script src=a.js></script>
</body>
</html>

存在上传js文件功能,上传后的地址为http://www.bywalks.com/user/1/a.js,

访问http://www.bywalks.com/user/1/..%2f..%2f,即可加载http://www.bywalks.com/user/1/a.js文件,原理与之前一致。

参考文章

http://blog.nsfocus.net/rpo-attack/
https://blog.innerht.ml/rpo-gadgets/
https://www.mbsd.jp/Whitepaper/rpo.pdf
https://www.youtube.com/watch?v=0-sA_kAVw74
https://www.freebuf.com/articles/web/166731.html
https://speakerdeck.com/filedescriptor/exploiting-the-unexploitable-with-lesser-known-browser-tricks?slide=42

▼更多精彩推荐,请关注▼