>我真的太惨了

>外出实习忘记了博客密码

>断更了这么久

>今天终于忍不了了,ssh连上来黑了自己的首页,试图记录点什么

>2019/08/21 --C0d3r1iu

XSS RPO攻击初探 – 记录日 – C0d3r1iu's Blog

XSS RPO攻击初探

热度:530℃ 评论:0 发布时间:2018-03-26 收录:已收录

从强网杯一道XSS初探RPO攻击

这周末参加了强网杯,被题目虐得一塌糊涂

其中有一道WEB XSS考察的点是RPO,之前不知道,在比赛中查资料学习了,在此梳理一下
 

我试着用一句话尽可能描述的清楚:

RPO:

浏览器和服务器之间接受url请求之后,由于对url编码解析结果不同,造成引用的资源路径可被伪造

让我们先看看他们各自的职责:

服务器:

1.接受HTTP请求包
2.根据url地址返回客户端请求的html以及资源文件

浏览器:

1.根据用户输入的url去请求资源以加载网页
2.接收服务器返回的html和包含的资源,用规定好的方式把这些 “东西” 显示给用户

RPO攻击究竟利用点在哪里呢?

就是/..%2f/在服务器和浏览器下的解析存在差异

在服务器看来,这是被url编码过的字符串,应该先解码再解析地址

于是就被解析成了/..// ,代表着回溯到上一个目录

而浏览器则会认为这是一个目录,目录名叫/..%2f/

正常访问/index.php 和 /index.php/test/ 返回的页面都是/index.php

但如果这个页面有如下代码(没有加绝对路径):

<link rel="stylesheet" href="static/css/style2.css">

则会造成浏览器寻找资源路径从原本的/static/css/style2.css 变为 /index.php/static/css/style2.css

从而导致显示样式不正常

XSS RPO攻击初探

 

XSS RPO攻击初探
 
危害更大的点则是页面编码时嵌入了../这类不负责任的相对路径,这将提供XSS攻击利用条件
 
正如这道CTF题目:
 
XSS RPO攻击初探
 
当我们在此页面相同目录下可控制输出的话,可以构造路径进行xss攻击
 
XSS RPO攻击初探
 
这道题目就是这样,虽然可以输出任意字符到特定界面,但是被转义得没脾气
 
我们不得不求助于rpo,利用其他页面的script标签来帮助我们执行js代码。

我们要做的是
 
1.写入js代码(为了防止转义这里需要eval(String.fromCharCode)或者以alert(1)作为演示)
 
2.构造加载路径,在浏览器中访问: /index.php/view/article/1071/%2f..%2f../
 
3.让服务器接收我们构造好的路径之后,解析返回存在上述代码的页面
服务器会认为这个链接请求的资源路径为:/index.php/view/article/1071//../../
也就是/index.php/view/,并将/index.php/view/对应的页面返回给浏览器
 
4.浏览器接收到/index.php/view/ 这个页面,在解析html代码时,以它的理解,<script src=../static/js/jquery.min.js
等同于 /index.php/view/article/1071/%2f..%2f../../static/js/jquery.min.js

/%2f..%2f../被它认作一个目录,/%2f..%2f../../ 之间相互抵消了

因此会加载/index.php/view/article/1071/static/js/jquery.min.js

由于文件不存在,在/1071/之后的字符都当作PATHINFO传参处理了
 
至此我们成功的将 /1071/界面引入了<script>标签中,从而执行我们给定的js代码
 
XSS RPO攻击初探
 
XSS RPO攻击初探
 

总结:

实际上web安全的面非常广,要学习的点点滴滴还很多,不能浅尝辄止,半途而废
 

参考文章:

http://blog.nsfocus.net/rpo-attack/

打赏
本文由 C0d3r1iu 创作,除注明转载/出处外,均为本站原创,转载前请注明出处!

Leave a Reply

Your email address will not be published. Required fields are marked *

顶部
护眼
搜索
分享