您的位置:网站首页 > php源码 > 正文

RPO方式的探究

类别:php源码 日期:2018-5-16 5:54:06 人气: 来源:

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

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

  可以清楚地看到对于完全相似的URL,不同的服务器的处理方式是不同的:Apache服务器默认情况下不认识..%2f这个符号,认为..%2pache.php是一个文件

  但是Nginx不同,它能自动地把..%2f进行url解码,为../ 这个符号对于服务器来说就是向前跳转一个目录,在它眼中我们请求的就是

  RPO 目录下创建了index.php f访问之后就会加载本目录下的a.js,注意这个a.js前面没有/(斜杠)代表是相对径

  惊奇的发现本来只能读取和自己在同一目录下的a.js的index.php居然成功访问到了test目录下的a.js

  2.(久经沙场,善于伪装的)服务器会把..%2f自动进行URL解码,所以实际上服务器端看到你请求的URL是下面的样子:

  3.我们知道../ 在URL中会被理解成上一层目录,所以服务器实际上认为你访问的是下面的URL,并把index.php的内容返回给(天真的)浏览器

  4.接下来浏览器的工作就是根据URL的径处理index.php中引用的使用相对地址的脚本,可是万万没想到,浏览器它并不认识..%2f(惊恐脸,说实话,估计它自己都不相信,在它天真的眼中一切都是没有伪装的,它看不破%2f的伪装),于是URL在它眼里依旧是那时(青涩的)模样:

  5.此时的浏览器已经把..%2findex.php当成了一个文件,可它还是严格按照脚本的要求加载当前目录下的a.js文件,而对它来说现在的当前目录已变成了test,自然而然test目录下的a.js就被成功加载了。

  有的人可能会问了,如果要利用这个漏洞(比如说想实现xss),我们必须要让页面引入我们的脚本,但是是个人都明白,真实中网站是人家写的,我们没法控制人家的js脚本在哪,更没法把我们想要的语句添加进人家的脚本里。

  等等,你没有听错!!服务器给你什么你都能当做js,而且因为是外部引用js,按照我们的js代码甚至不需要标签,那岂不是美滋滋???(但是这里有一个,就是必须是使用的URL_WRITE的网站)

  URL重写在行业内又被形象地称为”URL由”,就相当于是一个反向代理,你发送给服务器的URL并不会直接被解析,而是要先经过一个中转站,将静态URL重新组合成服务器熟悉的动态URL形式,再对其进行解析。那为什么要这么做呢?因为(伪)静态的URL更有利于网站的优化。

  可以看到我在index.php中引入了当前页面中的a.js,3.html 中写入了一个没有返回搜狐,查看更多

  

关键词:js调用php
0
0
0
0
0
0
0
0
下一篇:没有资料

相关阅读

网友评论 ()条 查看

姓名: 验证码: 看不清楚,换一个

推荐文章更多

热门图文更多

最新文章更多

关于联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助

CopyRight 2002-2012 技术支持 源码吧 FXT All Rights Reserved

赞助合作: