分你所享、信息共享、轻松分享
来自民间的思想 | 送人玫瑰,手有余香。

RPO攻击方式的探究

RPO攻击方式的探究

2018强网杯有一道web题目,看似简单实则暗藏玄机,很早就放出来但是直到比赛结束分数一直居高不下,考察的重点就是RPO漏洞的利用,你对RPO又了解多少?

什么是RPO?

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

在什么情况下漏洞会触发

触发这个漏洞有两个基本的前提:
①Apache 配置错误导致AllowEncodedSlashes这个选项开启(对Apache来说默认情况下 AllowEncodedSlashes 这个选项是关闭的),或者nginx服务器。 ②存在相对路径的js或者css的引用

对第一个前提的理解

我在RPO目录下新建了两个php文件apache.php 和 nginx.php 访问成功就会分别输出Apache 和 Nginx ,还有一个空的test目录。 RPO分析1.png 简单的测试如下: Apache 2018强网杯RPO攻击方式的探究 Nginx 2018强网杯RPO攻击方式的探究 可以清楚地看到对于完全相似的URL,不同的服务器的处理方式是不同的:Apache服务器默认情况下不认识..%2f这个符号,认为..%2fapache.php是一个文件 http://localhost/RPO/test/..%2fapache.php => ..%2fapache.php ???? (=_=)||| 所以没有找到。 但是Nginx不同,它能自动地把..%2f进行url解码,转化为../ 这个符号对于服务器来说就是向前跳转一个目录,在它眼中我们请求的就是 http://localhost/RPO/test/../nginx.php => http://localhost/RPO/nginx.php 于是就访问到了我们RPO目录下的nginx.php.

两个前提结合起来会发生什么?

①我们可以跨目录读取js 实验环境: 2018强网杯RPO攻击方式的探究 RPO 目录下创建了index.php f访问之后就会加载本目录下的a.js,注意这个a.js前面没有/(斜杠)代表是相对路径 文件内容如下: <html> <head></head> <body> <script src=a.js></script> </body> </html> <?php echo "js in test folder"; ?> 与index.php同目录下的test文件夹中有a.js,一旦被调用就会弹出对话框