一.XSS攻击
1.原理
服务器对用户输入不做过滤,导致把用户输入的js代码,返回客户端执行,造成攻击
2.危害
窃取用户Cookie、篡改网页代码、xss钓鱼,网页重定向,获取键盘记录,获取用户信息等
3.分类
(1)反射型跨站攻击
反射型XSS,又称非持久型XSS,攻击相对于受害者而言是一次性的,具体表现在受害者点击了含有的恶意JavaScript脚本的url,恶意代码并没有保存在目标网站,而Web应用程序只是不加处理的把该恶意脚本“反射”回受害者的浏览器而使受害者的浏览器执行相应的脚本。
(2)储存型跨站攻击
存储型XSS是指应用程序通过Web请求获取不可信赖的数据,在未检验数据是否存在XSS代码的情况下,便将其存入数据库。当下一次从数据库中获取该数据时程序也未对其进行过滤,页面再次执行XSS代码持续攻击用户。
(3)DOM型跨站攻击
DOM,全称Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容、结构以及样式,DOM-XSS简单理解就是不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出的时候产生的问题。
4.常见的xss注入语句
(1)基础(利用<script></script>标签)
<script>alert(1)</script> //弹窗
(2)进阶(利用为协议)
<a href = "javascript : alert(1)"> touch me ! </a> //鼠标触摸弹窗
<img src ="javascript : alert(1)" > //
<img src = 1 onerror = alert(1) > //
(3)高阶(触发型注入语句,已下为几个例子,感兴趣的可以自己查找一下)
1、onmouseenter:当鼠标进入选区执行代码
<div style="background-color:red" οnmοuseenter="alert(bem)">123456</div>
2、onmouseleave:当鼠标离开选区执行代码
<DIV οnmοuseleave="alert(‘bem‘)" style="BACKGROUND-COLOR: red">123456</DIV>
3、onfocusin:当获得焦点时执行代码
<div contentEditable="true" style="background-color:red" οnfοcusin="alert(‘bem‘)" >asdf</div>
5.常见的xss注入的绕过方式
双写绕过,大小写转换绕过,引号的使用,tab制表符,对标签进行转码,拆分跨站
6.dvwa靶场练习
(1) Low
Reflected
查看源代码没有对<script>标签进行过滤,直接用基础标签构造就可以<script>alert(1)</script>
Stored
和Reflected 一样源代码没有对<script>标签进行过滤,直接用基础标签构造就可以<script>alert(1)</script>
DOM
提交一个数据会发现在URL上有传参,所以我们试一试把参数改为js代码就可以了
(2)Medium
Reflected
先试试常规的<script>标签构造js代码注入,发现返回了一个
看源代码发现把<script>标签过滤了
所以我们可以用大写绕过,因为他只过滤了小写的
<Script>alert(1)</Script>
Stored
可以看到,由于对message参数使用了htmlspecialchars函数进行编码,因此无法再通过message参数 注入XSS代码,但是对于name参数,只是简单过滤了<script>字符串,仍然存在存储型的XSS。所以我们使用bp进行抓包
BP抓完之后更改name就成功了
DOM
查看网页源代码需要闭合option 和select
</optin></select><img src = 1 onerror = alert(1)>
(3)High
Reflected
查看源代码发现,对script有一个正则的替换,但是script的写入用图片事件
<img src = 1 onerror = alert(1)>
Stored
比Medium多了一个name的Script的正则转换,所以用<img src = 1 onerror = alert(1)>
DOM
查看源代码,发现是白名单 注释掉就可以#<script>alert(/xss/)</script>