【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空格绕过 \ \ ### 7.8注释绕过 \alert()\ \pt\>alert()\ript\> ### 7.9字符拼接 利用eval:eval是Javascript内置函数,用于计算字符串表达式的值 \ ### 7.10js伪协议绕过 ## 8.XSS+CSRF利用 存储型XSS攻击代码中加入CSRF代码。 \") ## 9.防御 1. 白名单过滤:白名单过滤通过允许放行的内容进行过滤,这种情况下确实可以基本杜绝很多的XSS攻击,但是在现实环境中,可能会造成误拦截。 2. 黑名单过滤:黑名单过滤是对相关关键字进行拦截,黑名单输入可能杜绝绝大XSS攻击,但是依旧存在被绕过的可能。 3. http only属性:在服务端中设置会话cookie的HTTP only属性,这样客户端\]S脚本就不能获取cookie信息, 4. 明确输入内容:对用户输入的内容进行明确类型,如个人信息电话、数字、密码、邮箱地址等都位置都过滤一些不符合的 5. 对不可信的内容都应该进行长度限制:例如电话号码11位,那么就设置11位,这样虽然不能百分百防止XSS攻击,但是可以增加XSS攻击实现的难度。 6. 添加验证码、开启相关防护软件、WAF软硬件。

相关推荐
叶落阁主4 小时前
Tailscale 完全指南:从入门到私有 DERP 部署
运维·安全·远程工作
用户962377954482 天前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机2 天前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机2 天前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954482 天前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star2 天前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户962377954482 天前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
cipher4 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
一次旅行7 天前
网络安全总结
安全·web安全
red1giant_star7 天前
手把手教你用Vulhub复现ecshop collection_list-sqli漏洞(附完整POC)
安全