【Pikachu】漏洞练习平台做题记录+原理解析(2.1)XSS类型和原理

前言

Pikachu是一个带有漏洞的Web应用系统,在这里包含了常见的web安全漏洞。 如果你是一个Web渗透测试学习人员且正发愁没有合适的靶场进行练习,那么Pikachu可能正合你意。
pikachu的安装非常简单,如果安装配置过程中遇到了什么问题,欢迎找我询问。
这是pikachu的官方github:https://github.com/zhuifengshaonianhanlu/pikachu
本次做题使用的环境是linux,使用官方给出的docker部署方式部署。

![pikapika](https://img-blog.csdnimg.cn/f1fbb2235bcc4ff688e38c9496be8551.pn


上一篇 Pikachu-漏洞练习平台做题记录+原理解析(1)暴力破解
下一篇 Pikachu-漏洞练习平台做题记录+原理解析(2.2)XSS姿势和技巧


Cross-Site Scripting——类型和原理

0x00 概述

程序对输入和输出没有做合适的处理,导致“精心构造”的字符输出在前端时被浏览器当作有效代码解析执行从而产生危害。

Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。
XSS漏洞一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一直属于前三的江湖地位。
XSS是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。
形成XSS漏洞的主要原因是程序对输入和输出没有做合适的处理,导致“精心构造”的字符输出在前端时被浏览器当作有效代码解析执行从而产生危害。

XSS一般可以分为如下几种常见类型

  1. 反射性XSS:
    交互的数据一般不会被存在数据库里,一次性所见即所得,一般出现在查询类页面等。
  2. 存储型XSS
    交互的数据被存储在数据库里,永久性存储,一般出现在留言板、注册等页面。
  3. DOM型XSS
    不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出的时候产生的问题,一次性。也属于反射型的一种。

XSS漏洞测试流程

  1. 在目标站点上找到输入点,比如查询接口、留言板等;
  2. 输入一组“特殊字符+唯一识别字符”,点击提交后,查看返回的源码,是都有对应的处理
  3. 通过搜索定位到唯一字符,结合唯一字符前后语法确认是否可以构造js的条件(构造闭合)
  4. 提交构造较稳的代码(以及各种绕过姿势),看是否可以成功执行,如果成功执行则说明存在xss漏洞

ps: 一般查询接口容易出现反射型XSS,留言板容易出现存储型XSS
由于后台可能存在过滤措施,构造的script可能会被过滤掉,而无法生效,或者环境限制了执行(浏览器)
通过变化不通的script,尝试绕过后台过滤机制

0x01 反射型XSS(GET)

我们先随便输入字符提交,F12查看元素,可以看到返回的信息是用<p>标签包裹的
在这里插入图片描述
我们使用<\p>作为闭合字符,在后面添加一些能够明显看出来变化的元素,比如我这里使用的横线标签<hr>。
提交后可以看到,在返回的地方多出了一条横线,检查元素可以看到,服务器没有对特殊字符做任何过滤,直接将它作为了html页面的一部分展示了出来,这就说明了此处有xss漏洞。
在这里插入图片描述
我们在其中输入script代码,让浏览器弹出一个提示窗口。

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

在输入的时候,我们会发现输入不进去了,原因是输入框设置了最大长度maxlength,我们双击这个20,将它改为100。
在这里插入图片描述
然后我们完整地输入刚刚的代码,点击提交。
页面刷新了一下,一个窗口被弹了出来,显示着我们代码中的内容。
在这里插入图片描述
这就是一个简单的反射型xss,由前端输入到后端接收再输出,后端并没有对内容进行存储,也就是一次性的。可以通过点击带有这种xss的url达到利用的目的。

0x02 反射型XSS(POST)

这一题中,提示告诉我们先登录。
为了课程的学习能够循序渐进,逐步提升各种概念,“使用xss获取cookie”被我放在了下一章单独说,下一章中还有“使用xss进行钓鱼攻击”、“使用xss获取键盘记录结果”。
在这里插入图片描述
与上题一样,在输入框中输入相应代码即可弹出窗口。
在这里插入图片描述

在这里插入图片描述

若我们在提交时抓包查看报文,我们就会发现,这道题中使用的报文传输方式是post,上一题是get,而这对于我们来说有什么不同呢?
具体可以体现在利用时。在get方式中,由于传输的内容被放在了url里,攻击者只需要一个带有攻击代码的url,用户点击了该url就会产生相应攻击效果。而在post方式中,攻击者常用的方式是创建一个自动提交的表单,使用表单来提交post请求。攻击的方式需要随着传输的方式而改变。
在下一章的“利用xss获取cookie”中,我会具体展示利用方法上的不同。

在这里插入图片描述

0x03 存储型XSS

在这里插入图片描述
该题的思路很简单,既然是留言板,那么我们输入的文字都会被放在下方的留言列表中,若我们输入xss代码,那么只要服务器没有针对特殊字符进行过滤,xss代码就会一直存储在留言列表中,随着每次打开这个页面而每次执行。

123<script>alert("abc")</script>

在这里插入图片描述
效果:每次刷新这个页面都会弹出窗口。
在这里插入图片描述

0x04 DOM型XSS

随便输入字符后文本框下方出现了一个链接,经开发者工具定位查看,可以看到链接的网址正是我们输入进去的字符。
在这里插入图片描述
我们输入特殊字符,观察是否会被过滤。
在这里插入图片描述
可以看到,特殊字符并没有被过滤,反而直接拼接进了网页中。
我们在网页中右键查看源代码,搜索“what do you see”可以找到下图所示代码,可以看到,实际上在页面中是写了一个段js,通过dom读取文本框的内容,然后直接拼接到html语句中,并未做任何过滤操作。
那么,我们就可以构造语句来利用这个漏洞。
在这里插入图片描述
针对它,

<a href=' <!-- 要写入的地方-->    '>what do you see?</a>

我们构造以下语句:

#' onclick="alert(111)"

语句中,#是为了在点击链接后仍留在本页面,'是为了把插入点前面的引号闭合掉,后面就是我们要插入的点击事件和点击后的js效果代码。
将这个语句放入文本框中,点击按钮,我们看看效果。
在这里插入图片描述
我们成功闭合了字符,并将想要的js语句插入到了html网页中,弹出了窗口。

0x05 DOM型XSS-X

在这里插入图片描述
文本框中输入任意字符,点击按钮,文本框下出现一行带链接的字,点击后再次出现一行。
使用开发工具可以看到,第一个链接文字写入了点击事件“domxss()”,不跳转页面,第二个链接文字会进行页面跳转,与上一关类似,链接指向我们输入的文本内容。
输入特殊字符,查看是否有过滤。
在这里插入图片描述
结果告诉我们,并没有作任何过滤,我们查看一下源码,根据前后语法确认是否可以构造闭合达到执行js的条件。
在这里插入图片描述
我们可以构造js的payload如下,使网页弹出窗口。

#' οnclick="alert('xss')">

总结

DOM型XSS只在前端,与后端毫无关系。DOM-X型危害更大,它能够像反射型一样在URL中体现,将URL发给了受害者就能进行攻击。

END

猜你喜欢

转载自blog.csdn.net/ON_Zero/article/details/126488401
今日推荐