0x05会提到),我们来看下面这条规则: Content-Security-Policy: default-src 'self'; script-src 'self' test.n0tr00t.com 'unsafe-inline php header("Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline';"); ' 'unsafe-eval'; style-src 'self' *.ly.com sec-pic-ly.b0.upaiyun.com *.guard.qcloud.com 'unsafe-inline ' 'unsafe-eval'; style-src 'self' *.ly.com sec-pic-ly.b0.upaiyun.com *.guard.qcloud.com 'unsafe-inline sec-pic-ly.b0.upaiyun.com data:; 我们的目标是 src.ly.com 的管理员登录凭证,通过细看上面的 CSP 规则我们可以发现存在很多问题,例如 *.40017.cn, unsafe-inline
Content-Security-Policy: default-src 'self'; script-src 'self' https://apis.google.com; style-src 'self' 'unsafe-inline style-src 'self' 'unsafe-inline':允许从同一源加载样式,并允许内联样式(不推荐,可能带来风险)。 ‘unsafe-inline’:允许内联脚本和样式(不推荐)。 ‘unsafe-eval’:允许使用 eval() 等方法(不推荐)。 策略 以下是一个更复杂的 CSP 示例,适用于多种资源类型: Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline ' https://apis.google.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src
domain.example.com | 允许加载指定域名下的资源 *.example.com | img-src *.example.com | 允许加载 example.com 下所有子域名的资源 'unsafe-inline ' | script-src 'unsafe-inline' | 允许执行内联资源,如样式属性、事件、script 标签 'unsafe-eval' | script-src 'unsafe-eval' 'none'; script-src 'self'; connect-src 'self'; img-src 'self'; style-src 'self'; Bypass unsafe CSP unsafe-inline script-src 'self' 'unsafe-inline'; 当开启了这个选项时,意味着可以执行内联资源,包括 JS、样式表等 假设我们这里的例子都有一个向管理员留言的功能,而目标都是让管理员访问我们的目标网站 ' 'unsafe-eval' 当上面的 unsafe-inline 和 unsafe-eval 都开启时,将会变得很危险 因为你过滤的一些关键字都可以用 eval 函数来绕过,比如 我们先对最基本的
当做出以下设置的时候,问题得到解决: default-src 'unsafe-inline' 'self'; script-src 'unsafe-eval' 'unsafe-inline' 'self ';style-src 'unsafe-inline' 'self';img-src 'self' https://t;media-src * blob:; 这里的前面的限制暂且不考虑,关键是针对media-src
Content-Security-Policy: default-src 'self' PHP用法: header("Content-Security-Policy: script-src 'self' 'unsafe-inline 144.144.144.144 允许加载指定IP *.wufeifei.com 允许加载子域 https://wufeifei.com 允许加载https指定域 https: 允许加载https资源 ‘unsafe-inline ,每个值以空格分隔;策略(每个策略以分号分割) 指令值) 例子(代码需要加在输出页面内容前): header("Content-Security-Policy: script-src 'self' 'unsafe-inline ' 'unsafe-eval' *.google-analytics.com; "); header("Content-Security-Policy: script-src 'self' 'unsafe-inline
frame-src 'self' vscode-webview: https://*.vscode-webview-test.com; object-src 'self'; script-src * 'unsafe-inline ' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; connect-src 'self' https:; font-src 'self' https:
'unsafe-inline' script-src 'unsafe-inline' 允许加载 inline 资源(例如常见的 style 属性,onclick,inline js 和 inline img-src 'self' data: https://pic.xiaohuochai.site https://static.xiaohuochai.site; style-src 'self' 'unsafe-inline 3、配置缓存及CSP expires 7d; add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline self' data: https://pic.xiaohuochai.site https://static.xiaohuochai.site; style-src 'self' 'unsafe-inline
configure-content-security-policy/ 方式二:前端h5中添加 <meta http-equiv="Content-Security-Policy" content="style-src 'self' '<em>unsafe-inline</em> ';script-src 'self' '<em>unsafe-inline</em>' 'unsafe-eval' https://webapi.amap.com https://restapi.amap.com https
但是没想到有些东西有点儿太过简单了,所以在看到知道创宇的文章时候有了新的想法 http://paper.seebug.org/91/ 在原来的文章中,我主要提到了两种攻击手段,第一种是 1、script-src self unsafe-inline php header("Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline';"); php header("Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline';");
例子: Content-Security-Policy:script-src 'self' 'unsafe-inline' 'unsafe-eval';style-src 'self' 'unsafe-inline 例子: Content-Security-Policy:script-src ‘self’ ‘unsafe-inline’ ‘unsafe-eval’;style-src ‘self’ ‘unsafe-inline HttpServletResponse response) { //内容安全策略 response.setHeader("Content-Security-Policy", "script-src 'self' 'unsafe-inline ' 'unsafe-eval';style-src 'self' 'unsafe-inline';img-src 'self' data:;connect-src 'self' http://www.baidu.com
tagmanager.google.com/ https://www.googletagmanager.com/ 如果你使用 Google Analytics https://www.google-analytics.com/ ‘unsafe-inline 如果你遇到了 ‘unsafe-inline’ 的错误。 那么你还需要把 ‘unsafe-inline’ 添加到信任的链接列表中。
'unsafe-inline' script-src 'unsafe-inline' 允许加载 inline 资源(例如常见的 style 属性,onclick,inline js 和 inline img-src 'self' data: https://pic.xiaohuochai.site https://static.xiaohuochai.site; style-src 'self' 'unsafe-inline img-src 'self' data: https://pic.xiaohuochai.site https://static.xiaohuochai.site; style-src 'self' 'unsafe-inline img-src 'self' data: https://pic.xiaohuochai.site https://static.xiaohuochai.site; style-src 'self' 'unsafe-inline 'self' https://static.xiaohuochai.site; connect-src https://api.xiaohuochai.cc; script-src 'self' 'unsafe-inline
; Keywords: keyword-source = "'self'" / "'unsafe-inline'" / "'unsafe-eval'" ; Nonces: 'nonce-[ 还有个很重要的参数叫’unsafe-inline’ ,如果加上这个参数,就不会阻止内联脚本,但这被认为是不安全的。 initial argument which is not callable. style-src style-src指令限制了所有可能被引用的css,包括下面三种引用的css属性,style也有个‘unsafe-inline ';font-src http://xxx/fonts/ fonts.gstatic.com; style-src 'self' 'unsafe-inline'; img-src 'self' 重点是这一项 script-src http://xxx/js/ 'unsafe-inline'; 我们先尝试构造payload 可以明显的看到被拦了 但是我们尝试构造内联脚本 能看到成功执行 值得庆幸的是由于同源策略
<html> <head> <meta http-equiv="Content-Security-Policy" content="default-src * data: blob: '<em>unsafe-inline</em> ' 'unsafe-eval'; script-src * '<em>unsafe-inline</em>' 'unsafe-eval'; connect-src * '<em>unsafe-inline</em>'; img-src * data: blob: '<em>unsafe-inline</em>'; frame-src *; style-src * data: blob: '<em>unsafe-inline</em>'; font-src * data: blob: '<em>unsafe-inline</em>';"> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE
‘unsafe-inline’ 灾难这是CSP错误中的核选项。如果你在 script-src 指令中看到 'unsafe-inline',直接收工吧——你已经赢了。 脆弱的策略:Content-Security-Policy: script-src 'self' 'unsafe-inline';绕过方式:<script>alert('CSP Bypass')</script default-src 'none' 默认拒绝一切使用随机数(nonce)处理特定的内联脚本,消除了 'unsafe-inline''strict-dynamic' 允许受信任的脚本加载其他脚本,而无需白名单域名 你的CSP测试清单在你离开一个目标之前,快速检查一下这个清单:script-src 是否包含 'unsafe-inline'?script-src 是否包含 'unsafe-eval'? 真实世界绕过示例让我分享几个来自真实漏洞赏金计划的速胜案例:示例 1:电商平台策略: script-src 'self' 'unsafe-inline' *.cloudflare.com绕过: 简单的内联脚本赏金
所以其实关键在于CSP Content-Security-Policy:default-src 'self'; script-src 'self' 'unsafe-inline'; font-src ' self' fonts.gstatic.com; style-src 'self' 'unsafe-inline'; img-src 'self' 不熟悉的人可能并不清楚其中的CSP有什么样的问题,试试上 V6Bq3u346wy1l0rOIp59A6RSX5gmAiSK40bp5JNrbnw='; font-src http://sguestbook.hctf.io/static/ fonts.gstatic.com; style-src 'self' 'unsafe-inline '; img-src 'self' CSP限制的域差不多符合以下几个条件: 1、script没有开启unsafe-inline,也就是说不允许内联脚本 2、script只允许static目录,但这个目录下内容不可控 3、style-src开启了unsafe-inline而且是self(这里其实是不小心的失误) 4、default-src为self,也就是站内请求都是被许可的 正解 综合CSP的限制,我们需要回去想想题目中给的条件
'unsafe-inline':允许行内代码执行. Content-Security-Policy", "default-src 'self';img-src * 'self' blob: data: ; font-src * data:;style-src * 'unsafe-inline
://*.vscode-webview-test.com; object-src 'self'; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline frame-src 'self' vscode-webview: https://*.vscode-webview-test.com; object-src 'self'; script-src * 'unsafe-inline ' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; connect-src 'self' https:; font-src 'self' https: ://*.vscode-webview-test.com; object-src 'self'; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline
cache-control: no-cache content-security-policy: default-src disqus.com disquscdn.com; script-src 'unsafe-inline ' 'unsafe-eval' blob: https:; img-src 'self' https: hm.baidu.com disqus.com; style-src 'unsafe-inline
data:; img-src 'self' https: data:; object-src 'none'; script-src https:; style-src 'self' https: 'unsafe-inline data:; img-src 'self' https: data:; object-src 'none'; script-src https:; style-src 'self' https: 'unsafe-inline data:; img-src ‘self’ https: data:; object-src ‘none’; script-src https:; style-src ‘self’ https: ‘unsafe-inline