XSS漏洞基础

xss漏洞的三个分类:

反射性:产生原因是用户输入的没用进行很好的过滤,导致用户的输入输出到前端页面上,前端把用户的输入给解析了,所以导致前端页面出现相应漏洞。前端页面是可以解析JS代码的,反射性漏洞就是利用JS代码。

DOM性:在JS中进行多次传参,导致漏洞出现

存储型

反射性漏洞:

在DVWA靶场进行实验(LOW):

1.输入普通字符串,根据后台代码,他会输出我们输入的字符串,这个是正常后端的工作流程。

2.我们在框里输入JS代码,使其显示不正规的输出,当然,也可以输入其他的代码,可以获得相应信息。可以用于测试的有许多种,如alert()、confirm()、prompt()等等。

html里面的js代码:

js代码在HTML代码的标签里面也是可以解析的,比如在<div>、<p>等等,但是有些并不能解析,如<style>、<textarea>、<title>等。

深入理解浏览器解析机制和XSS向量编码

在html代码里面,<a>标签是可以促发js代码的。

但是在日常中我们肯定会遇到一些过滤,所以我们需要对我们的代码进行另一种形式的输入。

基础部分

1.url解码

里面的内容经过url解码就是"javascript:alert(1)",但是在浏览器里面却解析不了

html 复制代码
<a href="%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29">aaa</a>

2.先html解码,后url解码

在这里,代码是先进行html实体解码,然后再url解码,这样在浏览器就可以正常访问。

对于1和2,我的理解是在进行浏览器访问时,1这个代码的href在进入url地址栏时,是原始状态,他对于这个没有解码的就不认识这个,所以就不会执行;对于第二个,这个原始代码的前一部分是html的编码,它在进行浏览器访问时,html对这个"&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;"先进行了解码成"javascript",然后href这一段代码进入url地址栏中,在url中它认识这个"javascript"协议,然后把会进行代码的识别,同时对后面的url码进行解码,就会正常执行。

html 复制代码
 <a href="&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:%61%6c%65%72%74%28%32%29">bbb</a>

3.把符号编码

URL 编码 ":",但这个也不能解析,因为javascript:是一个整体,(函数+:)才能被解析。

html 复制代码
<a href="javascript%3aalert(3)"></a>

4.src的错误函数触发

这里,当src里面是错误信息时,他会执行后面的错误函数onerror里面的内容。但这个也执行不了。

html 复制代码
<div><img src="1" onerror="alert(1)"></div>
html 复制代码
<div>&#60;img src=x onerror=alert(4)&#62;</div>

5.html实体编码

这个是&#39 html解码 ('),可以正常执行

html 复制代码
<button onclick="confirm('7&#39;);">Button</button>

6.unicode编码

这个并不能执行

html 复制代码
<button onclick="confirm('8\u0027);">Button</button>

7.在js代码里进行html编码

这里把html的编码放在js的标签里,并不能执行。

html 复制代码
<script>&#97;&#108;&#101;&#114;&#116;&#40;&#57;&#41;&#59</script>

所以以上的编码示例,向我们展示了前端的漏洞的千奇百怪之处,不同的标签,或不同的编码都会可能导致漏洞,但有些的标签和漏洞之间也会产生错误。

xss漏洞实例

https://xss.pwnfunction.com网站有相关xss漏洞的练习

1.Ma Spaghet!

题目要求是显示1337,并且不能使用交互式的触发等等

这里使用图片错误信息提示,在后面输入?somebody=<img%20src=1%20οnerrοr="alert(1337)">,显示成功。

2.Jefff

这里我们闭合eval里面的双引号,然后跳出,执行alert(1337)

就相当于我们是执行的以下命令

html 复制代码
eval(`ma = "Ma name aaa";alert(1337);""`)
相关推荐
Kiyra13 分钟前
阅读 Netty 源码关于 NioEventLoop 和 Channel 初始化部分的思考
运维·服务器·前端
冰暮流星22 分钟前
javascript的switch语句介绍
java·前端·javascript
做科研的周师兄1 小时前
【MATLAB 实战】|多波段栅格数据提取部分波段均值——批量处理(NoData 修正 + 地理信息保真)_后附完整代码
前端·算法·机器学习·matlab·均值算法·分类·数据挖掘
da_vinci_x1 小时前
图标量产:从“手绘地狱”到“风格克隆”?Style Reference 的工业化实战
前端·游戏·ui·prompt·aigc·设计师·游戏美术
利刃大大1 小时前
【ES6】变量与常量 && 模板字符串 && 对象 && 解构赋值 && 箭头函数 && 数组 && 扩展运算符 && Promise/Await/Async
开发语言·前端·javascript·es6
天若有情6731 小时前
ES6 模块与 CommonJS 的区别详解
前端·javascript·es6
大猫会长1 小时前
postgreSQL中,RLS的using与with check
开发语言·前端·javascript
慧一居士1 小时前
vite.config.ts 配置使用说明,完整配置示例
前端
wusp19941 小时前
nuxt3模块化API架构
前端·javascript·nuxt3
沛沛老爹2 小时前
Web开发者进阶AI:企业级Agent Skills安全策略与合规架构实战
前端·人工智能·架构