XSS跨站脚本攻击漏洞之3Pikachu中的利用和绕过

说在开头:文章是我通过查询资料后按照自己的理解总结出来的,所以如果有说法不对的地方,欢迎大佬指正~


今天使用的平台是Pikachu,可以看到它有以下几道题目:
在这里插入图片描述
昨天在DVWA里面遇到的都是最基础版的XSS,今天这个从名字上就知道它做了变形,有些我还没听过,边做边学吧。

由于上一篇DVWA的讲解已经非常详细了,所以为了节省时间,今天大致相同的步骤我就说简略一点。

1.反射型(get)

哈哈哈之前没看到题目是get方法,直接按post方法做的:

输入框有长度限制,所以F12修改maxlength,然后再输入payload:
在这里插入图片描述
出现弹窗:
在这里插入图片描述
用get方法做:
在这里插入图片描述

2.反射型(post)

首先是登录页面,发现直接在输入框里输入payload没有用,不知道是不是存在过滤机制,然后就去查看源码,然后发现页面上有提示:
在这里插入图片描述
登录成功以后,在输入框里写上payload,出现弹窗:
在这里插入图片描述

3.存储型

查看反射型(post)的源码时,看到这么一句话:
在这里插入图片描述
所以我们这次让它弹出cookie:
在这里插入图片描述
在这里插入图片描述

4.DOM型

F12查看源码,找到我们传参后它所在的语句:
在这里插入图片描述
发现用双引号并不能闭合,于是去看看它的传参语句:

  • 虽然注释里有答案,但我们的目的不是为了得到答案,而是知道它为什么那么写。

在这里插入图片描述
根据源码,我们 ’ > 来闭合前面的标签,成功闭合。但是< script >标签并不能出现弹窗,所以我们尝试换用插入一种HTML标签的方法,出现弹窗:
在这里插入图片描述

5.DOM型(xss-x)

按照图示步骤,现在输入框里输入内容,然后点按钮,再然后点下面那条链接:
在这里插入图片描述
然后会出现一条新的链接,我们F12定位到那条语句,可以看到我们刚才传的参就在这句话这:
在这里插入图片描述
查看它的传参源码:
在这里插入图片描述
payload刚才的一样,输入完以后要先点一下链接,才会出现弹窗:
在这里插入图片描述

6.xss之盲打

因为不确定哪一个输入框存在XSS漏洞,所以我们在两个地方都输入payload,并且为了区别,我们使两个弹窗的内容不一样;因为是盲打,所以直接用绕过几率最大的方法:
在这里插入图片描述
输入完成以后,查看提示,跳转到登录页面:
在这里插入图片描述
输入账号admin/1232456进行登录:
在这里插入图片描述
登录成功以后立马出现弹窗,弹窗依次弹出“hello”和“123”,因此可以知道,留言和输入姓名的地方都存在XSS漏洞:
在这里插入图片描述
在这里插入图片描述

7.xss之过滤

查看源码,可以看到这里用正则表达式对< script >标签进行了过滤:

  • 对这个过滤机制不清楚的,可以去看我XSS之DVWA那篇博客,里面讲得非常详细。

在这里插入图片描述
所以我们这里使用插入一种HTML标签的方法进行绕过:
在这里插入图片描述

8.xss之htmlspecialchars

htmlspecialchars()这个函数我第一次听,所以首要工作是搞清楚这个函数是干什么的。

  • 1.htmlspecialchars()函数定义及用法
    在php中,htmlspecialchars()函数是使用来把一些预定义的字符转换为HTML实体,返回转换后的新字符串,原字符串不变。如果 string 包含无效的编码,则返回一个空的字符串,除非设置了 ENT_IGNORE 或者 ENT_SUBSTITUTE 标志;
  • 2.一共有5个预定义的被转换的字符: &、"、’、<、> :转换为&xxx
  • 3.它的语法格式是:htmlspecialchars(string,flags,character-set,double_encode)
    一共有4个参数位置,除了第一个string是必要的,后面三个都是可选字段;
    其中,第2个字段flags是规定如何处理引号、无效的编码以及使用哪种文档类型。
  • 4.可用的引号类型:
    ENT_COMPAT:默认,仅编码双引号;
    ENT_QUOTES:编码双引号和单引号;
    ENT_NOQUOTES:不编码任何引号。

查看源码,可以看到使用的htmlspecialchars()函数只有一个参数,也就是说flags字段是默认选项,仅编码双引号:
在这里插入图片描述
因此,我们可以尝试用单引号来构造payload:

  • 之前使用的三种绕过的语法都不行,在网上找了一个新的payload:
    ’ οnclick='alert(document.cookie)'
    在这里插入图片描述

9.xss之href输出

查看源码:
在这里插入图片描述

href的定义: < a > 标签的 href 属性用于指定超链接目标的 URL。
href 属性的值可以是任何有效文档的相对或绝对URL,包括片段标识符和JavaScript 代码段。如果用户选择了 < a > 标签中的内容,那么浏览器会尝试检索并显示href属性指定的 URL 所表示的文档,或者执行 JavaScript 表达式、方法和函数的列表。

结合源码和href定义,我们可以知道:
虽然有htmlspecialchars()函数,但由于输入的url拼接在 < a href=‘输入的内容’>属性中,所以可以使用javascript语法来构造payload:
javascript:alert(1)
在这里插入图片描述

10.xss之js输出

查看源码,可以看到前面有一段注释:
在这里插入图片描述
看得似懂非懂吧,也不知道跟绕过有什么关系,所以我试着读一下代码。
首先可以看到,我们的输入被赋值给名叫 jsvar 的变量:
在这里插入图片描述
然后我们继续往下翻,发现在< script >< /script >标签中也有这个变量,昨天已经说过了,这个标签的作用就是在 HTML 页面中插入一段 JavaScript。
所以这里应该就是体现了注释中的“输入动态的生成到了js中”:
在这里插入图片描述
所以还是从闭合语句的角度来做,构造payload:
'< /script >< script >alert(‘123’)< /script >
成功绕过:
在这里插入图片描述


总结:
今天学习的Pikachu的前面几关可以在昨天学习DVWA的基础上轻松过关,但是后面的8.htmlspecialchars、9.href输出、10.js输出,这三道题,让我学会了很多知识点,很有收获。

学到了两个新的绕过方法:
1.οnclick=‘alert(document.cookie)’
2.javascript:alert(1)

发布了66 篇原创文章 · 获赞 26 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/u011785309/article/details/104697442