XSS的相关学习以及相关靶场的练习

参考文章

跨站脚本攻击(XSS)详解

web攻防之XSS攻击详解——XSS简介与类型

XSS(跨站脚本攻击)的相关学习

1.漏洞简介

​ XSS(Cross Site Script)攻击,作为一种HTML注入攻击,XSS攻击的核心思想就是在HTML页面中注入恶意代码,而XSS采用的注入方式是非常巧妙的。在XSS攻击中,一般有三个角色参与:攻击者、目标服务器、受害者的浏览器。

​ 由于有的服务器并没有对用户的输入进行安全方面的验证,攻击者就可以很容易地通过正常的输入手段,夹带进一些恶意的HTML脚本代码。当受害者的浏览器访 问目标服务器上被注入恶意脚本的页面后,由于它对目标服务器的信任,这段恶意脚本的执行不会受到什么阻碍。而此时,攻击者的目的就已经达到了。

​ 一开始,这种攻击的演示案例是跨域的,所以叫做"跨站脚本"。现在是否跨域已经不再重要,但是名字一直沿用下来。

​ 由于有的服务器并没有对用户的输入进行安全方面的验证,攻击者就可以很容易地通过正常的输入手段,夹带进一些恶意的HTML脚本代码。当受害者的浏览器访 问目标服务器上被注入恶意脚本的页面后,由于它对目标服务器的信任,这段恶意脚本的执行不会受到什么阻碍。而此时,攻击者的目的就已经达到了。

2.XSS分类

2.1.反射性XSS(非持久性XSS)

​ 黑客往往需要诱使用户”点击“一个恶意链接,才能攻击成功。反射型XSS也叫”非持久型XSS”。

【漏洞浅谈】XSS详解

​ 又称非持久型XSS。之所以称为反射型XSS,是因为这种攻击方式的注入代码是从目标服务器通过错误信息、搜索结果等等方式“反射”回来的:发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。这个过程像一次反射,故叫反射型XSS。 而称为非持久型XSS,则是因为这种攻击方式具有一次性,由于代码注入的是一个动态产生的页面而不是永久的页面,因此这种攻击方式只在点击链接的时候才产生作用。

​ 攻击者通过电子邮件等方式给别人发送带有恶意脚本代码参数的 URL,当 URL 地址被打开时,注入脚本被传输到目标服务器上,然后服务器将注入脚本“反射”到受害者的浏览器上,特有的恶意代码参数被 HTML 解析、执行。

​ 非持久型 XSS 漏洞攻击的四大特点:① 即时性。不经过服务器存储,直接通过 HTTP 的 GET 和 POST 请求就能完成一次攻击,拿到用户隐私数据;②攻击者需要诱骗点击;③反馈率低,所以较难发现和响应修复;④盗取用户敏感保密信息。

​ 防止出现非持久型 XSS 漏洞的五大措施:① Web 页面渲染的所有内容或者渲染的数据都必须来自于服务端;②尽量不要从 URL,document.referrer,document.forms 等这种 DOM API 中获取数据直接渲染;③尽量不要使用 eval, new Function(),document.write(),document.writeln(),window.setInterval(),window.setTimeout(),innerHTML,document.creteElement() 等可执行字符串的方法;④如果做不到以上几点,也必须对涉及 DOM 渲染的方法传入的字符串参数做 escape 转义;⑤ 前端渲染的时候对任何的字段都需要做 escape 转义编码。

2.2.存储型XSS(持久型XSS)

​ 存储型XSS,又称持久型XSS,他和反射型XSS最大的不同就是,攻击脚本将被永久地存放在目标服务器端(数据库,内存,文件系统等),下次请求目标页面时不用再提交XSS代码。

【漏洞浅谈】XSS详解

​ 一般存在于 Form 表单提交等交互功能,如发帖留言,提交文本信息等,黑客利用的 XSS 漏洞,将内容经正常功能提交进入数据库持久保存,当前端页面获得后端从数据库中读出的注入代码时,恰好将其渲染执行。

​ 这种攻击多见于论坛,攻击者在发帖的过程中,将恶意脚本连同正常信息一起注入到帖子的内容之中。随着帖子被论坛服务器存储下来,恶意脚本也永久地被存放在论坛服务器的后端存储器中。当其它用户浏览这个被注入了恶意脚本的帖子的时候,恶意脚本则会在他们的浏览器中得到执行,从而受到了攻击。

