RPO攻击

Posted by kingkk on 2018-03-27

前言

这次强网杯真的见识到了大佬们的可怕,知识面和深度的双重不足,是得抓紧时间赶紧把基础给补上,以后才能有提升的机会。
分析了以下sharemind这道题,又见识了一种新的攻击方式——RPO攻击

正文

RPO攻击主要是利用服务器和浏览器,也就是服务端和客户端对url的解析不同,造成的漏洞攻击。

测试环境

  • Chrome浏览器
  • nginx websever

先看一个简单的例子 文件结构如下

1
2
3
4
5
6
7
WWW 
|——test
| |——test.php
| |——style.css(bule)
|
|——index.php
|——style.css(red)

index.php引用相对路径,引入WWW目录下的style.css(red),对字符进行渲染

1
2
<link rel="stylesheet" href="**style.css**" style="css" />
<h1>Index!</h1>

对index.php进行访问,其渲染的是红色字体

当我们访问如下url时,会出现一个奇怪的现象

1
http://localhost/test/test.php%2f..%2f..%2findex.php


请求的页面是index.php的页面,但是加载的css却是test页面下的css
这是因为 对服务器而言,会对%2f进行解析,转义成/,所以之前的url转义后就变成了

1
http://localhost/test/test.php/../../index.php

等价于

1
http://localhost/index.php

然而对于浏览器而言,在对页面进行渲染的时候,对于路径的解析并不会转义%2f,它是将test.php%2f..%2f..%2findex.php当作一个文件名,目录路径还是以localhost/test/当作目录路径(貌似apache需要指定的版本才能解析,本地的apache不会转义%2f)

这一点也能从浏览器的查看源码中看出 从而产生了浏览器和服务器对路径的理解不同 所以,当加载的不是一个css,而是js的时候,能找到一个可以控制的文本,然后指定对应的地址,就能够产生xss攻击


接下来看下强网杯的那道share mind 漏洞发生在index.php页面上 !

这里单独使用了相对路径,也表名了出题的意图 这里我们可以控制一个留言界面,为了保证字符的纯净(因为js遇到无法解析的语句时就不会继续执行),所以我们这里不输入标题,只输入文章内容

可以获得一个没有坏字符的纯文档

此时访问如下页面

1
http://39.107.33.96:20000/index.php/view/article/1571/..%2f..%2f..%2f


成功弹出xss 服务器获取的页面即为

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

此时该index.php引用了相对路径下的 static/js/jquery.min.js
此时被解释为了http://39.107.33.96:20000/index.php/view/article/1571/static/js/jquery.min.js

然而真正访问http://39.107.33.96:20000/index.php/view/article/1571/static/js/jquery.min.js路径时,解析为http://39.107.33.96:20000/index.php/view/article/1571

即我们之前插入的文章内容,因为http://39.107.33.96:20000/index.php/view/article/1571之后的字符串,以一种伪静态传参的方式被解析成参数了,所以访问的文件即是我们之前写好的恶意html,被当作js文件解析了。从而引发xss攻击


后面的问题就是绕过一些转义的实体编码,打xssbot的cookie,获取falg。没学过js,目前不是很了解。总之主要的思路就是利用了这个RPO攻击。(逃……)