浅析RPO漏洞攻击原理
RPO的全称为Relative Path Overwrite
,也就是相对路径覆盖,利用客户端和服务端的差异,通过相对路径来引入我们想要的js或者css文件,从而实现某种攻击。
就目前来看此攻击方法依赖于浏览器和网络服务器的反应,基于服务器的Web缓存技术和配置差异,以及服务器和客户端浏览器的解析差异,利用前端代码中加载的css/js的相对路径来加载其他文件,最终浏览器将服务器返回的不是css/js的文件当做css/js来解析,从而导致XSS,信息泄露等漏洞产生。
利用条件
①Apache 配置错误导致AllowEncodedSlashes这个选项开启(对Apache来说默认情况下 AllowEncodedSlashes 这个选项是关闭的),或者nginx服务器。
②存在相对路径的js或者css的引用
这里使用WSL+apache2/nginx+php进行测试
第一个条件
当我们访问http://127.0.0.1/RPO%2findex.php
时,不同服务器有如下表现
Nginx
nginx服务器可以正常访问
Apache2
apache2默认配置无法访问
第二个条件
存在相对路径的引用,如下
结合条件产生RPO漏洞
简单复现
现在情况是这样的,我们在RPO目录下有这样的一个index.php
文件
<html>
<head></head>
<body>
<script src="test.js"></script>
</body>
</html>
以及一个test.js
文件如下
alert("this is under RPO");
同时RPO文件夹下还有一个文件夹xxx
,该文件夹下存在test.js
如下
alert("this is under xxx");
当我们访问http://127.0.0.1/RPO/index.php
时,自然而然弹出了RPO文件夹下的test.js
而我们访问http://127.0.0.1/RPO/xxx/index.php
,很显然xxx文件夹下是没有index.php
这个文件的
但是当我们访问http://127.0.0.1/RPO/xxx/..%2findex.php
时却出现了
RPO文件夹下的index.php
竟然读取了xxx文件夹下的test.js!!!
攻击过程
我们向服务器请求URL:
http://127.0.0.1/RPO/xxx/..%2findex.php
服务器见多识广,看到的是:
http://127.0.0.1/RPO/xxx/../index.php
也就是返回了
http://127.0.0.1/RPO/index.php
浏览器比较呆萌,看到的是:
http://127.0.0.1/RPO/xxx/..%2findex.php
这里浏览器认为..%2findex.php
是一个文件,并且执行了这个文件里面的<script>
,想要读取当前同目录下的test.js。而浏览器认为的路径是http://127.0.0.1/RPO/xxx/
,因此我们成功读取到了xxx文件夹下test.js并当作js解析。
RPO的任意文件读取
除了跨目录读取js,RPO漏洞还可以实现任意文件读取,前提是网站必须支持URL重写。
什么是url重写呢,URL重写就是首先获得一个进入的URL请求然后把它重新写成网站可以处理的另一个URL的过程。举个例子:(这里没有成功复现出来,就暂时先用别人的图来讲了,侵删,,我太菜了)
这里的index.php代码如下:
<!DOCTYPE html>
<html>
<head>RPO attack test</head>
<body>
<script src="3.js"></script>
</body>
</html>
<?php
error_reporting(E_ALL^E_NOTICE^E_WARNING);
if($_GET['page'])
{
$a=$_GET['page'];
Header('Location:http://localhost/RPO/test/'."$a".'.html');
}
?>
这里其实还开启了pathinfo模式,url中的/page/3
相当于?page=3
,然后通过Header转到新的url。这样看起来url会更加和谐,但是问题也出在这里。
当我们请求http://localhost/RPO/index.php/page%2f..%2f..%2findex.php
时,浏览器想要加载同目录下的3.js:http://localhost/RPO/index.php/3.js
,在浏览器眼里这就等同于http://localhost/RPO/index.php
,这就把index.php当作js处理了,然后我们就可以f12直接查看资源获得index.php的源码了,css文件的包容性比较好,可以读取更多类型的文件
参考链接:https://www.freebuf.com/articles/web/166731.html
浅析RPO漏洞攻击原理的更多相关文章
- XSS漏洞攻击原理与解决办法
转自:http://www.frostsky.com/2011/10/xss-hack/ 对于的用户输入中出现XSS漏洞的问题,主要是由于开发人员对XSS了解不足,安全的意识不够造成的.现在让我们来普 ...
- [web安全]Web应用漏洞攻击分析与防范
网站攻击主要分为以下几类: (1) sql注入攻击 SQL Injection:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.它是利 ...
- DDOS的攻击原理和防护指南(转)
DDOS的攻击原理和防护指南 作者:冰盾防火墙 网站:www.bingdun.com 日期:2008-01-07 我们现在来分析DDOS的攻击原理. 首先,DDOS是英文Distribut ...
- Atitit. Xss 漏洞的原理and应用xss木马
Atitit. Xss 漏洞的原理and应用xss木马 1. XSS漏洞1 2. XSS的用途2 2.1. 盗取cookie2 2.2. 刷新流量 刷分3 2.3. DOS 窃取隐私”.“假冒身份”. ...
- CSRF 攻击原理和防御方法
1. CSRF攻击原理 CSRF(Cross site request forgery),即跨站请求伪造.我们知道XSS是跨站脚本攻击,就是在用户的浏览器中执行攻击者的脚本,来获得其cookie等信息 ...
- HTTPS 协议降级攻击原理
0x00 HTTPS 在传统流行的web服务中,由于http协议没有对数据包进行加密,导致http协议下的网络包是明文传输,所以只要攻击者拦截到http协议下的数据包,就能直接窥探这些网络包的数据. ...
- DDOS攻击原理及防护方法论
从 07年的爱沙尼亚DDOS信息战,到今年广西南宁30个网吧遭受到DDOS勒索,再到新浪网遭受DDOS攻击无法提供对外服务500多分钟. DDOS愈演愈烈,攻击事件明显增多,攻击流量也明显增大,形 ...
- DDOS的攻击原理和防护指南
我们现在来分析DDOS的攻击原理. 首先,DDOS是英文Distributed Denial of Service的缩写,意思是分布式拒绝服务.拒绝服务又是什么意思呢?就是采取一些垃圾数据包来阻塞网站 ...
- 敌情篇 ——DDoS攻击原理
敌情篇 ——DDoS攻击原理 DDoS攻击基础 DDoS(Distributed Denial of Service,分布式拒绝服务)攻击的主要目的是让指定目标无法提供正常服务,甚至从互联网上消失,是 ...
随机推荐
- Theano 报错:No suitable SharedVariable constructor could be found. Are you sure all kwargs are supported? We do not support the parameter dtype or type
当Theano报错:No suitable SharedVariable constructor could be found. Are you sure all kwargs are support ...
- C# 5.0 新特性之异步方法(AM)
Ø 前言 C# Asynchronous Programming(异步编程)有几种实现方式,其中 Asynchronous Method(异步方法)就是其中的一种.异步方法是 C#5.0 才有的新特 ...
- LeetCode 1292. Maximum Side Length of a Square with Sum Less than or Equal to Threshold
题目 我是按照边进行二分的 class Solution { public: int sum[100005]; int a[305][305]; int maxSideLength(vector< ...
- 2.GoF 的 23 种设计模式的分类和功能
1. 根据目的来分 根据模式是用来完成什么工作来划分,这种方式可分为创建型模式.结构型模式和行为型模式 3 种. 创建型模式:用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”.GoF ...
- 白话SCRUM 之二:product backlog
在SCRUM方法中明确要求了3个文档: 1 product backlog 2sprint backlog 3 burn-down chart Product backlog 中列举了本项目应该实现的 ...
- Django ORM 一对多 和 多对多
一对多 在 models.py 上定义: class Province(models.Model): name = models.CharField(max_length=32) def __str_ ...
- Echarts 柱状图组
通过Echarts可以实现柱状图组,如下图:是一个学生三次模考成绩对比结果 源码 <!DOCTYPE html> <html> <head> <meta ch ...
- shell 多行重定向方法(多重嵌套)
这里讲的是多重嵌套.没用过 EOF的朋友请参考其他基础贴 在自动化运维中,常常需要shell脚本.在自动化创建脚本时,会遇到脚本内容里有用EOF重定向到配置文件的代码. 这样就不能用EOF来创建脚本了 ...
- Skyshop.代码解析
MarmosetInput.cginc: Input结构定义: struct Input { #if defined(MARMO_PACKED_UV) || defined(MARMO_PACKED_ ...
- Transformer模型---encoder
一.简介 论文链接:<Attention is all you need> 由google团队在2017年发表于NIPS,Transformer 是一种新的.基于 attention 机制 ...