theKingOfNight's Blog

CTF-Web-强网杯-----RPO漏洞剖析

字数统计: 532阅读时长: 1 min
2019/01/19 Share

最近比赛遇到了RPO,这里来进行扫盲。

知识点1—一个网站是如何加载的

一个html网站是如何加载的呢,网站是根据程序员编写的代码从上到下进行执行。

其中页面的加载和渲染都需要通过脚本执行,并且在脚本执行过程中网站的加载暂时停止,等待脚本加载完成,特别是JavaScript和src引入JavaScript(会暂停直接进行解析并执行,并且连续载入两个JavaScript文件加载过程中会有一段时间的间隔,这段时间就是js代码执行的时间 )

知识点2—什么是RPO漏洞

PRO漏洞说简单些,就是根据获取相对路径的js代码,比如刚刚过去的强网杯中的第一个src使用的就是相对路径。
image

在知识点一中我们说过,绕过遇到了js代码,网站就会停下来,进行加载和执行js代码,意味着js中需要寻找的js代码(漏洞所在之处:寻找的其他东西),一般都是.js文件,然后会将其中的.js文件读取出来并执行。

PRO漏洞就是根据服务器解析与浏览器(客户端)解析之间的微小差异而产生的漏洞,比如本次比赛中的一个payload:

http://39.107.33.96:20000/index.php/view/article/36967/..%2f..%2f..%2f..%2findex.php

在服务器端的强大容错和解析能力下会返回:

http://39.107.33.96:20000/index.php/

但是客户端就不一样 了,会将..%2f..%2f..%2f..%2findex.php当成是一个文件,然后加载这个文件相对目录下的static/js/jquery.min.js文件

image

但是这个目录是不存在的(或者出题发恶意作死弄这么一个也没办法,一般情况下),js无法解析,然后程序就很迷,不知道做什么,然后就会退回上一层目录,也就是:

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

就将其中 的代码当做js代码进行执行。

CATALOG
  1. 1. 知识点1—一个网站是如何加载的
  2. 2. 知识点2—什么是RPO漏洞