「强网杯」RPO相对路径覆盖Attack
in Pentest with 0 comment

「强网杯」RPO相对路径覆盖Attack

in Pentest with 0 comment

RPO(Relative Path Overwrite)

RPO(Relative Path Overwrite)相对路径覆盖,是一种利用相对URL路径覆盖目标文件的一种攻击手段。
该攻击方法利用的是浏览器和服务器对资源加载的差异,通过一些方法和技巧,在相对路径处引入攻击者可控的静态文件,从而实现XSS,信息泄露等攻击。下面详细了解RPO相对路径覆盖攻击相关原理

服务端差异

正常情况下访问:
a-n-def.png
但在Apache中将/编码为%2f后,服务器无法识别url,返回404。
但是在Nginx中将/编码为%2f后,服务器可以识别编码后的url,返回200:

浏览器和服务端路径识别差异

可见在Nginx中,编码后的URL服务器可以正确识别。即会把%2f转化为/正确将静态文件返回给浏览器。
但是在客户端浏览器识别这个编码后的URL时是不会解码的。
rpo-2.png

比如:编码前加载js/css文件时的路径是:

http://ip:port/rpo/x.js(x.css)

编码后加载的js/css文件路径为:

http://ip:port/x.js(css)

我们就可以归纳为:

客户端浏览器在加载相对路径文件时是以最后一个/为相对目录加载具体资源文件的。

RPO攻击原理

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

测试环境:
/rop/111/1.php文件中通过相对路径加载上层目录/rpo/x.js和/rpo/x.css文件

rpo-3.png

然后此时我们有一个/rpo/222/x.js文件,x.js文件中的内容为js代码,alert(/1/)
假如/rpo/222/x.js的内容可控,但是不能利用这个文件本身进行XSS漏洞。这里就利用RPO配合进行XSS。
即利用RPO使1.php加载到/RPO/222/x.js文件,这样就可以执行js代码了。
如何操作呢?
输入如下URL:

/rpo/222/2.php%2f..%2f..%2f111/1.php

服务端将识别为:

/rpo/222/2.php/../../111/1/php实际上就是/rpo/111/1.php

浏览区识别为:

/rpo/222/2.php%2f..%2f..%2f111/1.php,把2.php%2f..%2f..%2f111当成一个目录,然后在加载静态资源文件。从而最后加载的静态文件为/rpo/222/x.js.

成功加载:
rpo-4.png

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

pathinfo模式

MVC模式搭建的网站,带有M、C、A三个参数即module、controller、action,这些参数需要用&符号隔开,若参数量很多,就显得特别的不友好。PathInfo模式功能就是将这一长串缩短简化,让这个路径变得更加友好的显示。
传统的访问路径:

http://www.example.com/index.php?m=module&c=controller&a=action&var1=vaule1&var2=vaule2.....

pathinfo模式:

http://www.example.com/index.php/module/controller/action/var1/vaule1/var2/value2.....

由pathnfo模式和框架相对路径引用引起的RPO

很多使用url_rewrite 的开发框架中,经常使用相对路径来加载静态资源文件。
当访问:

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

但是当我们访问

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

时,这里表示将2/xxx作为参数传递给user接口。而浏览器此时认为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/js代码。为什么会执行呢?

浏览器在解析CSS样式时,会忽略非法的部分,直到找到正确的开始然后进行解析一直到结束。所以我们上面植入CSS代码,欺骗CSS解析器忽略之前不合法的语法内容,从而加载我们注入的CSS内容,最终页面变成渲染后的红色。
CSS规范规定:在某些情况下,user agents必须忽略非法样式表的一部分。这个规范定义为忽略,这意味着user agents解析非法部分,除非是明确匹配到了开始和结束,否则予以忽略,也就是简单的说,解析其中格式正确完整的部分,忽略非法语法。 所以上述的CSS文件的返回就会被渲染

怪异模式和标准模式

