XSS漏洞

同源策略

同源策略是一种安全思想,但并不是统一的规范体系。不同语言脚本以及插件,它们的同源策略规则也不尽相同,不可一概而论。

javaScript中的同源,需要对比 两者中的协议、域名、端口。三者完全相同才认为是同源的,否则即是来自不同源的内容。

什么是XSS?

跨站脚本攻击(Cross Site Scripting)的缩写,为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。

恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。

跨站 ===> 从字面来分析,因为这个“跨”实际上是浏览器的特性,而不是缺陷,造成“跨”这样的假象是因为绝大多数XSS攻击都会采用嵌入一段远程或者第三方域上的脚本资源。

脚本===>跨站脚本重点已经不在“跨站”这个字母上,而是“脚本”。脚本主要是有两个:JavaScript和ActionScript。

XSS原理

用户提交的数据没有过滤,或者过滤不严格,直接输出到网页中,导致可以构造执行JS代码,或者修改网页内容。

反射型XSS

XSS代码出现在URL参数或者请求中,浏览器发出请求时,参数值作为输入提交到服务器,服务器接受这个参数并处理后,参数值出现在响应的HTML中,最后浏览器解析执行了这段XSS代码。

  1. payload往往会出现在url地址或者请求中

  1. 必须经过服务器的处理

  1. Payload会在response响应包中可以查询得到.

存储型XSS

  1. 对应的需要将payload写入到对应的数据库中

  1. Payload只有第一次写入数据库时需要携带,后面只需要访问特定的页面即可

  1. 同样需要服务器的处理并且将内容通过响应包进行返回.

Dom型XSS

对象模型(Document Object Model),即DOM。

DOM XSS的代码不需要服务器解析响应的直接参与,触发XSS漏洞靠的是浏览器DOM解析器的解析,和服务器没有直接关系,可以完全认为是客户端的事情。

第二个,往往查看源码无法找到我们拼凑进去的标签

存储型XSS和反射型XSS的区别

存储型-->持久型XSS

反射型-->非持久型XSS

存储型XSS会将攻击脚本永久的存放在目标服务器的数据库中

存储型XSS和反射型XSS和DOM型XSS有什么区别?

存储型XSS的payload写入到对应的数据库,服务器从数据库中读取对应的payload,然后返回给对应的响应包

Dom型XSS无需服务器的参与,触发XSS漏洞靠浏览器dom解析器,导致源代码无法查询到插入的payload

反射型XSS的payload往往会出现在URL请求或者是GET请求包中,而存储型XSS只有第一次写入数据库的时候才需要携带payload,后续访问不需要.

存储型XSS与数据库进行交互,反射型不需要与数据库进行交互.

函数htmlspecialchars

常见的过滤XSS手法

将特殊字符转换成html实体

实体编码&字符编码

Htmlspecialchars à HTML实体编码 浏览器不会解析,只会打印出来

浏览器会自动渲染HTML字符编码

字符编码能够在value值内使用

结构不会自动解码,只是在value值编码解码

字符编码能够在value值内使用

Burp suite 这里的HTML就是HTML字符编码

HTML字符编码支持添0操作

可以通过此操作绕过WAF

10进制

16进制

Jsunicode编码

在事件下,才能使用jsunicode编码

在js中,单引号,双引号和圆括号和重音号等属于控制字符,编码后将无法识别。

格式:




换行的意思//可以通过这个进行绕过一些对单词的过滤

: 冒号

可以通过这个绕过正则对于:的限制

通过结合字符编码及js编码可以绕过很多检测

如果源码存在innerHTML或document.write

可以使用8/16进制进行绕过

<img src=x οnerrοr=alert`1`>

\x3Cimg src=x οnerrοr=alert`1`\x3E

<textarea> </textarea>

<title></title>

<style><style>

<script></script>

<iframe></iframe>

<noscript></noscript>

<pre></pre>

<xmp></xmp>

如果遇见以上这种

在<>之间的参数,是不会被解析 <>

所以payload要先闭合文本域再写

</textarea><img src=x οnerrοr=alert`1`>

`$input`

文件上传注入-文件名

文件上传后,有回显点,会显示上传的名字时,就可以使用XSS

使用burp suite 将文件名更改为XSS payload

代码执行函数

禁用了alert

XSS如何挖掘漏洞?

  1. 看URL参数的输出位置

  1. 看输入框的输出位置

  1. 一般我们在判断是否存在xss的时候,会首先输入类似于下面的字符串:123456<>”’ 然后右键查看源代码,看我们输入的特殊字符串是否在页面中显示,如果没显示,则可能存在dom型xss,也有可能不存在xss.如果存在,重点看我们输入的特殊的字符是否被转义,如果没被转义,基本上可以判断存在xss,剩下的只是如何构造的问题.如果被转义了,则需要首先看是所有的都被转义了,还是部分,如果是部分,则考虑当前位置能否使用未转义的符号进行拼接.

判断输出点位置

输出点在尖括号外

<div>输出点</div> <script></script>

需要可以构造标签,如果不能构造标签就不存在XSS漏洞(除了script标签之外)。

输出点在尖括号内

如果输出在"双引号或者'单引号内部,需要能够闭合引号,如果不能闭合引号,就需要看能否在当前的标签属性中执行js代码,如果不能,就不存在XSS漏洞。

如果可以闭合引号,可以构造一个新的属性,使用新的属性的值来执行JS代码,比如事件属性。或者闭合尖括号,构造的新的标签也可以

输出点在script标签中

1、 如果输出在"双引号或者'单引号内部,需要能够闭合引号,如果可以闭合引号,就可以直接传递进去js代码,使用注释符号(//),注释掉后面的js代码就可以构造XSS

2、 如果不能闭合引号,需要看当前变量能不能innerHTML或者document.write,插入到网页中,如果可以就可以构造XSS,如果没有,就不存在XSS

防御XSS攻击

  1. 构建白名单

在构造白名单的过程中需要保证在不影响用户体验的同时,尽可能杜绝一切不必要的输入内容。

2.在cookie中加入httponly属性可以在一定程度上保护用户的cookie,减少出现XSS时损失

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值