【WEB漏洞】WEB漏洞 第五章 XSS(三)

时间一直走,

没有尽头,只有路口。

WEB漏洞 第五章 XSS(三)


🔥系列专栏:WEB漏洞
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📆首发时间:🌴2022年9月14日🌴
🍭作者水平很有限,如果发现错误,还望告知,感谢!


前言

我们还有更长的路要走,不过没关系,道路就是生活。

                       ————杰克  凯鲁亚克《在路上》

CSP

CSP是什么?

Content Security Policy,简称 CSP,译作内容安全策略。主要是用来定义哪些资源可以被当前页面加载,减少 XSS 的发生。

配置

CSP策略可以通过 HTTP 头信息或者 meta 元素定义。(主要是HTTP头)

CSP 有三类:

Content-Security-Policy (Google Chrome)
X-Content-Security-Policy (Firefox)
X-WebKit-CSP (WebKit-based browsers, e.g. Safari)

HTML Meta :

<meta http-equiv="content-security-policy" content="策略">
<meta http-equiv="content-security-policy-report-only" content="策略">

指令说明(相当于变量)

default-src 定义资源默认加载策略
connect-src 定义 Ajax、WebSocket 等加载策略
font-src 定义 Font 加载策略
frame-src 定义 Frame 加载策略
img-src 定义图片加载策略
media-src 定义 <audio>、<video> 等引用资源加载策略
object-src 定义 <applet>、<embed><object> 等引用资源加载策略
script-src 定义 JS 加载策略
style-src 定义 CSS 加载策略
base-uri 定义 <base> 根URL策略,不使用default-src作为默认值
sandbox 值为 allow-forms,对资源启用 sandbox
report-uri 值为 /report-uri,提交日志

关键字(相当于参数)

-
        允许从任意url加载,除了 data: blob: filesystem: schemes
        e.g. img-src -

none
        禁止从任何url加载资源
        e.g. object-src 'none'

self
        只可以加载同源资源
        e.g. img-src 'self'

data:
        可以通过data协议加载资源
        e.g. img-src 'self' data:

domain.example.com
        e.g. img-src domain.example.com
        只可以从特定的域加载资源

\*.example.com
        e.g. img-src \*.example.com
        可以从任意example.com的子域处加载资源

https://cdn.com
        e.g. img-src https://cdn.com
        只能从给定的域用https加载资源

https:
        e.g. img-src https:
        只能从任意域用https加载资源

unsafe-inline
        允许内部资源执行代码例如style attribute,onclick或者是sicript标签
        e.g. script-src 'unsafe-inline'

unsafe-eval
        允许一些不安全的代码执行方式,例如js的eval()
        e.g. script-src 'unsafe-eval'

nonce-<base64-value>'
        使用随机的nonce,允许加载标签上nonce属性匹配的标签
        e.g. script-src 'nonce-bm9uY2U='

<hash-algo>-<base64-value>'
        允许hash值匹配的代码块被执行
        e.g. script-src 'sha256-<base64-value>'

配置范例

允许执行内联 JS 代码,但不允许加载外部资源

  1. Content-Security-Policy: 头部信息
  2. default-src 策略(定义资源默认加载策略)
  3. self: 只可以加载同源资源
  4. 不同策略之间用;连接
  5. script-src :定义 JS 加载策略
  6. self: 只可以加载同源资源
  7. unsafe-inline: 允许内部资源执行代码例如style attribute,onclick或者是sicript标签
    关键字用单引号,关键字之间空格即可
Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline';

绕过

预加载

浏览器为了增强用户体验,让浏览器更有效率,就有一个预加载的功能,大体是利用浏览器空闲时间去加载指定的内容,然后缓存起来。这个技术又细分为DNS-prefetch、subresource、prefetch、preconnect、prerender。

HTML5页面预加载是用link标签的rel属性来指定的。如果csp头有unsafe-inline,则用预加载的方式可以向外界发出请求,例如

<!-- 预加载某个页面 -->
<link rel='prefetch' href='http://xxxx'><!-- firefox -->
<link rel='prerender' href='http://xxxx'><!-- chrome -->
<!-- 预加载某个图片 -->
<link rel='prefetch' href='http://xxxx/x.jpg'>
<!-- DNS 预解析 -->
<link rel="dns-prefetch" href="http://xxxx">
<!-- 特定文件类型预加载 -->
<link rel='preload' href='//xxxxx/xx.js'><!-- chrome -->

另外,不是所有的页面都能够被预加载,当资源类型如下时,将阻止预加载操作:

URL中包含下载资源
页面中包含音频、视频
POST、PUT和DELET操作的ajax请求
HTTP认证
HTTPS页面
含恶意软件的页面
弹窗页面
占用资源很多的页面
打开了chrome developer tools开发工具

MIME Sniff

IE有一个特性,那就是在将一个文件展示给用户之前会首先检查文件的类型,实际上这是相当危险的,因为这会允许IE执行图片中的代码,(他的检查不仅仅·是后缀名的检查,因为引入MIME
sniffing功能的初衷是用来弥补Web服务器响应一个图像请求时有可能返回错误的内容类型信息这一缺陷。
)即嵌入在一个图像中的JavaScript代码。

举例来说,csp禁止跨站读取脚本,但是可以跨站读img,那么传一个含有脚本的img,再<script href='http://xxx.com/xx.jpg'>,这里csp认为是一个img,绕过了检查,如果网站没有回传正确的mime type,浏览器会进行猜测,就可能加载该img作为脚本

302跳转

对于302跳转绕过CSP而言,实际上有以下几点限制:

就是你得先拿到一台具有白名单的主机

跳板必须在允许的域内。
要加载的文件的host部分必须跟允许的域的host部分一致

iframe

当可以执行代码时,可以创建一个源为 css js 等静态文件的frame,在配置不当时,该frame并不存在csp,则在该frame下再次创建frame,达到bypass的目的。同理,使用 …/…/…/ /%2e%2e%2f 等可能触发服务器报错的链接也可以到达相应的目的。

base-uri

当script-src为nonce或无限制,且base-uri无限制时,可通过 base 标签修改根URL来bypass,如下加载了http://evil.com/main.js

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人间体佐菲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值