再来看一个例子:

<html>
<link href="style.css" rel="stylesheet" />
<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>
</html>
  1. 若正常请求http://127.0.0.1:8000/a.php,浏览器就会请求http://127.0.0.1:8000/style.css

  2. 若我们访问http://127.0.0.1:8000/a.php/{}*{background-color:red}/,浏览器就会请求http://127.0.0.1:8000/a.php/{}*{background-color:red}/style.css,而这个请求会被a.php响应。
    在CSS规范中定义:

在某些情况下,user agents必须忽略非法样式表的一部分。这个规范定义为忽略,这意味着user agents解析非法部分,除非是明确匹配到了开始和结束,否则予以忽略,也就是简单的说,解析其中格式正确完整的部分,忽略非法语法。

所以上述的页面会被渲染为红色,也就是说执行了{}*{background-color:red}这段CSS代码。
rpo-guai.png

怪异模式

在怪异模式下,浏览器将会忽视其中Content-Type: text/html等声明文档类型的描述,将其中的任何css解析执行,反之如果是位于标准模式的话,浏览器将只会解析Content-Type: text/css,而其余则会报错
而标准模式下,则不会解释执行

强网杯RPO

通过test用户登录或发现有人测试了大量的XSS-payload但都不会成功,提示说XSS的点不在report。xss bot使用的是phantomjs。
访问index.php会发现又一个静态文件是使用相对路径表示。
rpo-qwb.png
在添加文章那添加一篇文章内容为:alert(1)的文章。
获取文章路径:

http://39.107.33.96:20000/index.php/view/article/41801

在文章路径后添加/..%2f..%2f..%2f,访问,由于服务端正常解码,将%2f解析为/,跳转3个目录到index.php,index.php内容,但是客户端不会解码%2f,将..%2f..%2f..%2f当作一个文件来看待。最后客户端加载js的路径为:

http://39.107.33.96:20000/index.php/view/article/41801/static/js/jquery.min.js

由于pathinfo模式,后面的static/js/jquery.min.js会被当作参数,最后返回的还是该文章页面。此时便找到了xss的点了。

参考文章

http://www.bendawang.site/2017/09/16/RPO%E4%BA%8C%E4%B8%89%E4%BA%8B/
https://mp.weixin.qq.com/s?src=11×tamp=1525857720&ver=866&signature=PHplQ-37wavIsA2cPdLApiqVHTetsrnCAhvrvivXMnvf92h3hZViuTaA4USyPAKg2fgpocyIHFpNmypMGoryUHenWY8xK6KSD9nKSLSXKv4WmosjUdfkXpSl-Ch0oRUN&new=1
https://mp.weixin.qq.com/s?src=11×tamp=1525857720&ver=866&signature=uOWHbLq5oJDwP*sk-2VYKp1rL2VHU9DQPgl3QwLbq0B01oM3aCxzKD6zbuJ1cdSCLm3hu99SjfDS-oFQ9Pgubil3BvzL0qP05ocLiwbMwMz3KTjTKd7XIJFOOSfx6WdE&new=1
https://mp.weixin.qq.com/s?src=11×tamp=1525857720&ver=866&signature=qLD7nsBWOBKvdbUv3IZQehspGwRnnMfW9-bxB2FMIKNdfqQb0Vy2AuLSXv19HfujIngT09n2DdzNuZTNF1FwP2cmtkdJ5fPFPOsAPVgUfR0hgHtpkFUq-QQjIpzEla&new=1
https://mp.weixin.qq.com/s?src=11×tamp=1525857720&ver=866&signature=EeYIiR3XGXgpu7vKIZF5MI42kcFmXeewFVRKAeUGccOgVIOw9T9KcyQCfjzVVI4DhBikdv264YJU2EQx9NFErI87FORBmqJLCgQjsC-CU6TthUlP5HUwcTJmLoO-Vl&new=1

Responses