【pikachu靶场】跨站脚本攻击详细教程Cross-Site Scripting(xss)

发布于:2024-08-01 ⋅ 阅读:(165) ⋅ 点赞:(0)

文章目录

XSS(跨站脚本)概述

 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输出


XSS(跨站脚本)概述

Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。一般XSS可以分为如下几种常见类型:

    1.反射性XSS;

    2.存储型XSS;

    3.DOM型XSS;

XSS漏洞一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一直属于前三的江湖地位。

XSS是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。

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

因此在XSS漏洞的防范上,一般会采用“对输入进行过滤”和“输出进行转义”的方式进行处理:

  输入过滤:对输入进行过滤,不允许可能导致XSS攻击的字符输入;

  输出转义:根据输出点的位置对输出到前端的内容进行适当转义;

 1.反射型xss(get)

构造payload

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

 我们发现输入完('xss')就不能输入了,明显超过长度限制的

我们此处F12,选择这个输入框 ,将最大长度改为100,我们就可以正常输入内容了 

2.反射型xss(post)

我们发现一个登录框,我们在暴力破解那一关,获取到了管理员账号和密码,即

账号:admin

密码:123456

如果没做暴力破解我们也可以点一下提示看一下

输入账号密码后来到输入框,依旧输入我们的payload

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

可能有人会疑惑,这一关和上一关不是一样吗,不是这样的哦

3.存储型XSS

我们先看一下post和get请求的区别

数据传输方式:

GET请求:数据通过URL中的查询参数附加在URL后面,以明文形式传输数据。

POST请求:数据作为请求的正文发送,而不是通过URL传递。

数据长度限制:

GET请求:有长度限制,受浏览器和服务器对URL长度的限制。

POST请求:没有固定的长度限制,适合传输大量数据。

数据安全性:

GET请求:数据以明文形式暴露在URL中,容易被窃听和拦截。

POST请求:数据在请求正文中传输,并可以使用加密协议(如HTTPS)进行传输,相对更安全。

数据缓存:

GET请求:可以被浏览器缓存,可以提高性能。

POST请求:通常不被浏览器缓存。

 仔细观察就会发现,get型的那一关,我们输入的payload在url中有显示,而post则没有显示

payload

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

提交时,会有xss弹窗

并且当我们切换页面,再切换回来时,也会有xss弹窗,这说明我们的数据被存储起来了,也就是存储型的xss

4.DOM型xss

首先我们先看下什么是DOM,简单来说就是

DOM是一种用于表示和操作HTML、XML等文档结构的编程接口,通过它可以使用代码来访问、修改和操作Web页面的内容和结构。

回到题目,我们先随便输入一串内容,F12检查一下,顺找我们输入的语句

找到我们输入的内容,我们就要想办法构造payload了,首先我们需要先闭合我们的语句,然后构造一个onclick

这里我本来以为是双引号闭合,构造出来不对查看源代码发现,外面还有一个单引号

所以我们的payload应该是

' οnclick=alert('xss')>

 闭合后语句为

<a href='' οnclick=alert(‘xss’)>'>what do you see?</a>

5.DOM型XSS-X

 payload和上一关一样

' οnclick=alert('xss')>

和上一关唯一的区别就是,这一关是从url中获取我们提交的参数,体现的题目上就是我们多点了一下

 因为dom型都是前端操作,比较鸡肋,这里就不多说了

6.xss之盲打

这一关是什么意思呢,盲打也就是我们在前端并不能看到我们的代码,无法判断xss是否成功,只有在后台才能看到

我们构造payload

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

根据提示登录后台地址

成功弹窗俩次,发现俩个框都存在xss漏洞。

7.xss之过滤

首先试下我们之前的payload

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

我们提交后发现只有'>'了

发现<script>标签被过滤,采用其他方法绕过

构造payload

<a href="" οnclick="alert('xss')">

成功绕过弹窗

8.xss之htmlspecialchars

试下我们之前的payload

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

没有效果,查看源码

尝试使用a标签

Payload

' οnclick='alert("xss")

 闭合后的语句为

<a href='' οnclick='alert("xss")'>

 成功弹窗

9.xss之href输出

还是先试下我们之前的payload

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

没有效果,查看源码

尝试使用a标签

' οnclick='alert("xss")

依旧没效果

检查源代码发现左右尖括号和单双引号都被html编码了

使用jsp代码

Payload

javascript:alert(1)

成功弹窗

10.xss之js输出

依旧试下之前的payload

<scirpt>alert('xss')</script>

没有反应,我们查看源代码发现,<script>标签对应关系有问题,那么我们只需要闭合掉第一个<script>就可以了

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

成功弹窗


网站公告

今日签到

点亮在社区的每一天
去签到