本文目录一览:
有什么 绕过 htmlentities 进行 xss 攻击的方法吗
函数:htmlentities(string,quotestyle,character-set)
参数二是可选的。
规定如何编码单引号和双引号。
ENT_COMPAT - 默认。仅编码双引号或不成对的单引号。
ENT_QUOTES - 编码双引号和单引号。
ENT_NOQUOTES - 不编码任何引号。
参数三也可选的,是转换的字符集类型。
有这么一种情形:当我们使用这个函数的时候,使用了参数二。设置了过滤掉双引号很单引号这些东西(或许不编码)就容易出现XSS。
如:
?php
echo htmlspecialchars($_GET[url], ENT_QUOTES);
?
替换掉url里面的单引号和双引号,看起来是过滤的不错的,但是如果这个url没有出现单引号或双引号呢?或者双引号和单引号以另外的情况出现呢(二次编码)?
关于二次编码:
scriptalert(document.cookie)/script
如UTF-7编码后的
+ADw-SCRIPT+AD4-alert(document.cookie)+ADw-/SCRIPT+AD4-
最终为:
%2bADw-SCRIPT%2bAD4-alert(document.cookie)%2bADw-%2fSCRIPT%2bAD4-
可以考虑用于对付那些没有设置字符集,并且过滤了 的情况。
CSP策略及绕过方法
XSS的时候经常要绕过CSP,这里总结一下
一个CSP头由多组CSP策略组成,中间由分号分隔,就像这样:
其中每一组策略包含一个 策略指令 和一个 内容源 列表
default-src 指令定义了那些没有被更精确指令指定的安全策略。这些指令包括:
script-src定义了页面中Javascript的有效来源
style-src定义了页面中CSS样式的有效来源
img-src定义了页面中图片和图标的有效来源
font-src定义了字体加载的有效来源
connect-src定义了请求、XMLHttpRequest、WebSocket 和 EventSource 的连接来源。
child-src 指定定义了 web workers 以及嵌套的浏览上下文(如frame和iframe)的源。
内容源有三种:源列表、关键字和数据
源列表是一个字符串,指定了一个或多个互联网主机(通过主机名或 IP 地址),和可选的或端口号。站点地址可以包含可选的通配符前缀 (星号, '*'),端口号也可以使用通配符 (同样是 '*') 来表明所有合法端口都是有效来源。主机通过空格分隔。
有效的主机表达式包括:
http://* .foo.com (匹配所有使用 http协议加载 foo.com 任何子域名的尝试。)
mail.foo.com:443 (匹配所有访问 mail.foo.com 的 443 端口 的尝试。)
(匹配所有使用 https协议访问 store.foo.com 的尝试。)
如果端口号没有被指定,浏览器会使用指定协议的默认端口号。如果协议没有被指定,浏览器会使用访问该文档时的协议。
CSP的设置可能情况太多,这里只讨论几个比较典型的情况。
在default-src 'none'的情况下,可以使用meta标签实现跳转
在允许unsafe-inline的情况下,可以用window.location,或者window.open之类的方法进行跳转绕过。
CSP对link标签的预加载功能考虑不完善。
在Chrome下,可以使用如下标签发送cookie(最新版Chrome会禁止)
在Firefox下,可以将cookie作为子域名,用dns预解析的方式把cookie带出去,查看dns服务器的日志就能得到cookie
有些网站限制只有某些脚本才能使用,往往会使用script标签的nonce属性,只有nonce一致的脚本才生效,比如CSP设置成下面这样:
那么当脚本插入点为如下的情况时
可以插入
这样会拼成一个新的script标签,其中的src可以自由设定
Blackhat2017上有篇 ppt 总结了可以被用来绕过CSP的一些JS库。
例如假设页面中使用了Jquery-mobile库,并且CSP策略中包含"script-src 'unsafe-eval'"或者"script-src 'strict-dynamic'",那么下面的向量就可以绕过CSP:
在这个PPT之外的还有一些库也可以被利用,例如RCTF2018中遇到的amp库,下面的标签可以获取名字为FLAG的cookie
1.如果页面A中有CSP限制,但是页面B中没有,同时A和B同源,那么就可以在A页面中包含B页面来绕过CSP:
2.在Chrome下,iframe标签支持csp属性,这有时候可以用来绕过一些防御,例如" "页面有个js库会过滤XSS向量,我们就可以使用csp属性来禁掉这个js库。
meta标签有一些不常用的功能有时候有奇效:
meta可以控制缓存(在header没有设置的情况下),有时候可以用来绕过CSP nonce。
meta可以设置Cookie(Firefox下),可以结合self-xss利用。
xss为什么没有破解版
xss没有破解版的原因是版权的限制。xss现在只有官方的平台,破解版破坏了游戏的平衡,没有版权的限制,所以禁止了,现在也就没有破解版了。
如何避免xss,比如svg">
0x01 常规插入及其绕过
1 Script 标签
绕过进行一次移除操作:
scrscriptiptalert("XSS")/scrscriptipt
Script 标签可以用于定义一个行内的脚本或者从其他地方加载脚本:
scriptalert("XSS")/script