​ 可以看到,存储型XSS的攻击方式能够将恶意代码永久地嵌入一个页面当中,所有访问这个页面的用户都将成为受害者。如果我们能够谨慎对待不明链接,那么反射型的XSS攻击将没有多大作为,而存储型XSS则不同,由于它注入的往往是一些我们所信任的页面,因此无论我们多么小心,都难免会受到攻击。可以说,存储型XSS更具有隐蔽性,带来的危害也更大,除非服务器能完全阻止注入,否则任何人都很有可能受到攻击。

​ 持久型 XSS 的三大特点:①持久性,植入在数据库中;②危害面广,甚至可以让用户机器变成 DDoS 攻击的肉鸡;③ 盗取用户敏感私密信息。

​ 防止持久型 XSS 漏洞的三大措施: ①后端在入库前应该选择不相信任何前端数据,将所有的字段统一进行转义处理;②后端在输出给前端数据统一进行转义处理;③前端在渲染页面 DOM 的时候应该选择不相信任何后端数据,任何字段都需要做转义处理。

2.3.基于DOM的XSS

通过修改页面的DOM节点形成的XSS,称之为DOM Based XSS。

【漏洞浅谈】XSS详解

​ 基于DOM型的XSS攻击完全在浏览器上进行,与服务器无关,当页面需要使用用户输入来创建DOM元素时,就有可能受到XSS攻击。

XSS-lab靶场的练习

1.简单反射型

可以看到,直接将参数的值写入了<h2>``</h2>中,所以可以使用反射性XSS,在name中赋值一个简单的弹窗进行测试

payload:

?name=<script> alter('xss') </script>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZsUSgNu9-1680177450078)(C:\Users\35575\AppData\Roaming\Typora\typora-user-images\image-20230327105543204.png)]

1.1、java和javaSript有什么关系呢

​ Java 与 JavaScript 在语法和用途上有很大的区别。Java 是一种面向对象的编程语言,具有强类型和编译的特性,主要用于独立的应用程序开发,如桌面应用程序、服务器端应用程序等。而 JavaScript 是一种脚本语言,主要用于网页上的动态效果和交互。

​ Sript(脚本)

2.简单构建闭合绕过

尝试上一关的payload,发现不成功,查看页面源码,发现对于 < >进行了编码,编码为了html字符实体

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iCdPkNot-1680177450079)(C:\Users\35575\AppData\Roaming\Typora\typora-user-images\image-20230327110913944.png)]

查看源代码,发现存在htmlspecialchars

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jhq1ylbO-1680177450079)(C:\Users\35575\AppData\Roaming\Typora\typora-user-images\image-20230327111757009.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1ONCMseo-1680177450079)(C:\Users\35575\AppData\Roaming\Typora\typora-user-images\image-20230327154219664.png)]
在这里插入图片描述

但是可以发现,下面的表格并没有过滤,于是可是构造payload

1"><script>alter('xss')</script>

3.构建onclick属性进行绕过

