0%

DVWA通关指南-CSP Bypass(内容安全策略)

概述

CPS即内容安全策略,实质就是白名单制度,开发者明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单。它的实现和执行全部由浏览器完成,开发者只需提供配置。CSP 大大增强了网页的安全性。攻击者即使发现了漏洞,也没法注入脚本,除非还控制了一台列入了白名单的可信主机。

开启方法

  • 抄录于这里

  • 两种方法可以启用 CSP。一种是通过 HTTP 头信息的Content-Security-Policy的字段。

    1
    2
    Content-Security-Policy: script-src 'self'; object-src 'none'; 
    style-src cdn.example.org third-party.org; child-src https:

    image-20220215092004385

  • 另一种是通过网页的<meta>标签

1
<meta http-equiv="Content-Security-Policy" content="script-src 'self'; object-src 'none'; style-src cdn.example.org third-party.org; child-src https:">

上面代码中,CSP 做了如下配置。

  • 脚本:只信任当前域名
  • <object>标签:不信任任何URL,即不加载任何资源
  • 样式表:只信任http://cdn.example.orghttp://third-party.org
  • 框架(frame):必须使用HTTPS协议加载
  • 其他资源:没有限制

启用后,不符合 CSP 的外部资源就会被阻止加载。

安全等级为Low

结论:攻击失败,原因分析在下面有说明

image-20220215092558062

源代码分析

从源码查看设置了headerCSP,可以知道以下语句可以被执行:

1
2
3
4
5
https://pastebin.com
hastebin.com
example.com
code.jquery.com
https://ssl.google-analytics.com

image-20220215092503894

f12查看当前页面请求,也能发现CSP的设置

image-20220215092925167

开始攻击

首先在https://pastebin.com/里边创建一个JavaScript代码alert("hahaha")保存记住链接

image-20220215093103371

点击右上角的raw

image-20220215093156720

得到了分享链接:https://pastebin.com/raw/PgTLeSd2

image-20220215093230759

把得到的链接输入输入框中

image-20220215093353837

image-20220215103943833

打开Console发现出现类似于跨域报错问题

image-20220215104125884

安全等级为Medium

源码分析

  • unsafe-inline:当csp有Unsafe-inline时, 并且受限于csp无法直接引入外部js, 不过当frame-src
    为self, 或者能引入当前域的资源的时候, 即有一定可能能够引入外部js。
  • nonce-source,仅允许特定的内联脚本块。如源码中:nonce-TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA='

image-20220215104504770

开始攻击

直接输入:<script nonce="TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=">alert(1)</script>

image-20220215104701452

image-20220215104717799

安全等级为High

image-20220215105533492

源码分析

后台代码

这里可以看到除了自身,其余的外部资源全部过滤了

image-20220215105448255

前端js

前端直接调用了一个回调函数solveSum,没有对此传参进行任何处理

image-20220215105654909

开始攻击

谷歌浏览器按f12,打开source页签,找到high.js文件,加个断点,修改callback参数为alert(document.cookie),记得按ctrl+s保存修改

image-20220215110402569

点击页面上的按钮

image-20220215110854695

点击继续运行按钮

image-20220215111146007

出现弹框

image-20220215111208307

安全等级为

源码分析

前端没有回调函数了

image-20220215111736306

本文主要操作步骤来源这里