这里将level2的漏给堵上了!我们从<>可以得知后端是利用htmlspecialchars函数转为HTML实体编码后输出的,但htmlspecialchars`存在一种开发手误,就是后端开发忘记了设置函数的第二参数导致“会转换双引号,不转换单引号

ps:这里的input标签中的属性使用的单引号,所以我们的Payload才可以成功!

' οnclick=alert(1) '
<input name=keyword  value='' onclick=alert(1) ''>	

这里有一点比较有趣,就是onclick这个属性;我们都知道输入框输入之后,保留输入内容,而我们的onclick就会保留在input标签中,而触发条件需要我们单击输入框。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0cg5RF2K-1680177450080)(C:\Users\35575\AppData\Roaming\Typora\typora-user-images\image-20230328161530211.png)]

4.构建onclick属性进行绕过

​ 和上一关一样,将单引号换为双引号即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5N1xmCRF-1680177450080)(C:\Users\35575\AppData\Roaming\Typora\typora-user-images\image-20230328162836393.png)]

​ 但是和第三关有所不同,表单中并没有使用htmlspecialchars进行HTML实体编码,是用了简单的过滤,所以双引号才可行的

5.过滤onclick属性与<script>

查看源代码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5xJAjpx5-1680177450080)(C:\Users\35575\AppData\Roaming\Typora\typora-user-images\image-20230328163933603.png)]

对于onclick与<script>进行了过滤

尝试换一个标签

这里选择<a>标签

<a>标签在JSP中用于创建超链接,使用户可以通过单击链接来浏览不同的网页或文件。

构建payload

"><a href="javascript:alert(/xss/)">alert</a><"

6.大小写绕过过滤

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uwTn5jMz-1680177450081)(C:\Users\35575\AppData\Roaming\Typora\typora-user-images\image-20230328165137030.png)]

使用上一关的payload,发现href、script被过滤

尝试使用大小写绕过

成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q4yQWbAG-1680177450081)(C:\Users\35575\AppData\Roaming\Typora\typora-user-images\image-20230328165837187.png)]

7.双写绕过过滤

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vlcfvg3R-1680177450081)(C:\Users\35575\AppData\Roaming\Typora\typora-user-images\image-20230328170114848.png)]**

发现输入的herf和script被替换为空了,故尝试使用双写绕过

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RvpdMGVc-1680177450081)(C:\Users\35575\AppData\Roaming\Typora\typora-user-images\image-20230328170210750.png)]

8.html编码绕过

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2clFsbVy-1680177450081)(C:\Users\35575\AppData\Roaming\Typora\typora-user-images\image-20230328171651651.png)]

发现javascript被隔开

查看源代码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fm1zzbck-1680177450082)(C:\Users\35575\AppData\Roaming\Typora\typora-user-images\image-20230328171929470.png)]

过滤了挺多东西

这里可以使用编码绕过

我们输入的HTML编码 输出的则是代码,HTML实体编码在HTML页面会被解析而在后端看不到

payload:

javascript:alert(/xss/)

&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x2f;&#x78;&#x73;&#x73;&#x2f;&#x29;(Unicode编码)

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#47;&#120;&#115;&#115;&#47;&#41;(ASCII编码)

9.绕过http:/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HqM1ltr9-1680177450082)(C:\Users\35575\AppData\Roaming\Typora\typora-user-images\image-20230328183504658.png)]

检测输入的链接中是否存在http:/

构建payload

?keyword=javascript:alert(1)//http://www.baidu.com

后面的//http://www.baidu.com单纯为了绕过,没有任何作用

当然,这里只写http://也可以

这里加个注释符,要不然浏览器会懵逼

10.过滤大小括号,构建text属性

查看页面源代码,返现有三个参数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0569oHsg-1680177450082)(C:\Users\35575\AppData\Roaming\Typora\typora-user-images\image-20230328190216903.png)]

进行了一下传参测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T6R8JB6V-1680177450082)(C:\Users\35575\AppData\Roaming\Typora\typora-user-images\image-20230328190526445.png)]

结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FKHLjeFB-1680177450082)(C:\Users\35575\AppData\Roaming\Typora\typora-user-images\image-20230328190621290.png)]

可以发现,在keybord参数中应该是使用了htmlspecialchars,其它两个参数没有传进值来,t_sort中传入的参数,会将大小于号过滤

过滤了大小括号,所以不能用a标签

这里的话一开始想着没有输入框,所以不能使用onclick属性,但是看了wp以后发现可以构建输入框

构建payload:

" οnclick=alert(/xss/) type="text" 

于是源代码就变为了

<input name="t_sort"  value="" onclick=alert(/xss/) type="text" " type="hidden">

11.referer头传入xss

进行传参后查看源代码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f9uzAxUD-1680177450083)(C:\Users\35575\AppData\Roaming\Typora\typora-user-images\image-20230328193131040.png)]

上面两个参数没有传到值,然后下面的一个用了htmlspecialchars进行了过滤,另一个是将url的值传了下来,并且看起来没什么过滤,可以从这里入手

但是尝试了一番后发现都会进行url编码,无法闭合,看了wp后才知道这里ref的值是referer的值

喔,原来是因为

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2BBUseZd-1680177450083)(C:\Users\35575\AppData\Roaming\Typora\typora-user-images\image-20230328195149679.png)]

刚跳转过来时候查看就能明白了,referer,缩写嘛

​ Referer字段可以帮助服务器了解用户从哪个页面来到当前页面,以及在页面间跳转时用户所处的上下文环境。这对于Web应用程序的行为和用户体验有重要影响。例如,当用户从一个不可信任的页面跳转到另一个页面时,Web应用程序可以检查Referer字段,以确保请求来自合法的来源,从而防止恶意攻击,如CSRF(跨站请求伪造)。

用hackbar提交referer试试

擦,提交不上去,试试bp

" type='text' onclick='javascript:alert(1)'>//

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MfbXKr3N-1680177450083)(C:\Users\35575\AppData\Roaming\Typora\typora-user-images\image-20230328201244328.png)]

ok了,但时不太清楚为什么弹窗,但是跳转不到下一关

12.UA头传入xss

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x3ByjHl4-1680177450083)(C:\Users\35575\AppData\Roaming\Typora\typora-user-images\image-20230328201620898.png)]

​ User-Agent是HTTP协议中的一个请求头部字段,它描述了发送请求的客户端的一些信息,例如浏览器类型、版本号、操作系统和设备类型等。服务器可以使用User-Agent信息来判断请求的来源和处理方式。

和上一关基本一样,不再赘述

13.cookie头传入xss

和前两关一样,不再赘述

14.崩吧啦崩吧啦

崩的,不能做,哈哈哈

15.ng-include包含存在XSS的页面

对src进行传值时,发现下面的值会改变

在这里插入图片描述

所以从这里入手,先了解一下这串代码的意思以及执行的功能
以下是chatgpt的解释
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ajig2ND6-1680177450083)(C:\Users\35575\AppData\Roaming\Typora\typora-user-images\image-20230328205238846.png)]

ng-include 指令的参数应该是一个 URL,用于指定要加载的视图文件的位置。可以指定相对路径或绝对路径,视情况而定。

​ 也就是说,这里的ng-include指令用于包含外部的HTML文件,我们可以利用src包含一个存在xss的页面

构建payload:

src= 'level10.php?t_sort=" οnclick=alert(/xss/) type="text" >< '

这里的话包含了第十关的一个存在了XSS漏洞的HTML的文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zfTk82Jw-1680177450084)(C:\Users\35575\AppData\Roaming\Typora\typora-user-images\image-20230329205548099.png)]

16.构造onerror属性

输入一串payload后查看页面源代码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KS0U83Qp-1680177450084)(C:\Users\35575\AppData\Roaming\Typora\typora-user-images\image-20230329210929830.png)]

对一些字符进行了过滤,例如script,引号,反斜杠

这里突然想到的是实体编码绕过,但是总感觉不对劲,然后查询了一下看到了这句话

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7fITYX9S-1680177450084)(C:\Users\35575\AppData\Roaming\Typora\typora-user-images\image-20230329213406349.png)]

不能破坏语法结构

原文链接

这样的话就换个思路,我们发现没有对<>进行过滤,所以可以通过构造标签来进行插入

构建payload

<a%0D%0Aοnclick='alert(1)'>

%0d是十六进制的回车,%0a是十进制的回车,两者留一个就行

还可以构建

<img%0asrc=x%0aοnerrοr=alert(1)>

onerror 是 JavaScript 中的一个事件属性,它在图片、视频、音频等资源加载出错时触发。

17.onmouseover属性

输入一些可能被过滤的字符查看源代码,看看有没有被过滤

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xYMvFsvX-1680177450084)(C:\Users\35575\AppData\Roaming\Typora\typora-user-images\image-20230330191846347.png)]

这里应该是用了htmlspecialchars进行了过滤,这中间有个等号,这里应该是要将两个拼接起来

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u8JKSX7r-1680177450084)(C:\Users\35575\AppData\Roaming\Typora\typora-user-images\image-20230330193830162.png)]

但是这里问号后面必须得有参数的传入(亲测)

于是构建payload

?arg01=a&arg02=b οnmοuseοver=alert(1)
  `		onmouseover` 是一个 HTML 事件属性,它会在鼠标悬停在某个元素上时触发指定的 JavaScript 函数。该事件通常与 `onmouseout` 配合使用,后者会在鼠标离开该元素时触发另一个 JavaScript 函数。

​ 常见的应用场景是实现一些鼠标悬停交互效果,例如:当用户将鼠标悬停在某个图片上时,图片会出现放大或显示相关信息等操作。同时,由于该事件会在用户不点击页面,只是移动鼠标时就会触发,因此也常用于实现一些无需用户点击的交互效果。

18.同17

同17关,不再赘述,看了看源码中的19,20,源代码都是一样的

(亲测)

于是构建payload

?arg01=a&arg02=b οnmοuseοver=alert(1)
  `		onmouseover` 是一个 HTML 事件属性,它会在鼠标悬停在某个元素上时触发指定的 JavaScript 函数。该事件通常与 `onmouseout` 配合使用,后者会在鼠标离开该元素时触发另一个 JavaScript 函数。

​ 常见的应用场景是实现一些鼠标悬停交互效果,例如:当用户将鼠标悬停在某个图片上时,图片会出现放大或显示相关信息等操作。同时,由于该事件会在用户不点击页面,只是移动鼠标时就会触发,因此也常用于实现一些无需用户点击的交互效果。

18.同17

同17关,不再赘述,看了看源码中的19,20,源代码都是一样的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值